Пример #1
0
        void OnTileOccupantRemove(TileOccupant occupant, string key)
        {
            GameObject mesh;

            tileOccupantGameObjects.TryGetValue(occupant, out mesh);
            Destroy(mesh);

            tileOccupantGameObjects.Remove(occupant);
        }
Пример #2
0
        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!");
            }
        }