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; }
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); }
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); }
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>(); }
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; }
public BuildableTile GetBuildableTile() { BuildableTile bT = buildingTile; switch (buildingType) { case BuildingTypes.CollectResource: bT = collectResourceTile; break; case BuildingTypes.Crop: bT = cropTile; break; } return(bT); }
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; } }
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); } } } }
public void DestroyedTile(BuildableTile bTile) { builtTiles.Remove(bTile); }
public void SetBuildingSelector(BuildableTile bTile) { bsUI.ShowSelectorPanel(bTile); }
public void ClickedLeafNode(BuildableTile buildTile) { mm.StartBuildModeForTile(buildTile); }
public void StartBuildMode(GameObject newBuildTile) { curBuildTileObj = newBuildTile; curBuildTile = newBuildTile.GetComponent <BuildableTile>(); }
void Start() { GetComponent <MeshRenderer>().enabled = false; parent = transform.parent.GetComponent <BuildableTile>(); tableTile = transform.parent.GetComponent <TableTile>(); }
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 }
public BuildableTile(Vector2 mapLoc, Vector3 worldLoc, char type, GameObject tileObj, BuildableTile tileToCopy) : base(mapLoc, worldLoc, type, tileObj) { childrenTiles = new List <BuildableTileChild>(); CopyTile(tileToCopy); }
public void AssignToTile(BuildableTile newTile) { workTile = newTile; curJob = newTile.GetRequiredJobType(); }
public void BuiltTile(BuildableTile bTile) { builtTiles.Add(bTile); }
public void AddBuilding(BuildableTile bTile) { builtTiles.Add(bTile); }
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)); }
public void StartBuildMode(BuildableTile buildTile) { tileToBuild = buildTile; curRotAmt = 0; SetCurBuildRotation(curRotAmt); }