void Start()
 {
     tableItem        = new TableTileItem(null, 0);
     buildableTile    = GetComponent <BuildableTile>();
     inventoryManager = GameObject.Find("GameManager").GetComponent <InventoryManager>();
     audioManager     = GameObject.Find("GameManager").GetComponent <AudioManager>();
     InventoryRendererSlot.onInventorySlotClick += OnInventorySlotClick;
 }
Exemple #2
0
 public void EndBuildMode()
 {
     for (int i = 0; i < tileSelectors.Count; i++)
     {
         Destroy(tileSelectors[i]);
     }
     tileToBuild = null;
     buildingTiles.Clear();
     tileSelectors.Clear();
 }
        // Called on the server after one of the clients tries to build a building
        // [Command]
        private void SpawnTower(BuildableTile tile)
        {
            GameObject tower = Instantiate(
                towerPrefab.gameObject,
                tile.GetBuildLocation(),
                Quaternion.identity
                );

            tile.SetTileOccupied(true);
        }
Exemple #4
0
    public virtual void PlaceTile(TownManager tm, Map map, List <Tile> buildingTiles, int rotAmt, Vector2 curBuildRotScale)
    {
        // Decide how to handle the placing of the tile
        BuildableTile bMain = new BuildableTile(buildingTiles[0].GetMapLoc(), buildingTiles[0].GetWorldLoc(), 'B', null, this);

        bMain.rotatedScale = curBuildRotScale;
        for (int i = 0; i < buildingTiles.Count; i++)
        {
            Vector3    pos            = buildingTiles[i].GetWorldLoc();
            Vector2    tileMapPos     = buildingTiles[i].GetMapLoc();
            Vector3    adjustedObjPos = new Vector3(pos.x + 0.5f, 0, pos.z + 0.5f);
            Quaternion tileRot        = Quaternion.Euler(0, 90 * rotAmt + 90, 0);
            GameObject newTileObj;
            if (needsBuilt)
            {
                if (preBuiltPrefabs.Length > 0)
                {
                    buildingTiles[i].DestroyTileObject();
                    newTileObj = (GameObject)GameObject.Instantiate(preBuiltPrefabs[i], adjustedObjPos, tileRot);
                }
                else
                {
                    newTileObj = buildingTiles[i].GetTileObj();
                }
                newTileObj.transform.parent = map.gameObject.transform;
            }
            else
            {
                // Wait for worker to be assigned to the tile
                buildingTiles[i].DestroyTileObject();
                newTileObj = (GameObject)GameObject.Instantiate(tileStages[0].tilePrefabs[i], adjustedObjPos, tileRot);
                newTileObj.transform.parent = map.gameObject.transform;
            }
            if (i == 0)
            {
                bMain.SetTileObj(newTileObj);
                map.SetTileFromMapPos((int)tileMapPos.x, (int)tileMapPos.y, bMain);
            }
            else
            {
                BuildableTileChild bChild = new BuildableTileChild(buildingTiles[i].GetMapLoc(), buildingTiles[i].GetWorldLoc(), 'b', newTileObj, bMain);
                bMain.AddBuildTileChild(bChild);
                map.SetTileFromMapPos((int)tileMapPos.x, (int)tileMapPos.y, bChild);
            }
        }

        if (needsBuilt)
        {
            bMain.SetBeingBuilt(true);
            // Call town manager to get first available citizen villager
            // Call BeginBuildPhase(citizen)
        }
        bMain.PlacedTile();
        tm.AddBuilding(bMain);
    }
Exemple #5
0
 public void CopyTile(BuildableTile tileToCopy)
 {
     // Copy all necessary attributes of the tileToCopy
     // Can override this on inherited class to copy all attributes
     this.scale           = tileToCopy.GetScale();
     this.tileStages      = tileToCopy.GetTileStages();
     this.needsBuilt      = tileToCopy.GetNeedsBuilt();
     this.preBuiltPrefabs = tileToCopy.GetPreBuiltPrefabs();
     this.requiredJob     = tileToCopy.GetRequiredJobType();
     this.bType           = tileToCopy.GetBuildingType();
     this.workers         = new List <Villager>();
 }
Exemple #6
0
    public void CreateMenuTree()
    {
        int         curLevelNum = 1;
        GameObject  newLevel    = (GameObject)Instantiate(buildMenuLevel, transform.position, transform.rotation, buildMenuContainer.transform);
        UIMenuLevel curLevel    = new UIMenuLevel(newLevel);
        UIMenuLevel rootLevel   = curLevel;

        for (int i = 0; i < menuArray.Length; i++)
        {
            MenuNode    item      = menuArray[i];
            UIMenuLevel nextLevel = curLevel;
            if (item.level > curLevelNum)
            {
                GameObject  newLevelObj = (GameObject)Instantiate(buildMenuLevel, transform.position, transform.rotation, buildMenuContainer.transform);
                UIMenuLevel newNode     = new UIMenuLevel(curLevel, newLevelObj);
                curLevel.children.Add(newNode);
                nextLevel = newNode;
            }
            else if (item.level < curLevelNum)
            {
                nextLevel = curLevel;
                for (int k = 0; k < (curLevelNum - item.level); k++)
                {
                    nextLevel = nextLevel.parent;
                }
            }

            GameObject newButton = (GameObject)Instantiate(buildMenuItem, transform.position, transform.rotation);
            newButton.transform.GetChild(0).gameObject.GetComponent <Image>().sprite = item.icon;
            newButton.transform.SetParent(nextLevel.level.transform, false);
            Button butt = newButton.GetComponent <Button>();
            if (item.isLeaf)
            {
                BuildableTile bTile = item.building.GetBuildableTile();
                butt.onClick.AddListener(() => ClickedLeafNode(bTile));
            }
            else
            {
                butt.onClick.AddListener(() => ClickedNonLeafNode(newButton.transform.GetSiblingIndex(), item.level));
            }
            curLevel    = nextLevel;
            curLevelNum = item.level;
        }
        buildMenuContainer.GetComponent <LayoutGroup>().SetLayoutHorizontal();
        LayoutRebuilder.ForceRebuildLayoutImmediate(buildMenuContainer.GetComponent <RectTransform>());
        for (int i = 1; i < buildMenuContainer.transform.childCount; i++)
        {
            buildMenuContainer.transform.GetChild(i).gameObject.SetActive(false);
        }
        buildMenuContainer.SetActive(false);
        curMenuNode = rootLevel;
        curLevelInt = 1;
    }
Exemple #7
0
    public BuildableTile GetBuildableTile()
    {
        BuildableTile bT = buildingTile;

        switch (buildingType)
        {
        case BuildingTypes.CollectResource:
            bT = collectResourceTile;
            break;

        case BuildingTypes.Crop:
            bT = cropTile;
            break;
        }
        return(bT);
    }
Exemple #8
0
 public void StartBuildModeForTile(BuildableTile buildTile)
 {
     if (curMode == Mode.Build)
     {
         buildMode.EndBuildMode();
         if (buildTile != buildMode.tileToBuild)
         {
             buildMode.StartBuildMode(buildTile);
             curMode = Mode.Build;
         }
     }
     else
     {
         buildMode.StartBuildMode(buildTile);
         curMode = Mode.Build;
     }
 }
Exemple #9
0
    public void ShowSelectorPanel(BuildableTile bTile)
    {
        for (int i = 0; i < villagerContent.transform.childCount; i++)
        {
            Destroy(villagerContent.transform.GetChild(i).gameObject);
        }
        List <Villager> possibleWorkers = tm.GetPossibleWorkers(bTile.GetRequiredJobType());

        for (int i = 0; i < possibleWorkers.Count; i++)
        {
            GameObject vBar = (GameObject)Instantiate(villagerBar, transform.position, transform.rotation);
            vBar.transform.SetParent(villagerContent.transform);
            vBar.transform.GetChild(0).GetComponent <TextMeshProUGUI>().text = possibleWorkers[i].villagerName;
            Villager vill = possibleWorkers[i];
            vBar.transform.GetChild(1).GetComponent <Button>().onClick.AddListener(() => tm.AssignVillagerToTile(vill, bTile));
        }
        villagerContent.GetComponent <LayoutGroup>().SetLayoutVertical();
        LayoutRebuilder.ForceRebuildLayoutImmediate(villagerContent.GetComponent <RectTransform>());
        Vector2 rotatedSize = bTile.GetRotatedScale();
        float   x           = (rotatedSize.x - 1) / 2;

        if (rotatedSize.x < 0)
        {
            x = (rotatedSize.x + 1) / 2;
        }
        float y = (rotatedSize.y - 1) / 2;

        if (rotatedSize.y < 0)
        {
            y = (rotatedSize.y + 1) / 2;
        }
        Vector3 bTilePos  = bTile.GetTileObj().transform.position;
        Vector3 middlePos = new Vector3(bTilePos.x + x, 0, bTilePos.z + y);

        targetPos = middlePos;
        Vector3 screenPos = Camera.main.WorldToScreenPoint(targetPos);

        selectorPanel.transform.position = screenPos;
        selectorPanel.SetActive(true);
        tileSelected = true;
    }
        // Only the owning player needs the camera
        // public override void OnStartAuthority()
        // {
        //     mainCamera = Camera.main;
        // }

        // [ClientCallback]
        private void Update()
        {
            // Each player will have a BuildingBuilder so there are multiple copies in the same scene, only execute on
            // the owning player
            // if (!hasAuthority)
            // {
            //     return;
            // }


            if (Mouse.current.leftButton.wasReleasedThisFrame)
            {
                Ray ray = mainCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
                if (Physics.Raycast(ray, out RaycastHit hitInfo, Mathf.Infinity, layerMask))
                {
                    BuildableTile tile = hitInfo.collider.GetComponent <BuildableTile>();
                    if (tile && !tile.IsOccupied())
                    {
                        SpawnTower(tile);
                    }
                }
            }
        }
Exemple #11
0
 public void DestroyedTile(BuildableTile bTile)
 {
     builtTiles.Remove(bTile);
 }
Exemple #12
0
 public void SetBuildingSelector(BuildableTile bTile)
 {
     bsUI.ShowSelectorPanel(bTile);
 }
Exemple #13
0
 public void ClickedLeafNode(BuildableTile buildTile)
 {
     mm.StartBuildModeForTile(buildTile);
 }
Exemple #14
0
 public void StartBuildMode(GameObject newBuildTile)
 {
     curBuildTileObj = newBuildTile;
     curBuildTile    = newBuildTile.GetComponent <BuildableTile>();
 }
Exemple #15
0
 void Start()
 {
     GetComponent <MeshRenderer>().enabled = false;
     parent    = transform.parent.GetComponent <BuildableTile>();
     tableTile = transform.parent.GetComponent <TableTile>();
 }
Exemple #16
0
 public BuildableTileChild(Vector2 mapLoc, Vector3 worldLoc, char type, GameObject tileObj, BuildableTile parent)
     : base(mapLoc, worldLoc, type, tileObj)
 {
     this.parent = parent;
 }
        //Alla lediga tiles får ett värde beroende på hur många lediga rutor som finns i en radie av 1. Läggs in i ListOfBuildPositions.
        // TODO När man bygger en Utility borde denna updateras.
        public void ConfigureMap()
        {
            var state = GameLayer.GetState();

            for (var i = 0; i < 10; i++)
            {
                for (var j = 0; j < 10; j++)
                {
                    if (state.Map[i][j] == 0)
                    {
                        int value = 1;

                        //Checks to see if the six squares around it are buildable land or not. Then raises that tiles score by one.
                        if (CheckTile(state.Map, i - 1, j - 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 1, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 1, j + 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j - 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j + 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 1, j - 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 1, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 1, j + 1))
                        {
                            value++;
                        }


                        BuildableTile tile = new BuildableTile(i, j, value);


                        ListOfBuildPositions.Add(tile);
                    }
                }
            }
            //Sortera listan efter mest värdefulla positionerna.
            ListOfBuildPositions = ListOfBuildPositions.OrderByDescending(x => x.Value).ToList();


            //Räkna ut hur många platser som ska tas up av utility buildings och lägg till så många platser till listan med UtilityPositions.
            UtilityPositions = BestUtilityPositions((ListOfBuildPositions.Count / config.PartOfUtilityBuildings), UtilityPositions);
            Console.WriteLine("Antal Utilities = " + UtilityPositions.Count);
            //Tar bort positionerna som finns i UtilityPositions i ListOfBuildPositions
            ReserveUtilityPositions();
            ResidencePositions = ListOfBuildPositions;

            //Detta gör så att vi bygger en jämn blanding av alla utilitybuildings
            // OBS detta är bara Optimalt för tillfället
            int counter = 0;

            foreach (var item in UtilityPositions)
            {
                if (counter == 0)
                {
                    item.UtilityType = Utility.WindTurbine;
                }
                else if (counter == 1)
                {
                    item.UtilityType = Utility.WindTurbine;
                }
                else if (counter == 2)
                {
                    item.UtilityType = Utility.WindTurbine;
                }

                counter++;
                if (counter == 3)
                {
                    counter = 1;
                }
            }

            //sätt alla hus till de hus vi har definerat i config klassen
            foreach (var item in ResidencePositions)
            {
                item.ResidenceType = config.TypeOfHouse;
            }

            //detta är bara ett test för den senaste metan när man får bonus för att det finns flera typer av hus på varje bana.
            //ResidencePositions[3].ResidenceType = Residence.Apartments;
            //ResidencePositions[4].ResidenceType = Residence.Cabin;
            //ResidencePositions[5].ResidenceType = Residence.HighRise;
            //ResidencePositions[6].ResidenceType = Residence.LuxuryResidence;
            //ResidencePositions[7].ResidenceType = Residence.EnviromentalHouse;
            //Lägg till resten till listan med residence positions
        }
Exemple #18
0
 public BuildableTile(Vector2 mapLoc, Vector3 worldLoc, char type, GameObject tileObj, BuildableTile tileToCopy)
     : base(mapLoc, worldLoc, type, tileObj)
 {
     childrenTiles = new List <BuildableTileChild>();
     CopyTile(tileToCopy);
 }
Exemple #19
0
 public void AssignToTile(BuildableTile newTile)
 {
     workTile = newTile;
     curJob   = newTile.GetRequiredJobType();
 }
Exemple #20
0
 public void BuiltTile(BuildableTile bTile)
 {
     builtTiles.Add(bTile);
 }
Exemple #21
0
 public void AddBuilding(BuildableTile bTile)
 {
     builtTiles.Add(bTile);
 }
Exemple #22
0
 public void AssignVillagerToTile(Villager vill, BuildableTile bTile)
 {
     bTile.AssignedVillager(vill);
 }
        //Alla lediga tiles får ett värde beroende på hur många lediga rutor som finns i en radie av 2. Läggs in i ListOfUtilityPositions.
        public List <BuildableTile> BestUtilityPositions(int antalUtilities, List <BuildableTile> supportBuildings)
        {
            var state = GameLayer.GetState();

            for (var i = 0; i < 10; i++)
            {
                for (var j = 0; j < 10; j++)
                {
                    if (state.Map[i][j] == 0)
                    {
                        //Checks to see if the squares in a radius of 2 is buildable
                        //Om den här platsen är reserverad i listan supportBuildings så breakar vi.
                        if (reservedTile(i, j, supportBuildings))
                        {
                            break;
                        }
                        int value;
                        if (supportBuildings.Count < 1)
                        {
                            value = 1;
                        }
                        else
                        {
                            value = AdjecentSupport(i, j, supportBuildings);
                        };
                        if (CheckTile(state.Map, i + 1, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 2, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 1, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 2, j))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j - 2))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j - 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j + 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i, j + 2))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 1, j - 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 1, j + 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i - 1, j + 1))
                        {
                            value++;
                        }
                        if (CheckTile(state.Map, i + 1, j - 1))
                        {
                            value++;
                        }

                        BuildableTile tile = new BuildableTile(i, j, value);

                        ListOfUtilityPositions.Add(tile);
                    }
                }
            }
            int maxposition = 0;

            for (int i = 0; i < ListOfUtilityPositions.Count - 1; i++)
            {
                if (ListOfUtilityPositions[i].Value > ListOfUtilityPositions[maxposition].Value)
                {
                    maxposition = i;
                }
            }
            supportBuildings.Add(ListOfUtilityPositions[maxposition]);
            if (antalUtilities - 1 == 0)
            {
                return(supportBuildings);
            }
            ListOfUtilityPositions.Clear();
            return(BestUtilityPositions(antalUtilities - 1, supportBuildings));
        }
Exemple #24
0
 public void StartBuildMode(BuildableTile buildTile)
 {
     tileToBuild = buildTile;
     curRotAmt   = 0;
     SetCurBuildRotation(curRotAmt);
 }