Skip to content

Instantly share code, notes, and snippets.

@Geokureli
Last active June 11, 2020 16:55
Show Gist options
  • Save Geokureli/89c2875d64228c0bb5d1014ae5e2c245 to your computer and use it in GitHub Desktop.
Save Geokureli/89c2875d64228c0bb5d1014ae5e2c245 to your computer and use it in GitHub Desktop.
class Person extends FlxGroup
{
public var personG:FlxSprite = new FlxSprite();
// unrelated code removed for readibility
}
class PersonPlayer extends Person
{
var player:Person;
public override function new()
{
super();
player = new PersonAir();
}
override function update(elapsed:Float)
{
FlxSpriteUtil.bound(player.personG, 0, FlxG.worldBounds.width, 0, FlxG.worldBounds.height);
super.update(elapsed);
}
}
class PersonAir extends Person
{
// animation stuff
}
package;
import MenuState;
import PersonUtils;
import flixel.FlxCamera;
import flixel.FlxG;
import flixel.FlxObject;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.FlxSubState;
import flixel.addons.editors.ogmo.FlxOgmo3Loader;
import flixel.group.FlxGroup;
import flixel.system.debug.Window;
import flixel.tile.FlxTilemap;
import flixel.util.FlxColor;
import haxe.xml.Parser;
class PlayState extends FlxState
{
var player:PersonPlayer;
var enemies:FlxTypedGroup<PersonEnemy>;
var map:FlxOgmo3Loader;
var ground:FlxTilemap;
override public function create()
{
LoadTileMap();
enemies = new FlxTypedGroup<PersonEnemy>();
map.loadEntities(placeEntities, "entities");
add(enemies);
FlxG.camera.fade(FlxColor.BLACK, 0.33, true);
super.create();
}
function LoadTileMap()
{
map = new FlxOgmo3Loader(AssetPaths.AvatarWorld__ogmo, AssetPaths.AvatarWorld__json);
ground = map.loadTilemap(AssetPaths.grassA_1__png, "ground");
ground.immovable = true;
ground.follow();
add(ground);
add(map.loadTilemap(AssetPaths.groundrocksB__png, "rocks"));
add(map.loadTilemap(AssetPaths.vegetationA__png, "foliage"));
FlxG.worldBounds.set(0, 0, ground.width, ground.height);
}
function placeEntities(entity:EntityData)
{
switch (entity.name)
{
case "player":
player = new PersonPlayer();
player.personG.setPosition(entity.x, entity.y);
FlxG.camera.follow(player.personG, TOPDOWN, 1);
add(player);
case "enemy":
var enem = new PersonEnemy();
enem.personG.setPosition(entity.x, entity.y);
enemies.add(enem);
}
}
function checkEnemyVision(enemy:PersonEnemy)
{
if (ground.ray(enemy.personG.getMidpoint(), player.personG.getMidpoint()))
{
enemy.seesPlayer = true;
enemy.playerPosition = player.personG.getMidpoint();
}
else
{
enemy.seesPlayer = false;
}
}
override public function update(elapsed:Float)
{
checkKeyPresses();
FlxG.collide(player, enemies);
super.update(elapsed);
enemies.forEachAlive(checkEnemyVision);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment