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