示例#1
0
 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;
                 }
             }
         }
     }
 }
示例#2
0
 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);
         }
     }
 }
示例#3
0
    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;
            }
        }
    }
示例#4
0
 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();
 }
示例#5
0
 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();
     }
 }
示例#6
0
    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();
                    }
                }
            }
        }
    }