void OnTileOccupantRemove(TileOccupant occupant, string key) { GameObject mesh; tileOccupantGameObjects.TryGetValue(occupant, out mesh); Destroy(mesh); tileOccupantGameObjects.Remove(occupant); }
void OnTileOccupantAdd(TileOccupant tileOccupant, string key) { Hex hex; room.State.grid.TryGetValue(tileOccupant.tileId, out hex); if (hex != null) { GameObject mesh = Instantiate(Constants.Instance.occupantTypePrefabs[(int)tileOccupant.occupantTypeId]); mesh.transform.position = CartesianOffsetToWorldPosition(new Vector2(hex.x, hex.y)); Debug.Log($"{tileOccupant.textDescription} add! x => {hex.x}, y => {hex.y}"); mesh.transform.parent = tileOccupantContainerObject.transform; // Add "player" to map of players tileOccupantGameObjects.Add(tileOccupant, mesh); // On entity update... tileOccupant.OnChange += (List <Colyseus.Schema.DataChange> changes) => { Hex newHex; room.State.grid.TryGetValue(tileOccupant.tileId, out newHex); if (newHex != null) { Vector3 target = CartesianOffsetToWorldPosition(new Vector2(newHex.x, newHex.y)); Queue <Vector3> queue = new Queue <Vector3>(); tileOccupant.moveQueue.ForEach((Coordinate coord) => { queue.Enqueue(CartesianOffsetToWorldPosition(new Vector2(coord.x, coord.y))); }); mesh.GetComponent <TileOccupantLogic>().setNewTarget(target, queue); } }; } else { Debug.LogWarning("hex was null!"); } }