Ejemplo n.º 1
0
 // !patrol a2 b2, !patrol a2
 private bool TryParsePatrolCommand(List <string> args, ref Command command)
 {
     // 1 or 2 args. if only one => patrol between current position and target
     if (args.Count < 1 || MapPosition.TryParse(args[0], out var firstPosition) == false)
     {
         return(false);
     }
     command.position = firstPosition;
     if (args.Count >= 2 && MapPosition.TryParse(args[1], out var secondPosition))
     {
         command.secondPosition = secondPosition;
     }
     return(true);
 }
        public CreateConstructionState(Unit unit, MapPosition mapPosition, BuildingType buildingType, TileDirection direction)
        {
            if (GameController.Instance.CanBeBuild.Contains(buildingType) == false)
            {
                Debug.LogError($"{unit.name} is trying to build {buildingType.ToString()}, but this type of building is not allowed.");
                // FIXME: Unit Behaviour does not handle correctly when state is stopped in constructor.
                StopState();
                return;
            }

            this.unit            = unit;
            tilePosition         = mapPosition;
            this.buildingType    = buildingType;
            this.direction       = direction;
            constructionPosition = Map.Instance.GetTile(tilePosition).transform.position;
        }
Ejemplo n.º 3
0
        public MapTile GetTile(MapPosition position)
        {
            if (CheckPosition(position) == false)
            {
                Debug.LogError($"Out of bounds when trying to get map tile. {position.ToString()}");
                return(null);
            }

            var result = mapTiles[position.x, position.y];

            if (result == null)
            {
                Debug.LogError($"Empty map tile in map bounds. {position.ToString()}");
            }
            return(result);
        }
Ejemplo n.º 4
0
        public void Initialize(int x, int y, TileType type, TileDirection direction)
        {
            teamControl          = new bool[Enum.GetValues(typeof(TeamTag)).Length - 1];
            this.type            = type;
            Position             = new MapPosition(x, y);
            coordinateLabel.text = Position.Coordinates;
            name = $"{type.ToString()}({Position.CX}, {Position.y})";
            float rotation = 90 * (int)direction;

            foreach (var objectToRotate in objectsToRotate)
            {
                objectToRotate.Rotate(Vector3.up, rotation);
            }
            // IMPROVE: This is ugly. Rework tile type.
            floorImage.material = Map.Instance.GetTileMaterial(teamControl);
        }
Ejemplo n.º 5
0
 // !build a2 tower left, !build a2 tower, !build a2
 private bool TryParseBuildCommand(List <string> args, ref Command command)
 {
     if (args.Count < 1 || MapPosition.TryParse(args[0], out command.position) == false)
     {
         return(false);
     }
     if (args.Count > 1 && Enum.TryParse <BuildingType>(args[1], true, out var buildingType))
     {
         command.buildingType = buildingType;
     }
     if (args.Count > 2 && Enum.TryParse <TileDirection>(args[2], true, out var direction))
     {
         command.direction = direction;
     }
     return(true);
 }
Ejemplo n.º 6
0
        public static bool TryParse(string coordinates, out MapPosition position)
        {
            position    = new MapPosition();
            coordinates = coordinates.ToUpper();
            char xChar = coordinates[0];

            if (xChar < 'A' || xChar > 'Z')
            {
                return(false);
            }
            if (int.TryParse(coordinates.Substring(1, coordinates.Length - 1), out var yValue) == false)
            {
                return(false);
            }
            position = new MapPosition(xChar - 'A', yValue);
            return(true);
        }
Ejemplo n.º 7
0
        public void Build(BuildingType buildingType, MapPosition mapPosition, TileDirection direction)
        {
            var mapTile = Map.Instance.GetTile(mapPosition);

            if (mapTile.CheckCanBuild(unit.UnitTeam.teamTag, buildingType) == false)
            {
                return;
            }
            if (mapTile.ConstructionSite != null)
            {
                buildingType = mapTile.ConstructionSite.Building.type;
            }
            StopCurrentState();
            // TODO: Check if buildingType is specified or if there is a construction site.
            var buildState = new BuildState(unit, Map.Instance.GetTile(mapPosition), buildingType, direction);

            PushNewStateHandler(buildState);
        }
Ejemplo n.º 8
0
 public bool CheckPosition(MapPosition position) => position.x < mapWidth && position.y < mapHeight && position.x >= 0 && position.y >= 0;
Ejemplo n.º 9
0
 // !move a2
 private bool TryParseMoveCommand(List <string> args, ref Command command) => args.Count >= 1 && MapPosition.TryParse(args[0], out command.position);
Ejemplo n.º 10
0
 public void Move(MapPosition position)
 {
     StopCurrentState();
     PushNewStateHandler(new MoveState(unit, Map.Instance.GetTile(position).transform.position, 1.5f));
 }
Ejemplo n.º 11
0
 public void Patrol(MapPosition first, MapPosition?second)
 {
     StopCurrentState();
     PushNewStateHandler(new PatrolState(unit, first, second));
 }