Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package;
- import flixel.FlxG;
- import flixel.FlxSprite;
- import flixel.FlxState;
- import flixel.text.FlxText;
- import flixel.ui.FlxButton;
- import flixel.util.FlxMath;
- import flixel.addons.editors.ogmo.FlxOgmoLoader;
- import flixel.tile.FlxTilemap;
- import flixel.FlxObject;
- import flixel.FlxCamera;
- import flixel.group.FlxTypedGroup;
- import flixel.group.FlxGroup;
- import flixel.util.FlxColor;
- import flixel.util.FlxSort;
- import flixel.util.FlxPath;
- import flixel.util.FlxPoint;
- /**
- * A FlxState which can be used for the actual gameplay.
- */
- class PlayState extends FlxState
- {
- /**
- /Define Variables
- */
- public var _player:Player;
- private var _map:FlxOgmoLoader;
- public var _mWalls:FlxTilemap;
- private var _mWallTops:FlxTilemap;
- private var _hud:HUD;
- public var _money:Int = 0;
- public var _health:Int = 3;
- public var _maxHealth:Int = 3;
- private var path:FlxPath;
- private var pathPoints:Array<FlxPoint>;
- //Groups
- private var _grpCoins:FlxTypedGroup<Coin>;
- private var _grpEnemies:FlxTypedGroup<Enemy>;
- private var _grpSprites:FlxTypedGroup<AnimClass>;
- //Points
- private var _playMidPos:FlxPoint;
- private var _newPos:FlxPoint;
- /**
- * Function that is called up when to state is created to set it up.
- */
- override public function create():Void
- {
- //Load Map
- _map = new FlxOgmoLoader('assets/data/room-002.oel');
- _mWalls = _map.loadTilemap('assets/data/tiles.png', 64,64, "walls");
- _mWallTops = _map.loadTilemap('assets/data/tiles.png', 64,64, "wall_tops");
- //Set Wall Layer Props
- _mWalls.setTileProperties(1, FlxObject.NONE);
- _mWalls.setTileProperties(2, FlxObject.ANY);
- _mWalls.setTileProperties(3, FlxObject.ANY);
- //Set WallTop Layer Props
- _mWalls.setTileProperties(4, FlxObject.NONE);
- //Add Wall Layer
- add(_mWalls);
- //Initialize Pickups
- _grpCoins = new FlxTypedGroup<Coin>();
- //Initialize Enemies
- _grpEnemies = new FlxTypedGroup<Enemy>();
- //Initialize Player
- _player = new Player();
- _playMidPos = new FlxPoint(_player.x,_player.y);
- _newPos = new FlxPoint(_player.x,_player.y);
- //Init Sprites
- _grpSprites = new FlxTypedGroup<AnimClass>();
- //Load Stuff
- _map.loadEntities(placeEntities, "entities");
- add(_grpSprites);
- add(_player);
- add(_grpEnemies);
- add(_grpCoins);
- //Load Wall Tops
- add(_mWallTops);
- //Create HUD
- _hud = new HUD();
- add(_hud);
- //Set Camera
- FlxG.camera.follow(_player, FlxCamera.STYLE_TOPDOWN,0);
- super.create();
- }
- /**
- * Function that is called when this state is destroyed - you might want to
- * consider setting all objects this state uses to null to help garbage collection.
- */
- override public function destroy():Void
- {
- super.destroy();
- }
- /**
- * Function that is called once every frame.
- */
- override public function update():Void
- {
- super.update();
- //Collisions!
- FlxG.collide(_player, _mWalls);
- FlxG.overlap(_player, _grpCoins, playerTouchCoin);
- FlxG.collide(_grpEnemies, _mWalls);
- FlxG.overlap(_player, _grpEnemies, playerHurt);
- _grpEnemies.forEachAlive(checkEnemyVision);
- //Get Player Midpoint
- _playMidPos = new FlxPoint(_player.x+32,_player.y+32);
- _newPos = new FlxPoint(_player.x+32,_player.y);
- //Max health
- if (_health > _maxHealth)
- _health = _maxHealth;
- _grpSprites.sort(FlxSort.byY);
- }
- //Annual Vision Test
- private function checkEnemyVision(e:Enemy):Void
- {
- if (_mWalls.ray(e.getMidpoint(), _player.getMidpoint()))
- {
- e.pathPoints = _mWalls.findPath(e.getMidpoint(),_player.getMidpoint());
- e.seesPlayer = true;
- e.playerPos.copyFrom(_playMidPos);
- }
- else
- e.seesPlayer = false;
- }
- /*
- -----------------------------Place Entities Function-----------------------
- */
- private function placeEntities(entityName:String, entityData:Xml):Void
- {
- var x:Int = Std.parseInt(entityData.get("x"));
- var y:Int = Std.parseInt(entityData.get("y"));
- if (entityName == "player")
- {
- _grpSprites.add(new AnimClass(_player.x,_player.y,'Player',_player,null,0));
- _player.x = x;
- _player.y = y;
- }
- else if (entityName == "coin")
- {
- _grpCoins.add(new Coin(x + 16, y + 16,_player,this));
- }
- else if (entityName == "enemy")
- {
- _grpEnemies.add(new Enemy(x, y, Std.parseInt(entityData.get("etype")),this,_mWalls));
- }
- }
- /*
- ----------------------------Set Animations for Enemy---------------------------
- */
- public function setEnemyAnim(E:Enemy,T:Int,X:Float,Y:Float):Void
- {
- _grpSprites.add(new AnimClass(X,Y,'Enemy',null,E,T));
- }
- public function setCoinAnim(C:Coin):Void
- {
- _grpSprites.add(new AnimClass(C.x,C.y,'Coin',C));
- }
- //Collect Coins
- private function playerTouchCoin(P:Player, C:Coin):Void
- {
- if (P.alive && P.exists && C.alive && C.exists && C._pickedUp == false)
- {
- FlxG.camera.flash(FlxColor.WHITE, 0.3, true);
- _money++;
- _hud.updateHUD(_health,_maxHealth,_money);
- C.pickUp();
- }
- }
- //Get Hurt
- private function playerHurt(P:Player, E:Enemy):Void
- {
- if (E.etype == 0)
- FlxG.camera.shake(0.01,0.1);
- if (E.etype == 1)
- FlxG.camera.shake(0.02,0.1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement