Пример #1
0
    internal void Update(MapPheromone mapPheromone)
    {
        if (mapPheromone == null)
        {
            if (markerEnergy != null)
            {
                markerEnergy.transform.position = Cell.transform.position;
            }
            if (markerToHome != null)
            {
                markerToHome.transform.position = Cell.transform.position;
            }
            if (markerToMineral != null)
            {
                markerToMineral.transform.position = Cell.transform.position;
            }
            if (markerToEnemy != null)
            {
                markerToEnemy.transform.position = Cell.transform.position;
            }
        }
        else
        {
            if (markerEnergy == null)
            {
                if (markerPrefab == null)
                {
                    markerPrefab = Resources.Load <GameObject>("Prefabs/Terrain/Marker");
                }
                markerEnergy      = HexGrid.Instantiate(markerPrefab, Cell.transform, false);
                markerEnergy.name = Cell.name + "-Energy";

                markerToHome      = HexGrid.Instantiate(markerPrefab, Cell.transform, false);
                markerToHome.name = Cell.name + "-Home";
                MeshRenderer meshRenderer = markerToHome.GetComponent <MeshRenderer>();
                meshRenderer.material.color = new Color(0, 0, 0.6f);

                markerToMineral             = HexGrid.Instantiate(markerPrefab, Cell.transform, false);
                markerToMineral.name        = Cell.name + "-Mineral";
                meshRenderer                = markerToMineral.GetComponent <MeshRenderer>();
                meshRenderer.material.color = new Color(0, 0.4f, 0);

                markerToEnemy               = HexGrid.Instantiate(markerPrefab, Cell.transform, false);
                markerToEnemy.name          = Cell.name + "-Mineral";
                meshRenderer                = markerToEnemy.GetComponent <MeshRenderer>();
                meshRenderer.material.color = new Color(0.4f, 0, 0);
            }

            if (mapPheromone.IntensityToHome > 0)
            {
                Vector3 position = Cell.transform.position;
                position.y += 0.054f + (0.2f * mapPheromone.IntensityToHome);
                position.x += 0.1f;
                markerToHome.transform.position = position;
            }
            else
            {
                Vector3 position = Cell.transform.position;
                position.y -= 1;
                position.x += 0.1f;
                markerToHome.transform.position = position;
            }

            if (mapPheromone.IntensityToMineral > 0)
            {
                Vector3 position = Cell.transform.position;
                position.y += 0.054f + (0.2f * mapPheromone.IntensityToMineral);
                position.x += 0.2f;
                markerToMineral.transform.position = position;
            }
            else
            {
                Vector3 position = Cell.transform.position;
                position.y -= 1;
                position.x += 0.2f;
                markerToMineral.transform.position = position;
            }

            if (mapPheromone.IntensityToEnemy > 0)
            {
                Vector3 position = Cell.transform.position;
                position.y += 0.054f + (0.2f * mapPheromone.IntensityToEnemy);
                position.x += 0.3f;
                markerToEnemy.transform.position = position;
            }
            else
            {
                Vector3 position = Cell.transform.position;
                position.y -= 1;
                position.x += 0.3f;
                markerToEnemy.transform.position = position;
            }

            float highestEnergy   = -1;
            int   highestPlayerId = 0;

            foreach (MapPheromoneItem mapPheromoneItem in mapPheromone.PheromoneItems)
            {
                if (mapPheromoneItem.PheromoneType == Engine.Ants.PheromoneType.Energy)
                {
                    if (mapPheromoneItem.Intensity >= highestEnergy)
                    {
                        highestEnergy   = mapPheromoneItem.Intensity;
                        highestPlayerId = mapPheromoneItem.PlayerId;
                    }
                }
            }
            //highestEnergy = 0;
            if (highestEnergy > 0)
            {
                Vector3 position = Cell.transform.position;
                position.y += 0.054f + (0.2f * highestEnergy);
                markerEnergy.transform.position = position;
                UnitFrame.SetPlayerColor(highestPlayerId, markerEnergy);
            }
            else
            {
                Vector3 position = Cell.transform.position;
                position.y -= 1;
                markerEnergy.transform.position = position;
            }
        }
    }
Пример #2
0
    void invoke()
    {
        if (WaitForTurn.WaitOne(10))
        {
            List <Position> newUpdatedPositions = new List <Position>();

            foreach (Position pos in MapInfo.Pheromones.Keys)
            {
                MapPheromone mapPheromone = MapInfo.Pheromones[pos];
                HexCell      hexCell      = GroundCells[pos];
                hexCell.Update(mapPheromone);

                newUpdatedPositions.Add(pos);
                updatedPositions.Remove(pos);
            }
            foreach (Position pos in updatedPositions)
            {
                HexCell hexCell = GroundCells[pos];
                hexCell.Update(null);
            }
            updatedPositions = newUpdatedPositions;

            //
            foreach (MapPlayerInfo mapPlayerInfo in MapInfo.PlayerInfo.Values)
            {
            }

            foreach (UnitFrame unitFrame in Units.Values)
            {
                //if (unitFrame.FinalDestination != null)
                {
                    unitFrame.JumpToTarget(unitFrame.FinalDestination);
                    //unitFrame.FinalDestination = null;
                }
                unitFrame.NextMove = null;
            }

            foreach (Move move in newMoves)
            {
                if (move.MoveType == MoveType.Add)
                {
                    if (Units.ContainsKey(move.UnitId))
                    {
                        // Happend in player view
                    }
                    else
                    {
                        CreateUnit(move);
                    }
                }
                else if (move.MoveType == MoveType.UpdateStats)
                {
                    if (Units.ContainsKey(move.UnitId))
                    {
                        UnitFrame unit = Units[move.UnitId];
                        unit.UpdateStats(move.Stats);
                    }
                    else
                    {
                        // Happend in player view
                    }
                }
                else if (move.MoveType == MoveType.Move ||
                         move.MoveType == MoveType.Extract ||
                         move.MoveType == MoveType.Fire)
                {
                    UnitFrame unit = Units[move.UnitId];
                    unit.NextMove = move;
                }
                else if (move.MoveType == MoveType.Hit)
                {
                    UnitFrame unit = Units[move.UnitId];
                    unit.NextMove = move;
                }
                else if (move.MoveType == MoveType.Upgrade)
                {
                    UnitFrame unit = Units[move.OtherUnitId];
                    unit.NextMove = move;
                }
                else if (move.MoveType == MoveType.UpdateGround)
                {
                    HexCell hexCell = GroundCells[move.Positions[0]];
                    hexCell.NextMove = move;
                    hexCell.UpdateGround();
                }
                else if (move.MoveType == MoveType.Delete)
                {
                    Debug.Log("Delete Unit " + move.UnitId);

                    UnitFrame unit = Units[move.UnitId];
                    unit.NextMove = null;
                    unit.Delete();
                    Units.Remove(move.UnitId);
                }
            }
            newMoves.Clear();
            WaitForDraw.Set();
        }
    }