From ffd6706cb02fdd37f5f461a37287a5860e69fb6c Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Mon, 29 Jun 2020 03:14:32 +0530 Subject: :tada: Initial Commit * Integrates Colyseus Server * Implements Basic Player movement * Player Remove/Update Events --- source/AssetPaths.hx | 4 +++ source/Main.hx | 13 ++++++++ source/PlayState.hx | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ source/Player.hx | 13 ++++++++ source/models/Player.hx | 21 ++++++++++++ source/models/State.hx | 15 +++++++++ 6 files changed, 151 insertions(+) create mode 100644 source/AssetPaths.hx create mode 100644 source/Main.hx create mode 100644 source/PlayState.hx create mode 100644 source/Player.hx create mode 100644 source/models/Player.hx create mode 100644 source/models/State.hx (limited to 'source') diff --git a/source/AssetPaths.hx b/source/AssetPaths.hx new file mode 100644 index 0000000..db7ef44 --- /dev/null +++ b/source/AssetPaths.hx @@ -0,0 +1,4 @@ +package; + +@:build(flixel.system.FlxAssets.buildFileReferences("assets", true)) +class AssetPaths {} diff --git a/source/Main.hx b/source/Main.hx new file mode 100644 index 0000000..efa0e2d --- /dev/null +++ b/source/Main.hx @@ -0,0 +1,13 @@ +package; + +import flixel.FlxGame; +import openfl.display.Sprite; + +class Main extends Sprite +{ + public function new() + { + super(); + addChild(new FlxGame(0, 0, PlayState)); + } +} diff --git a/source/PlayState.hx b/source/PlayState.hx new file mode 100644 index 0000000..f04dcc2 --- /dev/null +++ b/source/PlayState.hx @@ -0,0 +1,85 @@ +package; + +import flixel.FlxG; +import flixel.FlxSprite; +import flixel.FlxState; +import io.colyseus.Client; +import io.colyseus.Room; +import models.State; + +class PlayState extends FlxState +{ + var client = new Client('ws://localhost:3000'); + private var room:Room; + + private var players:Map = new Map(); + + override public function create() + { + super.create(); + + this.client.joinOrCreate("my_room", [], State, function(err, room) + { + if (err != null) + { + trace("JOIN ERROR: " + err); + return; + } + + this.room = room; + + this.room.state.players.onAdd = function(player, key) + { + trace("Player" + player.x); + var _player = new Player(player.x, player.y); + this.players[key] = _player; + add(_player); + } + + this.room.state.players.onChange = function(player, key) + { + trace("PLAYER CHANGED AT: ", key); + this.players[key].x = player.x; + this.players[key].y = player.y; + } + + this.room.state.players.onRemove = function(player, key) + { + trace("PLAYER REMOVED AT: ", key); + remove(this.players[key]); + } + }); + } + + override public function update(elapsed:Float) + { + if (FlxG.keys.pressed.UP) + { + // The up arrow key is currently pressed + // This code is executed every frame, while the key is pressed\ + this.room.send("move", {y: -1}); + } + + if (FlxG.keys.justPressed.DOWN) + { + // The left arrow key has just been pressed + // This code is only executed once, on the frame immediately after the key has been pressed + this.room.send("move", {y: 1}); + } + + if (FlxG.keys.justReleased.LEFT) + { + // The left arrow key has just been released + // This code is only executed once, on the frame immediately after the key has been released + this.room.send("move", {x: -1}); + } + + if (FlxG.keys.justReleased.RIGHT) + { + // The left arrow key has just been released + // This code is only executed once, on the frame immediately after the key has been released + this.room.send("move", {x: 1}); + } + super.update(elapsed); + } +} diff --git a/source/Player.hx b/source/Player.hx new file mode 100644 index 0000000..80c3f78 --- /dev/null +++ b/source/Player.hx @@ -0,0 +1,13 @@ +package; + +import flixel.FlxSprite; +import flixel.util.FlxColor; + +class Player extends FlxSprite +{ + public function new(x:Float = 0, y:Float = 0) + { + super(x, y); + loadGraphic("assets/images/player.png"); + } +} diff --git a/source/models/Player.hx b/source/models/Player.hx new file mode 100644 index 0000000..1de9b3a --- /dev/null +++ b/source/models/Player.hx @@ -0,0 +1,21 @@ +// +// THIS FILE HAS BEEN GENERATED AUTOMATICALLY +// DO NOT CHANGE IT MANUALLY UNLESS YOU KNOW WHAT YOU'RE DOING +// +// GENERATED USING @colyseus/schema 0.5.39 +// +package models; + +import io.colyseus.serializer.schema.Schema; + +class Player extends Schema +{ + @:type("number") + public var x:Dynamic = 0; + + @:type("number") + public var y:Dynamic = 0; + + @:type("string") + public var name:String = ""; +} diff --git a/source/models/State.hx b/source/models/State.hx new file mode 100644 index 0000000..4f89d35 --- /dev/null +++ b/source/models/State.hx @@ -0,0 +1,15 @@ +// +// THIS FILE HAS BEEN GENERATED AUTOMATICALLY +// DO NOT CHANGE IT MANUALLY UNLESS YOU KNOW WHAT YOU'RE DOING +// +// GENERATED USING @colyseus/schema 0.5.39 +// +package models; + +import io.colyseus.serializer.schema.Schema; + +class State extends Schema +{ + @:type("map", Player) + public var players:MapSchema = new MapSchema(); +} -- cgit v1.2.3