private void DropObject() { if (Game.getInstance().map != null && mousePos != null) { MapGenerator.TileObject obj = Game.getInstance().map[(int)mousePos.x, (int)mousePos.z]; if (obj.Building == null && obj.Type != MapGenerator.Tile.TREEGRASS && Game.getInstance().gold != null && Game.getInstance().gold.CurrentAmount - currentBuilding.Cost >= 0) { currentBuilding.Create(); Building dropable = currentBuilding.SimpleCopy(); dropable.GameObject = Instantiate(currentBuilding.Prefab, mousePos, Quaternion.identity); dropable.RotateToDirection(); Game.getInstance().map[(int)mousePos.x, (int)mousePos.z].Building = dropable; if (currentBuilding.BuildingType == BuildingType.HOUSE) { for (int i = 0; i < House.CAPACITY; ++i) { Human human = new Human(); human.Target = House.FromBuilding(dropable); GameObject go = Instantiate(humanPrefab, new Vector3(0, 1, 0), Quaternion.identity); go.GetComponent <HumanEntity>().Human = human; } } } } }
private void ColorRoad(Color color) { foreach (GameObject g in road) { Vector3 position = g.transform.position; MapGenerator.TileObject tile = map[(int)position.x, (int)position.z]; if (tile.Building != null && tile.Building.BuildingType == BuildingType.ROAD) { map[(int)position.x, (int)position.z].Building.ChangeColor(color); } } }
public void PrintRoad(Node path) { ClearRoad(); if (path == null) { return; } Node current = path; Node previous = null; while (current != null) { MapGenerator.TileObject tile = map[current.x, current.y]; if (tile.Building == null) { Vector3 position = new Vector3(current.x, offset, current.y); GameObject r = Instantiate(currentBuilding.Prefab, position, Quaternion.identity); if (current.parent == null && previous != null) { current.direction = previous.direction; } if (current.direction >= Direction.UP) { r.transform.Rotate(0, 90, 0); } road.Add(r); Building building = currentBuilding.SimpleCopy(); building.GameObject = r; building.Direction = current.direction; map[current.x, current.y].Building = building; } previous = current; current = current.parent; } Game currentGame = Game.getInstance(); if (road.Count > 0 && road[0] != null) { if (currentGame == null || currentGame.gold == null || currentGame.gold.CurrentAmount - (road.Count * currentBuilding.Cost) < 0) { canPlaceRoad = false; ColorRoad(Color.red); } else { canPlaceRoad = true; } } }
private void ClearRoad() { foreach (GameObject g in road) { Destroy(g); Vector3 position = g.transform.position; MapGenerator.TileObject tile = map[(int)position.x, (int)position.z]; if (tile.Building != null && tile.Building.BuildingType == BuildingType.ROAD) { map[(int)position.x, (int)position.z].Building = null; } } road.Clear(); }
public void PlaceRoad() { if (canPlaceRoad) { foreach (GameObject g in road) { Vector3 position = g.transform.position; MapGenerator.TileObject tile = map[(int)position.x, (int)position.z]; if (tile.Building != null && tile.Building.BuildingType == BuildingType.ROAD) { map[(int)position.x, (int)position.z].Building.Create(); } } } else { ClearRoad(); } }
void Update() { if (Game.getInstance().enableMouse&& currentBuilding != null) { Vector3 newy = Vector3.zero; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { newy = hit.point; } newy.y = 1; Vector3 pos = new Vector3(Mathf.Round(newy.x), Mathf.Round(newy.y), Mathf.Round(newy.z)); pos = StayInMap(pos); mousePos = pos; if (Input.GetKeyDown("a")) { currentBuilding.Rotate(false); } if (Input.GetKeyDown("e")) { currentBuilding.Rotate(true); } if (currentBuilding.Prefab != null) { MapGenerator.TileObject obj = Game.getInstance().map[(int)mousePos.x, (int)mousePos.z]; if (obj.Building == null && obj.Type != MapGenerator.Tile.TREEGRASS && Game.getInstance().gold != null && Game.getInstance().gold.CurrentAmount - currentBuilding.Cost >= 0) { currentBuilding.ApplyDefaultColor(); if (currentBuilding.BuildingType == BuildingType.ROAD) { if (Input.GetKeyDown(KeyCode.Mouse0)) { start = new Node((int)pos.x, (int)pos.z, 0, null); road = new List <GameObject>(); } if (Input.GetKey(KeyCode.Mouse0)) { if (end == null || end.x != (int)pos.x || end.y != (int)pos.z) { end = new Node((int)pos.x, (int)pos.z, 0, null); map = Game.getInstance().map; Node path = astar.GetPath(map, start, end); PrintRoad(path); } } } else { if (Input.GetKeyDown(KeyCode.Mouse0)) { DropObject(); } } } else { currentBuilding.ChangeColor(Color.red); } if (obj.Building != null && obj.Building.BuildingType == BuildingType.ROAD && currentBuilding.BuildingType == BuildingType.ROAD) { if (Input.GetKeyUp(KeyCode.Mouse0)) { Debug.Log("UP"); PlaceRoad(); } } } } }