This repository has been archived on 2025-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
citylimitsj/src/micropolisj/engine/HelicopterSprite.java
jason@long.name ed6795dfca Importing source code for MicropolisJ, the Java rewrite of Micropolis.
This edition of Micropolis, written for the Java desktop platform,
is fairly feature complete. I believe the only missing functionality
is that of loading the built-in scenarios, and this can be implemented
if there is any demand for it.

I will soon update the home page at http://code.google.com/p/micropolis/
with downloadable packages of this edition of the software.


git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@528 d9718cc8-9f43-0410-858b-315f434eb58c
2013-02-14 21:02:42 +00:00

101 lines
2.3 KiB
Java

// This file is part of MicropolisJ.
// Copyright (C) 2013 Jason Long
// Portions Copyright (C) 1989-2007 Electronic Arts Inc.
//
// MicropolisJ is free software; you can redistribute it and/or modify
// it under the terms of the GNU GPLv3, with additional terms.
// See the README file, included in this distribution, for details.
package micropolisj.engine;
public class HelicopterSprite extends Sprite
{
int count;
int destX;
int destY;
int origX;
int origY;
static int [] CDx = { 0, 0, 3, 5, 3, 0, -3, -5, -3 };
static int [] CDy = { 0, -5, -3, 0, 3, 5, 3, 0, -3 };
static final int SOUND_FREQ = 200;
public HelicopterSprite(Micropolis engine, int xpos, int ypos)
{
super(engine, SpriteKind.COP);
this.x = xpos * 16 + 8;
this.y = ypos * 16 + 8;
this.width = 32;
this.height = 32;
this.offx = -16;
this.offy = -16;
this.destX = city.PRNG.nextInt(city.getWidth()) * 16 + 8;
this.destY = city.PRNG.nextInt(city.getHeight()) * 16 + 8;
this.origX = x;
this.origY = y;
this.count = 1500;
this.frame = 5;
}
@Override
public void moveImpl()
{
if (this.count > 0) {
this.count--;
}
if (this.count == 0) {
// attract copter to monster and tornado so it blows up more often
if (city.hasSprite(SpriteKind.GOD)) {
MonsterSprite monster = (MonsterSprite) city.getSprite(SpriteKind.GOD);
this.destX = monster.x;
this.destY = monster.y;
}
else if (city.hasSprite(SpriteKind.TOR)) {
TornadoSprite tornado = (TornadoSprite) city.getSprite(SpriteKind.TOR);
this.destX = tornado.x;
this.destY = tornado.y;
}
else {
this.destX = origX;
this.destY = origY;
}
if (getDis(x, y, origX, origY) < 30) {
// made it back to airport, go ahead and land.
this.frame = 0;
return;
}
}
if (city.acycle % SOUND_FREQ == 0) {
// send report, if hovering over high traffic area
int xpos = this.x / 16;
int ypos = this.y / 16;
if (city.getTrafficDensity(xpos, ypos) > 170 &&
city.PRNG.nextInt(8) == 0)
{
city.sendMessageAt(MicropolisMessage.HEAVY_TRAFFIC_REPORT,
xpos, ypos);
city.makeSound(xpos, ypos, Sound.HEAVYTRAFFIC);
}
}
int z = this.frame;
if (city.acycle % 3 == 0) {
int d = getDir(x, y, destX, destY);
z = turnTo(z, d);
this.frame = z;
}
x += CDx[z];
y += CDy[z];
}
}