PageRenderTime 53ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/BaseLevel.hx

http://boxyboxumber.googlecode.com/
Haxe | 1842 lines | 1554 code | 125 blank | 163 comment | 363 complexity | 2bb5eebc33c2a7090a3377c26c3bf7d4 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. import flash.display.Sprite;
  2. import flash.display.Bitmap;
  3. import flash.display.BitmapData;
  4. import flash.events.Event;
  5. import flash.events.MouseEvent;
  6. import flash.events.KeyboardEvent;
  7. import flash.geom.Point;
  8. import flash.geom.Rectangle;
  9. import flash.geom.Matrix;
  10. import flash.utils.Timer;
  11. import haxe.FastList;
  12. import haxe.Timer;
  13. import Kongregate;
  14. import Images;
  15. import TileModel;
  16. import HealthBarView;
  17. class TileModelContainer
  18. {
  19. public var model:TileModel;
  20. public var camera:Rectangle;
  21. public var HealthBar:HealthBarView;
  22. public function new(inModel:TileModel,inCamera:Rectangle)
  23. {
  24. model = inModel;
  25. HealthBar = new HealthBarView(model,inCamera);
  26. }
  27. }
  28. class BaseLevel extends Sprite
  29. {
  30. private var myTimer:Timer;
  31. private static inline var MAX_TILE_SIZE:Int = 64;
  32. private var MAP_COLUMNS:Int;
  33. private var MAP_ROWS:Int;
  34. private var maxX:Float;
  35. private var minX:Float;
  36. public var DamageTaken:Int;
  37. private var kongVar : CKongregate;
  38. private var Difficulty:Int;
  39. //tile ID s in tile sheet
  40. private static inline var BOX:Int = 00;
  41. private static inline var BOSS:Int = 12;
  42. private static inline var SKY:Int = 10;
  43. private static inline var PLATFORM:Int = 11;
  44. private static inline var MACHINE_GUN:Int = 01;
  45. private static inline var PISTOL:Int = 02;
  46. private static inline var SHOTGUN:Int = 03;
  47. private static inline var PINK:Int = 21;
  48. private static inline var BLUE:Int = 20;
  49. private static inline var FAIRY:Int = 30;
  50. private static inline var PINK_FAIRY = 22;
  51. private static inline var FLOWER = 31;
  52. private static inline var HEART = 32;
  53. private static inline var KITTY = 33;
  54. private static inline var PinkRadius:Float = 20.5;
  55. private static inline var BlueRadius:Float = 20.5;
  56. private var _platformMap:Array<Array<Int>>;
  57. private var _HeartMapUp:Array<Array<String>>;
  58. private var _HeartMapDown:Array<Array<String>>;
  59. private var _HeartMapLeft:Array<Array<String>>;
  60. private var _HeartMapRight:Array<Array<String>>;
  61. private var _gameObjectMap:Array<Array<Int>>;
  62. //Create blank BitmapData objects as the canvas for the game
  63. private var _staticBackgroundBitmapData:BitmapData;
  64. private var _staticBackgroundBitmap:Bitmap;
  65. private var _backgroundBitmapData:BitmapData;
  66. private var _backgroundBitmap:Bitmap;
  67. private var _foregroundBitmapData:BitmapData;
  68. private var _foregroundBitmap:Bitmap;
  69. private var _tileSheetBitmapData:TileSheet;
  70. private var _currentGunBitmapData:BitmapData;
  71. private var _camera:Rectangle;
  72. private var _boxModel:TileModel;
  73. private var _bossModel:BossModel;
  74. private var _bossController:BossController;
  75. private var MainHealthBar:HealthBarView;
  76. private var _bossHealth:BossHealthBarView;
  77. private var _gunModel:TileModel;
  78. private var _gunView:GunView;
  79. public var maxEnemiesOnScreen:Int;
  80. private var _enemies:FastList<TileModelContainer>;
  81. private var _enemiesReserve:FastList<TileModelContainer>;
  82. private var _MainCharacterController:MainCharacterController;
  83. private var _MainCharacterView:MainCharacterView;
  84. private var shotVector:VectorModel;
  85. private var shotVectorView:VectorView;
  86. //Create a collision Controller to handle the collision
  87. //between the player and the platformss
  88. private var _collisionController:TileCollisionController;
  89. private var _currentTile:Int;
  90. private var _mapRow:Int;
  91. private var _mapColumn:Int;
  92. public var volume:Bool;
  93. public var sound:Bool;
  94. private var mKeyDown:Array<Bool>;
  95. private var Pause:String;
  96. public var pauseMenu:PauseMenu;
  97. public function new(stage:Dynamic){
  98. super();
  99. _enemies = new FastList<TileModelContainer>();
  100. _enemiesReserve = new FastList<TileModelContainer>();
  101. _currentTile = 0;
  102. _mapRow = 0;
  103. _mapColumn = 0;
  104. MAP_COLUMNS = 10;
  105. MAP_ROWS = 8;
  106. minX = 0;
  107. maxX = stage.stageWidth*2;
  108. maxEnemiesOnScreen = 3;
  109. _tileSheetBitmapData = new TileSheet();
  110. _currentGunBitmapData = new MachineGun();
  111. _collisionController = new TileCollisionController();
  112. _staticBackgroundBitmapData = new CardboardBackground();
  113. _staticBackgroundBitmap = new Bitmap(_staticBackgroundBitmapData);
  114. _backgroundBitmapData = new BitmapData(MAP_COLUMNS * MAX_TILE_SIZE,
  115. MAP_ROWS * MAX_TILE_SIZE, true, 0);
  116. _backgroundBitmap = new Bitmap(_backgroundBitmapData);
  117. _foregroundBitmapData = new BitmapData(MAP_COLUMNS * MAX_TILE_SIZE,
  118. MAP_ROWS * MAX_TILE_SIZE, true, 0);
  119. _foregroundBitmap = new Bitmap(_foregroundBitmapData);
  120. _camera = new Rectangle (0, 0, stage.stageWidth, stage.stageHeight);
  121. addChild(_staticBackgroundBitmap);
  122. addChild(_backgroundBitmap);
  123. addChild(_foregroundBitmap);
  124. shotVector = new VectorModel();
  125. shotVectorView = new VectorView(shotVector, _camera, 1);
  126. addChild(shotVectorView);
  127. mKeyDown = [];
  128. Pause = "UnPaused";
  129. pauseMenu = new PauseMenu();
  130. pauseMenu.addEventListener("Quit",onQuit);
  131. stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown );
  132. stage.addEventListener(KeyboardEvent.KEY_UP, OnKeyUp );
  133. }
  134. public function onQuit(event:Event)
  135. {
  136. removeChild(pauseMenu);
  137. this.removeEventListener(Event.ENTER_FRAME, OnEnter);
  138. UnLoad();
  139. dispatchEvent(new Event("LevelQuit"));
  140. }
  141. public function OnKeyUp (event:KeyboardEvent)
  142. {
  143. mKeyDown[event.keyCode] = false;
  144. //lastUp = event.keyCode;
  145. }
  146. public function OnKeyDown(event:KeyboardEvent)
  147. {
  148. // When a key is held down, multiple KeyDown events are generated.
  149. // This check means we only pick up the first one.
  150. if (!mKeyDown[event.keyCode])
  151. {
  152. // Store for use in game
  153. mKeyDown[event.keyCode] = true;
  154. //I do this here, because if they hold down P,
  155. // it won't pause and unpause constantly.
  156. if(mKeyDown[ 80 ] == true)
  157. {
  158. mKeyDown[ 80 ] = false;
  159. if(Pause == "Paused")
  160. {
  161. Pause = "UnPaused";
  162. removeChild(pauseMenu);
  163. }
  164. else
  165. {
  166. Pause = "Paused";
  167. addChild(pauseMenu);
  168. }
  169. }
  170. }
  171. }
  172. public function Load(inVolume:Bool,inSound:Bool,inKongVar:CKongregate,inDifficulty:Int)
  173. {
  174. DamageTaken = 0;
  175. volume = inVolume;
  176. sound = inSound;
  177. kongVar = inKongVar;
  178. Difficulty = inDifficulty;
  179. flash.Lib.current.addChild(this);
  180. this.addEventListener(Event.ENTER_FRAME, OnEnter);
  181. //This brings focus to the level
  182. stage.focus = stage;
  183. }
  184. //abstract
  185. public function buildReserveEnemies()
  186. {
  187. }
  188. //Create tile Models and map them to the
  189. //correct positions on the tile sheet
  190. private function buildMap(map:Array<Array<Int>>)
  191. {
  192. for(mapColumn in 0...MAP_COLUMNS)
  193. {
  194. for(mapRow in 0...MAP_ROWS)
  195. {
  196. var currentTile:Int = map[mapRow][mapColumn];
  197. if(currentTile > -1)
  198. {
  199. //Find the tile's column and row position
  200. //on the tile sheet
  201. var tileSheetColumn:Int = Std.int(currentTile / 10);
  202. var tileSheetRow:Int = Std.int(currentTile % 10);
  203. switch(currentTile)
  204. {
  205. case BOSS:
  206. _bossModel
  207. = new BossModel
  208. (
  209. MAX_TILE_SIZE,
  210. tileSheetColumn, tileSheetRow,
  211. mapRow, mapColumn,
  212. 48, 48
  213. );
  214. //Add some gravity
  215. _bossModel.gravity_Vy = 0.98;
  216. //_bossController = new BossController(_bossModel);
  217. _bossModel.health = 105;
  218. _bossModel.MaxHealth = 105;
  219. if(Difficulty >= 3)
  220. {
  221. _bossModel.health = 210;
  222. _bossModel.MaxHealth = 210;
  223. }
  224. _bossHealth = new BossHealthBarView(_bossModel);
  225. case BOX:
  226. _boxModel
  227. = new TileModel
  228. (
  229. MAX_TILE_SIZE,
  230. tileSheetColumn, tileSheetRow,
  231. mapRow, mapColumn,
  232. 48, 48
  233. );
  234. if(Difficulty <= 1)
  235. {
  236. _boxModel.MaxHealth = 20;
  237. _boxModel.health = 20;
  238. }
  239. if(Difficulty >= 3)
  240. {
  241. _boxModel.MaxHealth = 8;
  242. _boxModel.health = 8;
  243. }
  244. //Add some gravity
  245. _boxModel.gravity_Vy = 0.98;
  246. //Add the UIView and UIController
  247. _MainCharacterController
  248. = new MainCharacterController(_boxModel);
  249. _MainCharacterView
  250. = new MainCharacterView
  251. (_boxModel, _MainCharacterController, stage);
  252. MainHealthBar = new HealthBarView(_boxModel,_camera);
  253. MainHealthBar.Color = 0x727272;
  254. addChild(MainHealthBar);
  255. drawGameObject(_boxModel, _foregroundBitmapData);
  256. _gunModel = new TileModel(
  257. MAX_TILE_SIZE,
  258. Std.int(MACHINE_GUN / 10), Std.int(MACHINE_GUN % 10),
  259. mapRow, mapColumn,
  260. MAX_TILE_SIZE, MAX_TILE_SIZE
  261. );
  262. _gunModel.setX = _boxModel.xPos;
  263. _gunModel.setY = _boxModel.yPos;
  264. _gunView = new GunView(_gunModel);
  265. _gunView.offsetX = -2; _gunView.offsetY= -10;
  266. loadTileIntoView(_gunModel, _gunView.modelBitmapData);
  267. addChild(_gunView);
  268. case PINK:
  269. //just draw for now
  270. var pinkModel = new TileModel
  271. (
  272. MAX_TILE_SIZE,
  273. tileSheetColumn, tileSheetRow,
  274. mapRow, mapColumn,
  275. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  276. );
  277. pinkModel.gravity_Vy = 0.98;
  278. pinkModel.vx = -5;
  279. pinkModel.friction = 1;
  280. //addChild(Circle);
  281. pinkModel.ImageX = 11;
  282. pinkModel.ImageY = 11;
  283. pinkModel.ImageWidth = 41;
  284. pinkModel.ImageHeight= 41;
  285. pinkModel.MaxHealth = 5*Difficulty;
  286. pinkModel.health = 5*Difficulty;
  287. pinkModel.setY = pinkModel.yPos +PinkRadius;
  288. pinkModel.setX = pinkModel.xPos +PinkRadius;
  289. pinkModel.CharacterType = "Pink";
  290. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  291. addChild(pinkModelContainer.HealthBar);
  292. _enemies.add(pinkModelContainer);
  293. drawGameObject(pinkModel,_foregroundBitmapData);
  294. case BLUE:
  295. var pinkModel = new TileModel
  296. (
  297. MAX_TILE_SIZE,
  298. tileSheetColumn, tileSheetRow,
  299. mapRow, mapColumn,
  300. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  301. );
  302. pinkModel.gravity_Vy = 0.98;
  303. //pinkModel.vx = -5;
  304. pinkModel.friction = 1;
  305. //addChild(Circle);
  306. pinkModel.ImageX = 11;
  307. pinkModel.ImageY = 11;
  308. pinkModel.ImageWidth = 41;
  309. pinkModel.ImageHeight= 41;
  310. pinkModel.setY = pinkModel.yPos +BlueRadius;
  311. pinkModel.setX = pinkModel.xPos +BlueRadius;
  312. pinkModel.CharacterType = "Blue";
  313. pinkModel.MaxHealth = 5*Difficulty;
  314. pinkModel.health = 5*Difficulty;
  315. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  316. addChild(pinkModelContainer.HealthBar);
  317. _enemies.add(pinkModelContainer);
  318. drawGameObject(pinkModel,_foregroundBitmapData);
  319. case FAIRY:
  320. //just draw for now
  321. var pinkModel = new TileModel
  322. (
  323. MAX_TILE_SIZE,
  324. tileSheetColumn, tileSheetRow,
  325. mapRow, mapColumn,
  326. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  327. );
  328. pinkModel.vx = -5;
  329. pinkModel.vy = -5;
  330. pinkModel.friction = 1;
  331. //addChild(Circle);
  332. pinkModel.ImageX = 0;
  333. pinkModel.ImageY = 0;
  334. pinkModel.ImageXOffset = 11;
  335. pinkModel.ImageYOffset = 11;
  336. pinkModel.ImageWidth = 64;
  337. pinkModel.ImageHeight= 64;
  338. pinkModel.setY = pinkModel.yPos +PinkRadius;
  339. pinkModel.setX = pinkModel.xPos +PinkRadius;
  340. pinkModel.CharacterType = "Fairy";
  341. pinkModel.MaxHealth = 5*Difficulty;
  342. pinkModel.health = 5*Difficulty;
  343. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  344. addChild(pinkModelContainer.HealthBar);
  345. _enemies.add(pinkModelContainer);
  346. drawGameObject(pinkModel,_foregroundBitmapData);
  347. case PINK_FAIRY:
  348. //just draw for now
  349. var pinkModel = new TileModel
  350. (
  351. MAX_TILE_SIZE,
  352. tileSheetColumn, tileSheetRow,
  353. mapRow, mapColumn,
  354. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  355. );
  356. pinkModel.vx = -5;
  357. pinkModel.vy = -5;
  358. pinkModel.friction = 1;
  359. //addChild(Circle);
  360. pinkModel.ImageX = 0;
  361. pinkModel.ImageY = 0;
  362. pinkModel.ImageXOffset = 11;
  363. pinkModel.ImageYOffset = 11;
  364. pinkModel.ImageWidth = 64;
  365. pinkModel.ImageHeight= 64;
  366. pinkModel.setY = pinkModel.yPos +PinkRadius;
  367. pinkModel.setX = pinkModel.xPos +PinkRadius;
  368. pinkModel.CharacterType = "PinkFairy";
  369. pinkModel.MaxHealth = 5*Difficulty;
  370. pinkModel.health = 5*Difficulty;
  371. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  372. addChild(pinkModelContainer.HealthBar);
  373. _enemies.add(pinkModelContainer);
  374. drawGameObject(pinkModel,_foregroundBitmapData);
  375. case FLOWER:
  376. //just draw for now
  377. var pinkModel = new TileModel
  378. (
  379. MAX_TILE_SIZE,
  380. tileSheetColumn, tileSheetRow,
  381. mapRow, mapColumn,
  382. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  383. );
  384. pinkModel.vx = -5;
  385. pinkModel.vy = 0;
  386. pinkModel.friction = 1;
  387. //addChild(Circle);
  388. pinkModel.ImageX = 0;
  389. pinkModel.ImageY = 0;
  390. pinkModel.ImageXOffset = 11;
  391. pinkModel.ImageYOffset = 11;
  392. pinkModel.ImageWidth = 64;
  393. pinkModel.ImageHeight= 64;
  394. pinkModel.setY = pinkModel.yPos +PinkRadius;
  395. pinkModel.setX = pinkModel.xPos +PinkRadius;
  396. pinkModel.CharacterType = "Flower";
  397. pinkModel.MaxHealth = 5*Difficulty;
  398. pinkModel.health = 5*Difficulty;
  399. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  400. addChild(pinkModelContainer.HealthBar);
  401. _enemies.add(pinkModelContainer);
  402. drawGameObject(pinkModel,_foregroundBitmapData);
  403. case HEART:
  404. //just draw for now
  405. var pinkModel = new TileModel
  406. (
  407. MAX_TILE_SIZE,
  408. tileSheetColumn, tileSheetRow,
  409. mapRow, mapColumn,
  410. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  411. );
  412. pinkModel.vx = 0;
  413. pinkModel.vy = 0;
  414. pinkModel.friction = 1;
  415. //addChild(Circle);
  416. pinkModel.ImageX = 0;
  417. pinkModel.ImageY = 0;
  418. pinkModel.ImageXOffset = 11;
  419. pinkModel.ImageYOffset = 11;
  420. pinkModel.ImageWidth = 64;
  421. pinkModel.ImageHeight= 64;
  422. pinkModel.setY = pinkModel.yPos +PinkRadius;
  423. pinkModel.setX = pinkModel.xPos +PinkRadius;
  424. pinkModel.CharacterType = "Heart";
  425. pinkModel.MaxHealth = 5*Difficulty;
  426. pinkModel.health = 5*Difficulty;
  427. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  428. addChild(pinkModelContainer.HealthBar);
  429. _enemies.add(pinkModelContainer);
  430. drawGameObject(pinkModel,_foregroundBitmapData);
  431. case KITTY:
  432. //just draw for now
  433. var pinkModel = new TileModel
  434. (
  435. MAX_TILE_SIZE,
  436. tileSheetColumn, tileSheetRow,
  437. mapRow, mapColumn,
  438. 41, 41,false, MAX_TILE_SIZE, MAX_TILE_SIZE
  439. );
  440. pinkModel.gravity_Vy = 0.98;
  441. pinkModel.vx = 0;
  442. pinkModel.vy = 0;
  443. pinkModel.friction = 1;
  444. //addChild(Circle);
  445. pinkModel.ImageX = 0;
  446. pinkModel.ImageY = 0;
  447. pinkModel.ImageXOffset = 11;
  448. pinkModel.ImageYOffset = 11;
  449. pinkModel.ImageWidth = 64;
  450. pinkModel.ImageHeight= 64;
  451. pinkModel.setY = pinkModel.yPos +PinkRadius;
  452. pinkModel.setX = pinkModel.xPos +PinkRadius;
  453. pinkModel.CharacterType = "Kitty";
  454. pinkModel.MaxHealth = 5*Difficulty;
  455. pinkModel.health = 5*Difficulty;
  456. var pinkModelContainer = new TileModelContainer(pinkModel,_camera);
  457. addChild(pinkModelContainer.HealthBar);
  458. _enemies.add(pinkModelContainer);
  459. drawGameObject(pinkModel,_foregroundBitmapData);
  460. case PLATFORM:
  461. var platform:TileModel
  462. = new TileModel
  463. (
  464. MAX_TILE_SIZE,
  465. tileSheetColumn, tileSheetRow,
  466. mapRow, mapColumn,
  467. MAX_TILE_SIZE, MAX_TILE_SIZE
  468. );
  469. drawGameObject(platform, _backgroundBitmapData);
  470. case SKY:
  471. var sky:TileModel
  472. = new TileModel
  473. (
  474. MAX_TILE_SIZE,
  475. tileSheetColumn, tileSheetRow,
  476. mapRow, mapColumn,
  477. MAX_TILE_SIZE, MAX_TILE_SIZE
  478. );
  479. drawGameObject(sky, _backgroundBitmapData);
  480. }
  481. }
  482. }
  483. }
  484. }
  485. //Loads a tile from the tile sheet
  486. //into the car Sprite's BitmapData obejct
  487. private function loadTileIntoView
  488. (tileModel:TileModel, bitmapData:BitmapData)
  489. {
  490. var sourceRectangle:Rectangle = new Rectangle
  491. (
  492. tileModel.tileSheetColumn * MAX_TILE_SIZE,
  493. tileModel.tileSheetRow * MAX_TILE_SIZE,
  494. tileModel.width,
  495. tileModel.height
  496. );
  497. var destinationPoint:Point = new Point(0, 0);
  498. bitmapData.copyPixels
  499. (
  500. _tileSheetBitmapData,
  501. sourceRectangle,
  502. destinationPoint,
  503. null, null, true
  504. );
  505. }
  506. public function chasePlayer
  507. (
  508. chasingObject:TileModel,
  509. targetObject:TileModel
  510. )
  511. {
  512. //Find the distance between the objects
  513. var vx:Float = targetObject.xPos - chasingObject.xPos;
  514. var vy:Float = targetObject.yPos - chasingObject.yPos;
  515. if(!getNewDirection(chasingObject))
  516. {return;}
  517. if(vx < 5 && vx > -5)
  518. vx = 0;
  519. if(vy < 5 && vy > -5)
  520. vy = 0;
  521. //If the distance is greater on the x axis...
  522. if(Math.abs(vx) > Math.abs(vy))
  523. {
  524. //Check whether to go left or right
  525. if(vx < 0)
  526. {
  527. //Try and go left
  528. if
  529. ( _platformMap[chasingObject.top][Math.floor((chasingObject.xPos - 1)/64)] != PLATFORM
  530. && _platformMap[chasingObject.bottom][chasingObject.left] != PLATFORM
  531. )
  532. {
  533. chasingObject.direction = "left";
  534. chasingObject.vx = -5;
  535. chasingObject.vy = 0;
  536. }
  537. //Can't go Left, try vy
  538. else
  539. {
  540. if(vy < 0)
  541. {
  542. //Try and go up
  543. if
  544. (
  545. _platformMap[chasingObject.top][Math.floor((chasingObject.xPos+5)/MAX_TILE_SIZE)] != PLATFORM
  546. && _platformMap[chasingObject.top][chasingObject.right] != PLATFORM
  547. )
  548. {
  549. chasingObject.direction = "up";
  550. chasingObject.vx = 0;
  551. chasingObject.vy = -5;
  552. }
  553. else
  554. {
  555. chasingObject.changeDirection = "left";
  556. findNewDirection(chasingObject);
  557. }
  558. }
  559. else if(vy > 0)
  560. {
  561. //Try and go down
  562. if
  563. (_platformMap[chasingObject.bottom][Math.floor((chasingObject.xPos+5)/MAX_TILE_SIZE)] != PLATFORM
  564. && _platformMap[chasingObject.bottom][chasingObject.right] != PLATFORM
  565. )
  566. {
  567. chasingObject.direction = "down";
  568. chasingObject.vx = 0;
  569. chasingObject.vy = 5;
  570. }
  571. else
  572. {
  573. chasingObject.changeDirection = "left";
  574. findNewDirection(chasingObject);
  575. }
  576. }
  577. else
  578. {
  579. chasingObject.changeDirection = "left";
  580. findNewDirection(chasingObject);
  581. }
  582. }
  583. }
  584. else if(vx > 0)
  585. {
  586. //Try and go right
  587. if
  588. (_platformMap[Math.floor((chasingObject.yPos-chasingObject.vy)/MAX_TILE_SIZE)][Math.floor((chasingObject.xPos+chasingObject.width+4)/MAX_TILE_SIZE)] != PLATFORM
  589. && _platformMap[Math.floor((chasingObject.yPos+chasingObject.height+chasingObject.vy)/MAX_TILE_SIZE)][Math.floor((chasingObject.xPos+chasingObject.width+4)/MAX_TILE_SIZE)] != PLATFORM
  590. )
  591. {
  592. chasingObject.direction = "right";
  593. chasingObject.vx = 5;
  594. chasingObject.vy = 0;
  595. }
  596. //Can't go right try vy
  597. else
  598. {
  599. if(vy < 0)
  600. {
  601. //Try and go up
  602. if
  603. (
  604. _platformMap[chasingObject.top][chasingObject.left] != PLATFORM
  605. && _platformMap[chasingObject.top][Math.floor((chasingObject.xPos + chasingObject.width-chasingObject.vx)/64)] != PLATFORM
  606. )
  607. {
  608. chasingObject.direction = "up";
  609. chasingObject.vx = 0;
  610. chasingObject.vy = -5;
  611. }
  612. else
  613. {
  614. chasingObject.changeDirection = "right";
  615. findNewDirection(chasingObject);
  616. }
  617. }
  618. else if(vy > 0)
  619. {
  620. //Try and go down
  621. if
  622. (_platformMap[chasingObject.bottom][chasingObject.left] != PLATFORM
  623. || _platformMap[chasingObject.bottom][chasingObject.right] != PLATFORM
  624. )
  625. {
  626. if (_platformMap[chasingObject.bottom][chasingObject.left] == PLATFORM)
  627. {
  628. chasingObject.vx = 1;
  629. chasingObject.vy = 0;
  630. chasingObject.direction = "right";
  631. }
  632. else if (_platformMap[chasingObject.bottom][chasingObject.right] == PLATFORM)
  633. {
  634. chasingObject.vx = -1;
  635. chasingObject.vy = 0;
  636. chasingObject.direction = "left";
  637. }
  638. else
  639. {
  640. chasingObject.vx = 0;
  641. chasingObject.vy = 5;
  642. chasingObject.direction = "down";
  643. }
  644. }
  645. else
  646. {
  647. chasingObject.changeDirection = "right";
  648. findNewDirection(chasingObject);
  649. }
  650. }
  651. else
  652. {
  653. chasingObject.changeDirection = "right";
  654. findNewDirection(chasingObject);
  655. }
  656. }
  657. }
  658. }
  659. //If the distance is greater on the y axis...
  660. else
  661. {
  662. if(vy < 0)
  663. {
  664. //Try and go up
  665. if
  666. (
  667. _platformMap[Math.floor((chasingObject.yPos-4)/MAX_TILE_SIZE)][chasingObject.left] != PLATFORM
  668. || _platformMap[Math.floor((chasingObject.yPos-4)/MAX_TILE_SIZE)][chasingObject.right] != PLATFORM
  669. )
  670. {
  671. if (_platformMap[Math.floor((chasingObject.yPos-4)/MAX_TILE_SIZE)][chasingObject.left] == PLATFORM)
  672. {
  673. chasingObject.vx = 5;
  674. chasingObject.vy = 0;
  675. chasingObject.direction = "right";
  676. }
  677. else if (_platformMap[Math.floor((chasingObject.yPos-4)/MAX_TILE_SIZE)][chasingObject.right] == PLATFORM)
  678. {
  679. chasingObject.vx = -5;
  680. chasingObject.vy = 0;
  681. chasingObject.direction = "left";
  682. }
  683. else
  684. {
  685. chasingObject.direction = "up";
  686. chasingObject.vx = 0;
  687. chasingObject.vy = -5;
  688. }
  689. }
  690. //Can't go up Try vx
  691. else
  692. {
  693. if(vx < 0)
  694. {
  695. //Try and go left
  696. if
  697. ( _platformMap[chasingObject.top][Math.floor((chasingObject.xPos-1)/MAX_TILE_SIZE)] != PLATFORM
  698. && _platformMap[chasingObject.bottom][Math.floor((chasingObject.xPos-1)/MAX_TILE_SIZE)] != PLATFORM
  699. )
  700. {
  701. chasingObject.direction = "left";
  702. chasingObject.vx = -5;
  703. chasingObject.vy = 0;
  704. }
  705. else
  706. {
  707. chasingObject.changeDirection = "up";
  708. findNewDirection(chasingObject);
  709. }
  710. }
  711. else if(vx > 0)
  712. {
  713. //Try and go right
  714. if
  715. (_platformMap[chasingObject.top][chasingObject.right] != PLATFORM
  716. && _platformMap[chasingObject.bottom][chasingObject.right] != PLATFORM
  717. )
  718. {
  719. chasingObject.direction = "right";
  720. chasingObject.vx = 5;
  721. chasingObject.vy = 0;
  722. }
  723. else
  724. {
  725. chasingObject.changeDirection = "up";
  726. findNewDirection(chasingObject);
  727. }
  728. }
  729. else
  730. {
  731. chasingObject.changeDirection = "up";
  732. findNewDirection(chasingObject);
  733. }
  734. }
  735. }
  736. else if(vy > 0)
  737. {
  738. //Try and go down
  739. if
  740. (_platformMap[Math.floor((chasingObject.yPos+chasingObject.height+4)/MAX_TILE_SIZE)][chasingObject.left] != PLATFORM
  741. || _platformMap[Math.floor((chasingObject.yPos+chasingObject.height+4)/MAX_TILE_SIZE)][chasingObject.right] != PLATFORM
  742. )
  743. {
  744. if (_platformMap[Math.floor((chasingObject.yPos+chasingObject.height+4)/MAX_TILE_SIZE)][chasingObject.left] == PLATFORM)
  745. {
  746. chasingObject.vx = 5;
  747. chasingObject.vy = 0;
  748. chasingObject.direction = "right";
  749. }
  750. else if (_platformMap[Math.floor((chasingObject.yPos+chasingObject.height+4)/MAX_TILE_SIZE)][chasingObject.right] == PLATFORM)
  751. {
  752. chasingObject.vx = -5;
  753. chasingObject.vy = 0;
  754. chasingObject.direction = "left";
  755. }
  756. else
  757. {
  758. chasingObject.direction = "down";
  759. chasingObject.vx = 0;
  760. chasingObject.vy = 5;
  761. }
  762. }
  763. //Can't go down. Try vx
  764. else
  765. {
  766. if(vx < 0)
  767. {
  768. //Try and go left
  769. if
  770. ( _platformMap[chasingObject.top][chasingObject.left] != PLATFORM
  771. && _platformMap[chasingObject.bottom][chasingObject.left] != PLATFORM
  772. )
  773. {
  774. chasingObject.direction = "left";
  775. chasingObject.vx = -5;
  776. chasingObject.vy = 0;
  777. }
  778. else
  779. {
  780. chasingObject.changeDirection = "down";
  781. findNewDirection(chasingObject);
  782. }
  783. }
  784. else if(vx > 0)
  785. {
  786. //Try and go right
  787. if
  788. (_platformMap[chasingObject.top][chasingObject.right] != PLATFORM
  789. && _platformMap[chasingObject.bottom][chasingObject.right] != PLATFORM
  790. )
  791. {
  792. chasingObject.direction = "right";
  793. chasingObject.vx = 5;
  794. chasingObject.vy = 0;
  795. }
  796. else
  797. {
  798. chasingObject.changeDirection = "down";
  799. findNewDirection(chasingObject);
  800. }
  801. }
  802. else
  803. {
  804. chasingObject.changeDirection = "down";
  805. findNewDirection(chasingObject);
  806. }
  807. }
  808. }
  809. }
  810. }
  811. public function getNewDirection(gameObject:TileModel)
  812. {
  813. var retval:Bool = false;
  814. switch(gameObject.direction)
  815. {
  816. case "left":
  817. gameObject.vx = -5;
  818. gameObject.vy = 0;
  819. case "right":
  820. gameObject.vx = 5;
  821. gameObject.vy = 0;
  822. case "up":
  823. gameObject.vx = 0;
  824. gameObject.vy = -5;
  825. case "down":
  826. gameObject.vx = 0;
  827. gameObject.vy = 5;
  828. }
  829. // trace("gameObject.changeDirection: " + gameObject.changeDirection);
  830. // trace("gameObject.direction: " + gameObject.direction);
  831. switch(gameObject.changeDirection)
  832. {
  833. case "1":
  834. {
  835. gameObject.changeDirection = "";
  836. }
  837. case "2":
  838. {
  839. gameObject.changeDirection = "1";
  840. }
  841. case "up":
  842. {
  843. if(_platformMap[Math.floor((gameObject.yPos-4)/MAX_TILE_SIZE)][gameObject.left] != PLATFORM
  844. && _platformMap[Math.floor((gameObject.yPos-4)/MAX_TILE_SIZE)][gameObject.right] != PLATFORM)
  845. {
  846. gameObject.changeDirection ="2";
  847. gameObject.direction = "up";
  848. gameObject.vx = 0;
  849. gameObject.vy = -5;
  850. }
  851. }
  852. case "left":
  853. if(_platformMap[gameObject.top][Math.floor((gameObject.xPos-6)/MAX_TILE_SIZE)] != PLATFORM
  854. && _platformMap[gameObject.bottom][Math.floor((gameObject.xPos-6)/MAX_TILE_SIZE)] != PLATFORM)
  855. {
  856. gameObject.changeDirection = "2";
  857. gameObject.direction = "left";
  858. gameObject.vx = -5;
  859. gameObject.vy = 0;
  860. }
  861. case "right":
  862. //trace(Math.floor((gameObject.yPos+gameObject.height+6)/MAX_TILE_SIZE)+","+Math.floor((gameObject.xPos+gameObject.width+6)/MAX_TILE_SIZE));
  863. if(_platformMap[gameObject.top][Math.floor((gameObject.xPos+gameObject.width+6)/MAX_TILE_SIZE)] != PLATFORM
  864. && _platformMap[gameObject.bottom][Math.floor((gameObject.xPos+gameObject.width+6)/MAX_TILE_SIZE)] != PLATFORM)
  865. {
  866. gameObject.changeDirection = "2";
  867. gameObject.direction = "right";
  868. gameObject.vx = 5;
  869. gameObject.vy = 0;
  870. }
  871. case "down":
  872. if(_platformMap[Math.floor((gameObject.yPos+gameObject.height+4)/MAX_TILE_SIZE)][gameObject.left] != PLATFORM
  873. && _platformMap[Math.floor((gameObject.yPos+gameObject.height+4)/MAX_TILE_SIZE)][gameObject.right] != PLATFORM)
  874. {
  875. gameObject.changeDirection = "2";
  876. gameObject.direction = "down";
  877. gameObject.vx = 0;
  878. gameObject.vy = 5;
  879. }
  880. default:
  881. retval = true;
  882. }
  883. return retval;
  884. }
  885. public function findNewDirection(gameObject:TileModel)
  886. {
  887. var newDirection:String = "";
  888. //A random number between 1 and 4
  889. if(gameObject.changeDirection == "down")
  890. {
  891. newDirection = _HeartMapDown[gameObject.centerY][gameObject.centerX];
  892. }
  893. else if(gameObject.changeDirection == "up")
  894. {
  895. newDirection = _HeartMapUp[gameObject.centerY][gameObject.centerX];
  896. }
  897. else if(gameObject.changeDirection == "left")
  898. {
  899. newDirection = _HeartMapLeft[gameObject.centerY][gameObject.centerX];
  900. }
  901. else if(gameObject.changeDirection == "right")
  902. {
  903. newDirection = _HeartMapRight[gameObject.centerY][gameObject.centerX];
  904. }
  905. // var randomDirection:Int;
  906. // randomDirection = Math.ceil(Math.random() * 4);
  907. // trace(randomDirection);
  908. //
  909. // //2. Encourage the monster to choose up or down if
  910. // //it's currently moving left or right
  911. // if(gameObject.direction == "left"
  912. // || gameObject.direction == "right")
  913. // {
  914. // if(randomDirection <= 2)
  915. // {
  916. // newDirection = "up";
  917. // }
  918. // else
  919. // {
  920. // newDirection = "down";
  921. // }
  922. // }
  923. // //if the object is currently moving up or down, make
  924. // //it move left or right
  925. // else
  926. // {
  927. // if(randomDirection <= 2)
  928. // {
  929. // newDirection = "left";
  930. // }
  931. // else
  932. // {
  933. // newDirection = "right";
  934. // }
  935. // }
  936. //Test the new direction and call this method recursively
  937. //if the direction runs the object into a wall
  938. switch(newDirection)
  939. {
  940. case "left":
  941. if(_platformMap[gameObject.mapRow][gameObject.mapColumn - 1]
  942. != PLATFORM)
  943. {
  944. gameObject.direction = newDirection;
  945. gameObject.vx = -5;
  946. gameObject.vy = 0;
  947. }
  948. else
  949. {
  950. //If the test hits a wall, assign this direction as
  951. //the object's new direction and test again.
  952. //(Assigning the new direction prevents the objects
  953. //from accidentally getting stuck in cul-de-sacs)
  954. gameObject.direction = newDirection;
  955. findRandomDirection(gameObject);
  956. }
  957. case "right":
  958. if(_platformMap[gameObject.mapRow][gameObject.mapColumn + 1]
  959. != PLATFORM)
  960. {
  961. gameObject.direction = newDirection;
  962. gameObject.vx = 5;
  963. gameObject.vy = 0;
  964. }
  965. else
  966. {
  967. gameObject.direction = newDirection;
  968. findRandomDirection(gameObject);
  969. }
  970. case "up":
  971. if(_platformMap[gameObject.mapRow - 1][gameObject.mapColumn]
  972. != PLATFORM)
  973. {
  974. gameObject.direction = newDirection;
  975. gameObject.vx = 0;
  976. gameObject.vy = -5;
  977. }
  978. else
  979. {
  980. gameObject.direction = newDirection;
  981. findRandomDirection(gameObject);
  982. }
  983. case "down":
  984. if(_platformMap[gameObject.mapRow + 1][gameObject.mapColumn]
  985. != PLATFORM)
  986. {
  987. gameObject.direction = newDirection;
  988. gameObject.vx = 0;
  989. gameObject.vy = 5;
  990. }
  991. else
  992. {
  993. gameObject.direction = newDirection;
  994. findRandomDirection(gameObject);
  995. }
  996. default:
  997. gameObject.direction = newDirection;
  998. findRandomDirection(gameObject);
  999. }
  1000. }
  1001. public function findRandomDirection(gameObject:TileModel)
  1002. {
  1003. if(_platformMap[gameObject.mapRow][gameObject.mapColumn - 1] != PLATFORM)
  1004. {
  1005. gameObject.direction = "left";
  1006. gameObject.vx = -5;
  1007. gameObject.vy = 0;
  1008. }
  1009. else if(_platformMap[gameObject.mapRow][gameObject.mapColumn + 1] != PLATFORM)
  1010. {
  1011. gameObject.direction = "right";
  1012. gameObject.vx = 5;
  1013. gameObject.vy = 0;
  1014. }
  1015. else if(_platformMap[gameObject.mapRow - 1][gameObject.mapColumn] != PLATFORM)
  1016. {
  1017. gameObject.direction = "up";
  1018. gameObject.vx = 0;
  1019. gameObject.vy = -5;
  1020. }
  1021. else if(_platformMap[gameObject.mapRow + 1][gameObject.mapColumn] != PLATFORM)
  1022. {
  1023. gameObject.direction = "down";
  1024. gameObject.vx = 0;
  1025. gameObject.vy = 5;
  1026. }
  1027. else
  1028. {
  1029. gameObject.direction = "";
  1030. gameObject.vx = 0;
  1031. gameObject.vy = 0;
  1032. }
  1033. }
  1034. private function drawGameObject
  1035. (
  1036. tileModel:TileModel,
  1037. screen:BitmapData
  1038. )
  1039. {
  1040. var sourceRectangle:Rectangle = new Rectangle
  1041. (
  1042. tileModel.tileSheetColumn * MAX_TILE_SIZE+ tileModel.ImageX,
  1043. tileModel.tileSheetRow * MAX_TILE_SIZE+ tileModel.ImageY,
  1044. tileModel.ImageWidth,
  1045. tileModel.ImageHeight
  1046. );
  1047. if(tileModel.invincble > 0 && tileModel.invincble % 3 == 0)
  1048. {
  1049. return;
  1050. }
  1051. var destinationPoint:Point = new Point
  1052. (
  1053. tileModel.xPos-(tileModel.ImageXOffset),
  1054. tileModel.yPos-(tileModel.ImageYOffset)
  1055. );
  1056. screen.copyPixels
  1057. (
  1058. _tileSheetBitmapData,
  1059. sourceRectangle,
  1060. destinationPoint,
  1061. null, null, true
  1062. );
  1063. }
  1064. private function drawGunObject
  1065. (
  1066. tileModel:TileModel,
  1067. sourceBitmapData:BitmapData,
  1068. screen:BitmapData
  1069. )
  1070. {
  1071. var sourceRectangle:Rectangle = new Rectangle
  1072. (
  1073. tileModel.tileSheetColumn * 100+ tileModel.ImageX,
  1074. tileModel.tileSheetRow * 100+ tileModel.ImageY,
  1075. tileModel.ImageWidth,
  1076. tileModel.ImageHeight
  1077. );
  1078. var destinationPoint:Point = new Point
  1079. (
  1080. tileModel.xPos,
  1081. tileModel.yPos
  1082. );
  1083. screen.copyPixels
  1084. (
  1085. sourceBitmapData,
  1086. sourceRectangle,
  1087. destinationPoint,
  1088. null, null, true
  1089. );
  1090. }
  1091. public function clearEnemies()
  1092. {
  1093. for(pinkModel in _enemies)
  1094. {
  1095. removeChild(pinkModel.HealthBar);
  1096. _enemies.remove(pinkModel);
  1097. }
  1098. }
  1099. public function UnLoad()
  1100. {
  1101. clearEnemies();
  1102. DamageTaken = _boxModel.MaxHealth - _boxModel.health;
  1103. for(pinkModel in _enemiesReserve)
  1104. {
  1105. _enemiesReserve.remove(pinkModel);
  1106. }
  1107. flash.Lib.current.removeChild(this);
  1108. removeChild(MainHealthBar);
  1109. if(_bossModel != null)
  1110. {
  1111. removeChild(_bossHealth);
  1112. }
  1113. removeChild(_gunView);
  1114. //_MainCharacterController = null;
  1115. }
  1116. public function checkWin()
  1117. {
  1118. var pinkModelCount = 0;
  1119. for(pinkModel in _enemies)
  1120. {
  1121. pinkModelCount++;
  1122. }
  1123. if(pinkModelCount < maxEnemiesOnScreen)
  1124. {
  1125. var tempModel = _enemiesReserve.pop();
  1126. if(tempModel != null)
  1127. {
  1128. addChild(tempModel.HealthBar);
  1129. tempModel.model.MaxHealth = 5*Difficulty;
  1130. tempModel.model.health = 5*Difficulty;
  1131. _enemies.add(tempModel);
  1132. pinkModelCount++;
  1133. }
  1134. }
  1135. return pinkModelCount <= 0;
  1136. }
  1137. function OnEnter(e:flash.events.Event)
  1138. {
  1139. try
  1140. {
  1141. if(checkWin())
  1142. {
  1143. UnLoad();
  1144. this.removeEventListener(Event.ENTER_FRAME, OnEnter);
  1145. dispatchEvent(new Event("LevelFinished"));return;
  1146. }
  1147. if(Pause == "Paused")
  1148. {
  1149. return;
  1150. }
  1151. //Clear the stage bitmap from the previous frame so that it's
  1152. //blank when you add the new tile positions
  1153. _foregroundBitmapData.fillRect(_foregroundBitmapData.rect, 0);
  1154. //Set up the camera to focus on the cat
  1155. _camera.x = Math.floor(_boxModel.xPos/stage.stageWidth)*stage.stageWidth;
  1156. _camera.y = _boxModel.yPos - stage.stageHeight * 0.5;
  1157. //Check the camera's game world boundaries
  1158. //Left
  1159. if(_camera.x < 0)
  1160. {
  1161. _camera.x = 0;
  1162. }
  1163. //Right
  1164. if(_camera.x > (MAP_COLUMNS * MAX_TILE_SIZE)
  1165. - stage.stageWidth)
  1166. {
  1167. _camera.x = (MAP_COLUMNS * MAX_TILE_SIZE) - stage.stageWidth;
  1168. }
  1169. //Bottom
  1170. if(_camera.y > (MAP_ROWS * MAX_TILE_SIZE) - stage.stageHeight)
  1171. {
  1172. _camera.y = (MAP_ROWS * MAX_TILE_SIZE) - stage.stageHeight;
  1173. }
  1174. //Top
  1175. if(_camera.y < 0)
  1176. {
  1177. _camera.y = 0;
  1178. }
  1179. if(_boxModel.health < 0)
  1180. {
  1181. UnLoad();
  1182. Load(volume,sound,kongVar,Difficulty);
  1183. }
  1184. //Update the box's Model
  1185. _boxModel.update();
  1186. //if Shoting
  1187. shotVector.update(0, 0,0,0);
  1188. var y2 = _boxModel.yPos + _boxModel.height/2;
  1189. var y1 = mouseY;
  1190. var x2 = _boxModel.xPos +_boxModel.width/2;
  1191. var x1 = mouseX+_camera.x;
  1192. var m = (y2 - y1 )/(x2 - x1);
  1193. var b = (y2) - m*(x2);
  1194. var testVector = new VectorModel();
  1195. testVector.update(x2, y2,x1,y1);
  1196. _gunModel.setX = _boxModel.xPos+_boxModel.width/2 - _camera.x;
  1197. _gunModel.setY =_boxModel.yPos+_boxModel.height/2;
  1198. var angle = ((Math.atan(testVector.slope))*180)/Math.PI;
  1199. if(testVector.dx < 0 )
  1200. {
  1201. angle += 180;
  1202. }
  1203. else if(testVector.dx < 0 && testVector.dy < 0)
  1204. {
  1205. angle -= 180;
  1206. }
  1207. _gunView.rotation = angle;
  1208. var shootFired = _boxModel.GetShot();
  1209. _boxModel.cooldown--;
  1210. _boxModel.invincble--;
  1211. if(shootFired)
  1212. {
  1213. //get Shot Vector
  1214. shotVector.update(x2, y2,x2+testVector.dx*(125),y2+testVector.dy*(125));
  1215. _collisionController.shotPlatformCollision(shotVector,_platformMap,PLATFORM,MAX_TILE_SIZE,MAP_COLUMNS,MAP_ROWS);
  1216. }
  1217. //Stop the box at the stage boundaries
  1218. //StageBoundaries.stopBitmap(_boxModel, stage);
  1219. maxX = Math.min(maxX, MAP_COLUMNS * MAX_TILE_SIZE);
  1220. if (_boxModel.xPos + (_boxModel.width) > maxX)
  1221. {
  1222. _boxModel.setX = maxX - (_boxModel.width);
  1223. _boxModel.vx = 0;
  1224. }
  1225. else if (_boxModel.xPos < minX)
  1226. {
  1227. _boxModel.setX = minX;
  1228. _boxModel.vx = 0;
  1229. }
  1230. if (_boxModel.yPos < 0)
  1231. {
  1232. _boxModel.setY = 0;
  1233. _boxModel.vy = 0;
  1234. }
  1235. else if (_boxModel.yPos + _boxModel.height > stage.stageHeight)
  1236. {
  1237. _boxModel.setY = stage.stageHeight - _boxModel.height;
  1238. _boxModel.vy = 0;
  1239. }
  1240. if(_boxModel.yPos + _boxModel.height >= stage.stageHeight)
  1241. {
  1242. _boxModel.jumping = false;
  1243. }
  1244. //Check for collisions with the platforms
  1245. _collisionController.platformCollision
  1246. (_boxModel, _platformMap, MAX_TILE_SIZE, PLATFORM);
  1247. for(pinkModel in _enemies)
  1248. {
  1249. pinkModel.model.update();
  1250. if(pinkModel.model.CharacterType=="Pink")
  1251. {
  1252. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos)-2,Std.int(pinkModel.model.yPos)-2,PinkRadius))
  1253. {_boxModel.hit();};
  1254. if(_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1255. {
  1256. pinkModel.model.vx =0;
  1257. }
  1258. else if(pinkModel.model.vx == 0)
  1259. {
  1260. pinkModel.model.vx = -5;
  1261. }
  1262. //Enemy Movement
  1263. //If the enemy's lower left or right corner is not a platform
  1264. //tile, reverse its movement
  1265. if(
  1266. pinkModel.model.centerY + 1 <= 0 || pinkModel.model.centerY + 1 >= MAP_ROWS ||
  1267. pinkModel.model.left < 0 || pinkModel.model.right > Std.int(maxX / MAX_TILE_SIZE)-1 ||
  1268. _platformMap[pinkModel.model.centerY + 1][pinkModel.model.left] != PLATFORM ||
  1269. _platformMap[pinkModel.model.centerY + 1][pinkModel.model.right] != PLATFORM
  1270. )
  1271. {
  1272. pinkModel.model.vx = -pinkModel.model.vx;
  1273. }
  1274. _collisionController.platformCollision
  1275. (pinkModel.model, _platformMap, MAX_TILE_SIZE, PLATFORM,0,1);
  1276. }
  1277. if(pinkModel.model.CharacterType=="Blue")
  1278. {
  1279. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos)-2,Std.int(pinkModel.model.yPos)-2,BlueRadius))
  1280. {_boxModel.hit();};
  1281. if(_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1282. {
  1283. pinkModel.model.vx =0;
  1284. }
  1285. else if(pinkModel.model.vx == 0)
  1286. {
  1287. pinkModel.model.vx = -5;
  1288. }
  1289. //Enemy Movement
  1290. if( pinkModel.model.xPos >= _boxModel.xPos-3 && pinkModel.model.xPos <= _boxModel.xPos + 3)
  1291. {
  1292. pinkModel.model.vx = 0;
  1293. }
  1294. else if(_boxModel.xPos > pinkModel.model.xPos)
  1295. {
  1296. pinkModel.model.vx = 5;
  1297. }
  1298. else
  1299. {
  1300. pinkModel.model.vx = -5;
  1301. }
  1302. if(_platformMap[pinkModel.model.centerY + 1][pinkModel.model.left] != PLATFORM && pinkModel.model.vx < 0 ||
  1303. _platformMap[pinkModel.model.centerY + 1][pinkModel.model.right] != PLATFORM && pinkModel.model.vx > 0)
  1304. {
  1305. pinkModel.model.vx = 0;
  1306. }
  1307. _collisionController.platformCollision
  1308. (pinkModel.model, _platformMap, MAX_TILE_SIZE, PLATFORM,0,0);
  1309. }
  1310. if(pinkModel.model.CharacterType=="Kitty")
  1311. {
  1312. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos)-2,Std.int(pinkModel.model.yPos)-2,BlueRadius))
  1313. {_boxModel.hit();};
  1314. //Enemy Movement
  1315. if( pinkModel.model.xPos >= _boxModel.xPos-3 && pinkModel.model.xPos <= _boxModel.xPos + 3)
  1316. {
  1317. pinkModel.model.vx = 0;
  1318. }
  1319. else if(_boxModel.xPos > pinkModel.model.xPos)
  1320. {
  1321. pinkModel.model.vx = 8;
  1322. }
  1323. else
  1324. {
  1325. pinkModel.model.vx = -8;
  1326. }
  1327. pinkModel.model.Teleport--;
  1328. if(pinkModel.model.Teleport < 0)
  1329. {
  1330. pinkModel.model.Teleport = 200;
  1331. pinkModel.model.setY = 0;
  1332. }
  1333. _collisionController.platformCollision
  1334. (pinkModel.model, _platformMap, MAX_TILE_SIZE, PLATFORM,0,0);
  1335. }
  1336. if(pinkModel.model.CharacterType=="PinkFairy")
  1337. {
  1338. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos)-2,Std.int(pinkModel.model.yPos)-2,PinkRadius))
  1339. {_boxModel.hit();};
  1340. //Enemy Movement
  1341. //If the enemy's lower left or right corner is not a platform
  1342. //tile, reverse its movement
  1343. if( pinkModel.model.xPos >= _boxModel.xPos-3 && pinkModel.model.xPos <= _boxModel.xPos + 3)
  1344. {
  1345. pinkModel.model.vx = 0;
  1346. }
  1347. else if(_boxModel.xPos > pinkModel.model.xPos)
  1348. {
  1349. pinkModel.model.vx = 5;
  1350. pinkModel.model.tileSheetRow = 3;
  1351. }
  1352. else
  1353. {
  1354. pinkModel.model.vx = -5;
  1355. pinkModel.model.tileSheetRow = 2;
  1356. }
  1357. if( pinkModel.model.yPos >= _boxModel.yPos-10 && pinkModel.model.yPos <= _boxModel.yPos + 10)
  1358. {
  1359. pinkModel.model.vy = 0;
  1360. }
  1361. else if(_boxModel.yPos > pinkModel.model.yPos)
  1362. {
  1363. pinkModel.model.vy = 5;
  1364. }
  1365. else
  1366. {
  1367. pinkModel.model.vy = -5;
  1368. }
  1369. _collisionController.platformCollision
  1370. (pinkModel.model, _platformMap, MAX_TILE_SIZE, PLATFORM,0,0);
  1371. }
  1372. if(pinkModel.model.CharacterType=="Fairy")
  1373. {
  1374. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos)-2,Std.int(pinkModel.model.yPos)-2,PinkRadius))
  1375. {_boxModel.hit();};
  1376. //Enemy Movement
  1377. //If the enemy's lower left or right corner is not a platform
  1378. //tile, reverse its movement
  1379. if(pinkModel.model.top < 0)
  1380. {
  1381. pinkModel.model.setY = 0;
  1382. pinkModel.model.vy = -pinkModel.model.vy;
  1383. }
  1384. else if(pinkModel.model.bottom >= MAP_ROWS)
  1385. {
  1386. pinkModel.model.vy = -pinkModel.model.vy;
  1387. }
  1388. else if(pinkModel.model.left < (minX/MAX_TILE_SIZE) )
  1389. {
  1390. pinkModel.model.setX = minX;
  1391. pinkModel.model.vx = -pinkModel.model.vx;
  1392. }
  1393. else if(pinkModel.model.right >= (maxX/MAX_TILE_SIZE))
  1394. {
  1395. pinkModel.model.vx = -pinkModel.model.vx;
  1396. }
  1397. _collisionController.platformCollision
  1398. (pinkModel.model, _platformMap, MAX_TILE_SIZE, PLATFORM,1,1);
  1399. }
  1400. if(pinkModel.model.CharacterType=="Flower")
  1401. {
  1402. if(_collisionController.roundTileCollision(_boxModel,Std.int(pinkModel.model.xPos),Std.int(pinkModel.model.yPos),PinkRadius))
  1403. {_boxModel.hit();};
  1404. //Enemy Movement
  1405. //If the enemy's lower left or right corner is not a platform
  1406. //tile, reverse its movement
  1407. //trace("vx " + pinkModel.model.vx);
  1408. if(!pinkModel.model.Clockwise)
  1409. {
  1410. if(pinkModel.model.vx < 0)
  1411. {
  1412. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1413. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX] != PLATFORM
  1414. && pinkModel.model.centerX == pinkModel.model.right
  1415. && pinkModel.model.centerX == pinkModel.model.left)
  1416. {
  1417. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX+1] == PLATFORM)
  1418. {
  1419. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1420. }
  1421. else if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX+1] == PLATFORM)
  1422. {
  1423. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1424. }
  1425. else
  1426. {
  1427. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1428. }
  1429. }
  1430. else if(_platformMap[pinkModel.model.centerY][pinkModel.model.left] == PLATFORM)
  1431. {
  1432. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1433. }
  1434. }
  1435. else if(pinkModel.model.vy > 0)
  1436. {
  1437. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1438. if(_platformMap[pinkModel.model.centerY][pinkModel.model.centerX+1] != PLATFORM
  1439. && pinkModel.model.centerY == pinkModel.model.top
  1440. && pinkModel.model.centerY == pinkModel.model.bottom
  1441. )
  1442. {
  1443. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX+1] == PLATFORM)
  1444. {
  1445. pinkModel.model.setX = pinkModel.model.xPos + 1;
  1446. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1447. }
  1448. else if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX+1] == PLATFORM)
  1449. {
  1450. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1451. }
  1452. else
  1453. {
  1454. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1455. }
  1456. }
  1457. // else if(_platformMap[pinkModel.model.bottom][pinkModel.model.centerX] == PLATFORM)
  1458. // {
  1459. // pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1460. // }
  1461. }
  1462. else if(pinkModel.model.vx > 0)
  1463. {
  1464. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1465. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX] != PLATFORM
  1466. && pinkModel.model.centerX == pinkModel.model.left && pinkModel.model.centerX == pinkModel.model.right)
  1467. {
  1468. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX-1] == PLATFORM)
  1469. {
  1470. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1471. }
  1472. else if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX-1] == PLATFORM)
  1473. {
  1474. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1475. }
  1476. else
  1477. {
  1478. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1479. }
  1480. }
  1481. else if(_platformMap[pinkModel.model.centerY][pinkModel.model.right] == PLATFORM)
  1482. {
  1483. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1484. }
  1485. }
  1486. else if(pinkModel.model.vy < 0)
  1487. {
  1488. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1489. if(_platformMap[pinkModel.model.centerY][pinkModel.model.centerX-1] != PLATFORM
  1490. && pinkModel.model.centerY == pinkModel.model.top
  1491. && pinkModel.model.centerY == pinkModel.model.bottom)
  1492. {
  1493. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX-1] == PLATFORM)
  1494. {
  1495. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1496. }
  1497. else if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX-1] == PLATFORM)
  1498. {
  1499. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1500. }
  1501. else
  1502. {
  1503. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1504. }
  1505. }
  1506. }
  1507. }
  1508. //Clockwise
  1509. else
  1510. {
  1511. if(pinkModel.model.vx > 0)
  1512. {
  1513. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1514. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX] != PLATFORM
  1515. && pinkModel.model.centerX == pinkModel.model.right
  1516. && pinkModel.model.centerX == pinkModel.model.left)
  1517. {
  1518. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX-1] == PLATFORM)
  1519. {
  1520. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1521. }
  1522. else if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX-1] == PLATFORM)
  1523. {
  1524. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1525. }
  1526. else
  1527. {
  1528. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1529. }
  1530. }
  1531. else if(_platformMap[pinkModel.model.centerY][pinkModel.model.left] == PLATFORM)
  1532. {
  1533. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1534. }
  1535. }
  1536. else if(pinkModel.model.vy < 0)
  1537. {
  1538. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1539. if(_platformMap[pinkModel.model.centerY][pinkModel.model.centerX+1] != PLATFORM
  1540. && pinkModel.model.centerY == pinkModel.model.top
  1541. && pinkModel.model.centerY == pinkModel.model.bottom)
  1542. {
  1543. if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX+1] == PLATFORM)
  1544. {
  1545. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1546. }
  1547. else if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX+1] == PLATFORM)
  1548. {
  1549. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1550. }
  1551. else
  1552. {
  1553. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1554. }
  1555. }
  1556. // else if(_platformMap[pinkModel.model.bottom][pinkModel.model.centerX] == PLATFORM)
  1557. // {
  1558. // pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1559. // }
  1560. }
  1561. else if(pinkModel.model.vx < 0)
  1562. {
  1563. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1564. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX] != PLATFORM
  1565. && pinkModel.model.centerX == pinkModel.model.left && pinkModel.model.centerX == pinkModel.model.right
  1566. )
  1567. {
  1568. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX+1] == PLATFORM)
  1569. {
  1570. pinkModel.model.setY = pinkModel.model.yPos -1;
  1571. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1572. }
  1573. else if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX+1] == PLATFORM)
  1574. {
  1575. pinkModel.model.vx = 0; pinkModel.model.vy = 5;
  1576. }
  1577. else
  1578. {
  1579. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1580. }
  1581. }
  1582. else if(_platformMap[pinkModel.model.centerY][pinkModel.model.right] == PLATFORM)
  1583. {
  1584. pinkModel.model.vx = 0; pinkModel.model.vy = -5;
  1585. }
  1586. }
  1587. else if(pinkModel.model.vy > 0)
  1588. {
  1589. //_platformMap[pinkModel.model.centerY + 1][pinkModel.model.centerX] != PLATFORM)
  1590. if(_platformMap[pinkModel.model.centerY][pinkModel.model.centerX-1] != PLATFORM
  1591. && pinkModel.model.centerY == pinkModel.model.top
  1592. && pinkModel.model.centerY == pinkModel.model.bottom)
  1593. {
  1594. if(_platformMap[pinkModel.model.centerY-1][pinkModel.model.centerX-1] == PLATFORM)
  1595. {
  1596. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1597. }
  1598. else if(_platformMap[pinkModel.model.centerY+1][pinkModel.model.centerX-1] == PLATFORM)
  1599. {
  1600. pinkModel.model.vx = 5; pinkModel.model.vy = 0;
  1601. }
  1602. else
  1603. {
  1604. pinkModel.model.vx = -5; pinkModel.model.vy = 0;
  1605. }
  1606. }
  1607. }
  1608. else if(_platformMap[pinkModel.model.bottom][pinkModel.model.centerX] == PLATFORM)
  1609. {
  1610. pinkModel

Large files files are truncated, but you can click here to view the full file