//collisions
//handles basic collision detection
init();
function init(){
//initialization
//direction constants
_root.NORTH = 0;
_root.NORTHWEST = 1;
_root.WEST = 2;
_root.SOUTHWEST = 3;
_root.SOUTH = 4;
_root.SOUTHWEST = 5;
_root.WEST = 6;
_root.NORTHWEST = 7;
//randomly position cars
reset(car1);
reset(car2);
reset(car3);
//set monster initial values
monster.dx = 0;
monster.dy = 0;
monster.speed = 0;
monster.dir = _root.NORTH;
//set flame initial values
flame.dx = 0;
flame.dy = 0;
flame.speed = 0;
flame.dir = _root.NORTH;
} // end init
monster.onEnterFrame = function(){
checkKeys();
turn(monster);
move(monster);
//move the cars, too
move(car1);
move(car2);
move(car3);
//and the flame, if it's visible
moveFlame();
//check for collisions
checkCollisions();
} // end monster enterFrame
function checkKeys(){
//check keyboard to move monster
if (Key.isDown(Key.UP)){
monster.speed++;
if (monster.speed > 8){
monster.speed = 8;
} // end if
} // end if
if (Key.isDown(Key.DOWN)){
monster.speed--;
if (monster.speed < -3){
monster.speed = -3;
} // end if
} // end if
if (Key.isDown(Key.RIGHT)){
monster.dir++;
if (monster.dir > 7){
monster.dir = 0;
} // end if
} // end if
if (Key.isDown(Key.LEFT)){
monster.dir--;
if (monster.dir < 0){
monster.dir = 7;
} // end if
} // end if
if (Key.isDown(Key.SPACE)){
//shoot flame
flame._x = monster._x;
flame._y = monster._y;
flame.dir = monster.dir;
flame.speed = monster.speed + 20;
turn(flame);
} // end if
} // end checkKeys
function reset(sprite){
//given a car sprite, resets its parameters
sprite._x = Math.random() * Stage.width;
sprite._y = Math.random() * Stage.height;
sprite.dir = Math.random() * 8;
sprite.dir = Math.floor(sprite.dir);
sprite._rotation = sprite.dir * 45;
sprite.speed = Math.random() * 10;
turn(sprite);
} // end reset
function move(sprite){
//moves any sprite, wrapping around boundaries
//move
sprite._x += sprite.dx;
sprite._y += sprite.dy;
//rotate
sprite._rotation = sprite.dir * 45;
//check boundaries - wrap all directions
if (sprite._x > Stage.width){
sprite._x = 0;
} // end if
if (sprite._x < 0){
sprite._x = Stage.width;
} // end if
if (sprite._y > Stage.height){
sprite._y = 0;
} // end if
if (sprite._y < 0){
sprite._y = Stage.height;
} // end if
} // end move
function moveFlame(){
//the flame has different behavior on borders, so give it its own
// movement function
//move
flame._x += flame.dx;
flame._y += flame.dy;
//rotate not needed
//flame._rotation = flame.dir * 45;
//hide on all boundaries
if ((flame._x > Stage.width) ||
(flame._x < 0) ||
(flame._y > Stage.height) ||
(flame._y < 0)){
resetFlame();
} // end if
} // end moveFlame
function resetFlame(){
//move off screen and stop
flame._x = - 200;
flame._y = - 200;
flame.speed = 0;
} // end resetFlame
function turn(sprite){
//given a sprite with a dir and speed, calculates dx and dy values
switch (sprite.dir){
case 0:
sprite.dx = 0 * sprite.speed;
sprite.dy = -1 * sprite.speed;
break;
case 1:
sprite.dx = .7 * sprite.speed;
sprite.dy = -.7 * sprite.speed;
break;
case 2:
sprite.dx = 1 * sprite.speed;
sprite.dy = 0 * sprite.speed;
break;
case 3:
sprite.dx = .7 * sprite.speed;
sprite.dy = .7 * sprite.speed;
break;
case 4:
sprite.dx = 0 * sprite.speed;
sprite.dy = 1 * sprite.speed;
break;
case 5:
sprite.dx = -.7 * sprite.speed;
sprite.dy = .7 * sprite.speed;
break;
case 6:
sprite.dx = -1 * sprite.speed;
sprite.dy = 0 * sprite.speed;
break;
case 7:
sprite.dx = -.7 * sprite.speed;
sprite.dy = -.7 * sprite.speed;
break;
default:
trace ("Something went wrong here...");
break;
} // end switch
} // end turn
function checkCollisions(){
//check for various collisions
if (monster.hitTest(car1)){
trace("hit by car 1!");
reset(car1);
} // end if
if (monster.hitTest(car2)){
trace("hit by car 2!");
reset(car2);
} // end if
if (monster.hitTest(car3)){
trace("hit by car 3!");
reset(car3);
} // end if
//look for flame collisions
if (flame.hitTest(car1)){
trace("burned car 1");
resetFlame();
reset(car1);
} // end if
if (flame.hitTest(car2)){
trace("burned car 2");
resetFlame();
reset(car2);
} // end if
if (flame.hitTest(car3)){
trace("burned car 3");
resetFlame();
reset(car3);
} // end if
} // end checkCollisions