diff --git a/client/src/Unit.ts b/client/src/Unit.ts index 4591b6ac..d20af6b3 100644 --- a/client/src/Unit.ts +++ b/client/src/Unit.ts @@ -3,8 +3,10 @@ import { Game } from "./Game"; import { GameMap } from "./map/GameMap"; import { Tile } from "./map/Tile"; import { NetworkEvents } from "./network/Client"; +import { AbstractPlayer } from "./player/AbstractPlayer"; import { Actor } from "./scene/Actor"; import { ActorGroup } from "./scene/ActorGroup"; +import { InGameScene } from "./scene/type/InGameScene"; import { UnitDisplayInfo } from "./ui/UnitDisplayInfo"; export class UnitActionManager { @@ -113,6 +115,7 @@ export class Unit extends ActorGroup { private unitDisplayInfo: UnitDisplayInfo; private actions: UnitAction[]; private queuedMovementTiles: Tile[]; + private player: AbstractPlayer; constructor(tile: Tile, unitJSON: JSON) { super({ @@ -142,6 +145,7 @@ export class Unit extends ActorGroup { this.attackType = unitJSON["attackType"]; this.availableMovement = unitJSON["remainingMovement"]; this.defaultMoveDistance = unitJSON["defaultMoveDistance"]; + this.player = AbstractPlayer.getPlayerByName(unitJSON["player"]); this.queuedMovementTiles = []; for (const jsonTile of unitJSON["queuedTiles"]) { @@ -377,4 +381,8 @@ export class Unit extends ActorGroup { this.addActor(actor); } } + + public getPlayer() { + return this.player; + } } diff --git a/client/src/player/ClientPlayer.ts b/client/src/player/ClientPlayer.ts index a120a8aa..7634e516 100644 --- a/client/src/player/ClientPlayer.ts +++ b/client/src/player/ClientPlayer.ts @@ -234,6 +234,11 @@ export class ClientPlayer extends AbstractPlayer { //TODO: Cycle through units on the tile const unit = units[0]; + // Don't allow selection of other player's units + if (unit.getPlayer() != this) { + return; + } + // Clear previously defined movement paths. this.clearMovementPath(); diff --git a/server/src/Unit.ts b/server/src/Unit.ts index 9bfe0911..b6d0bdd7 100644 --- a/server/src/Unit.ts +++ b/server/src/Unit.ts @@ -54,11 +54,17 @@ export class Unit { ServerEvents.on({ eventName: "moveUnit", parentObject: this, - callback: (data) => { + callback: (data, websocket) => { const targetTile = GameMap.getInstance().getTiles()[data["targetX"]][data["targetY"]]; + const player = Game.getPlayerFromWebsocket(websocket); - if (this.id !== data["id"] || this.tile === targetTile) return; + if ( + this.id !== data["id"] || + this.tile === targetTile || + this.player != player + ) + return; // Move the furthest we can possibly go, and queue the rest of tiles for next turn. @@ -245,6 +251,7 @@ export class Unit { name: this.name, tileX: this.tile.getX(), tileY: this.tile.getY(), + player: this.player.getName(), attackType: this.attackType, id: this.id, actions: this.getUnitActionsJSON(),