public void OnClick() { if (BuildingManager.ActiveBuilding.State == BuildingState.MOVING) { // Moving if (BuildingModeGrid.GetInstance().CanObjectBePlacedAtPosition(BuildingManager.ActiveBuilding, BuildingManager.ActiveBuilding.MovePosition)) { if (BuildingManager.GetInstance().MoveBuilding()) { UIGamePanel.ShowPanel(PanelType.DEFAULT); } } } else { // Placing if (BuildingModeGrid.GetInstance().CanObjectBePlacedAtPosition(BuildingManager.ActiveBuilding, BuildingManager.ActiveBuilding.Position)) { if (BuildingManager.GetInstance().PlaceBuilding()) { UIGamePanel.ShowPanel(PanelType.DEFAULT); } } } }
/** * Clear an obstacle. * * Returns true if successful. */ virtual public bool ClearObstacle(Building building) { if (buildings.ContainsKey(building.uid)) { buildings.Remove(building.uid); } switch (building.Type.generationType) { // TODO Special cases case RewardType.RESOURCE: ResourceManager.Instance.AddResources(building.Type.generationAmount); break; case RewardType.GOLD: ResourceManager.Instance.AddGold(building.Type.generationAmount); break; } BuildingModeGrid.GetInstance().RemoveObject(building); if (ActiveBuilding == building) { ActiveBuilding = null; } Destroy(building.gameObject); if ((int)saveMode < (int)SaveMode.SAVE_NEVER) { PersistenceManager.GetInstance().Save(); } return(true); }
/** * Create an Obstacle in the scene (generally used on first load). */ virtual protected void CreateObstacle(string buildingTypeId, GridPosition pos) { if (!types.ContainsKey(buildingTypeId)) { Debug.LogWarning("Tried to create an obstacle with an invalid ID"); return; } BuildingTypeData type = types[buildingTypeId]; if (!type.isObstacle) { Debug.LogError("Tried to create an obstacle with non-obstacle building data"); return; } GameObject go = (GameObject)Instantiate(buildingPrefab); go.transform.parent = gameView.transform; Building obstacle = go.GetComponent <Building>(); obstacle.Init(type, pos); BuildingModeGrid.GetInstance().AddObjectAtPosition(obstacle, pos); buildings.Add(obstacle.uid, obstacle); obstacle.Acknowledge(); if ((int)saveMode < (int)SaveMode.SAVE_MOSTLY) { PersistenceManager.GetInstance().Save(); } }
/** * Build a building. */ virtual public void CreateBuilding(string buildingTypeId) { if (CanBuildBuilding(buildingTypeId) && ResourceManager.Instance.CanBuild(GetBuildingTypeData(buildingTypeId))) { GameObject go = (GameObject)Instantiate(buildingPrefab); go.transform.parent = gameView.transform; Building building = go.GetComponent <Building>(); Vector3 point = gameCamera.ScreenToWorldPoint(new Vector2(Screen.width / 2.0f, Screen.height / 2.0f)) + (go.transform.parent.localPosition * -1); building.Init(types[buildingTypeId], BuildingModeGrid.GetInstance().WorldPositionToGridPosition(point)); ActiveBuilding = building; ResourceManager.Instance.RemoveResources(ActiveBuilding.Type.cost); if ((int)saveMode < (int)SaveMode.SAVE_MOSTLY) { PersistenceManager.GetInstance().Save(); } } else { if (CanBuildBuilding(buildingTypeId)) { // TODO Show info message if not enough resource } else { Debug.LogError("Tried to build unbuildable building"); } } }
/** * If there is already a grid destroy self, else initialise and assign to the static reference. */ void Awake(){ if (instance == null) { if (!initialised) Init(); instance = (BuildingModeGrid) this; } else if (instance != this) { Destroy(gameObject); } }
virtual protected void SetColor(GridPosition pos) { if (BuildingModeGrid.GetInstance().CanObjectBePlacedAtPosition(building, pos)) { buildingSprite.color = UIColor.PLACING_COLOR; } else { buildingSprite.color = UIColor.PLACING_COLOR_BLOCKED; } }
/** * Move active building on the grid. * * Returns true if successful. */ virtual public bool MoveBuilding() { BuildingModeGrid.GetInstance().RemoveObject(ActiveBuilding); ActiveBuilding.Position = ActiveBuilding.MovePosition; BuildingModeGrid.GetInstance().AddObjectAtPosition(ActiveBuilding, ActiveBuilding.Position); ActiveBuilding.FinishMoving(); if ((int)saveMode < (int)SaveMode.SAVE_NEVER) { PersistenceManager.GetInstance().Save(); } return(true); }
/** * If there is already a grid destroy self, else initialise and assign to the static reference. */ void Awake() { if (instance == null) { if (!initialised) { Init(); } instance = (BuildingModeGrid)this; } else if (instance != this) { Destroy(gameObject); } }
/** * Place active building on the grid. * * Returns true if successful. */ virtual public bool PlaceBuilding() { if (CanBuildBuilding(ActiveBuilding)) { ActiveBuilding.Place(); buildingsInProgress.Add(ActiveBuilding); BuildingModeGrid.GetInstance().AddObjectAtPosition(ActiveBuilding, ActiveBuilding.Position); ActiveBuilding = null; if ((int)saveMode < (int)SaveMode.SAVE_NEVER) { PersistenceManager.GetInstance().Save(); } return(true); } return(false); }
/** * Set color after drag. */ protected void SetColor(GridPosition pos) { if (BuildingModeGrid.GetInstance().CanObjectBePlacedAtPosition(building, pos)) { foreach (GameObject go in components) { go.renderer.material.color = new Color(0.25f, 1, 0.25f, 1); } } else { foreach (GameObject go in components) { go.renderer.material.color = new Color(1, 0.25f, 0.25f, 1); } } }
/** * Create a building during loading process */ virtual public void CreateAndLoadBuilding(BuildingData data) { GameObject go = (GameObject)Instantiate(buildingPrefab); go.transform.parent = gameView.transform; Building building = go.GetComponent <Building>(); building.Init(GetBuildingTypeData(data.buildingTypeString), data); if (building.State != BuildingState.BUILT) { buildingsInProgress.Add(building); } else { buildings.Add(building.uid, building); } BuildingModeGrid.GetInstance().AddObjectAtPosition(building, data.position); }
/** * Sells building for gold. * * Returns true if successful. */ virtual public bool SellBuildingForGold(Building building) { if (buildings.ContainsKey(building.uid)) { buildings.Remove(building.uid); } ResourceManager.Instance.AddGold((int)Mathf.Max(1.0f, (int)(building.Type.cost * GOLD_SELL_PERCENTAGE))); BuildingModeGrid.GetInstance().RemoveObject(building); if (ActiveBuilding == building) { ActiveBuilding = null; } Destroy(building.gameObject); if ((int)saveMode < (int)SaveMode.SAVE_NEVER) { PersistenceManager.GetInstance().Save(); } return(true); }
/** * Sell building. * * Returns true if successful. */ virtual public bool SellBuilding(Building building, bool fullRefund = false) { if (buildings.ContainsKey(building.uid)) { buildings.Remove(building.uid); } ResourceManager.Instance.AddResources(fullRefund ? building.Type.cost : (int)(building.Type.cost * RECLAIM_PERCENTAGE)); if (building.State != BuildingState.PLACING && building.State != BuildingState.PLACING_INVALID) { BuildingModeGrid.GetInstance().RemoveObject(building); } if (ActiveBuilding == building) { ActiveBuilding = null; } Destroy(building.gameObject); if ((int)saveMode < (int)SaveMode.SAVE_NEVER) { PersistenceManager.GetInstance().Save(); } return(true); }
/** * Build a building. override this as we want to determine building position differently. */ override public void CreateBuilding(string buildingTypeId) { if (CanBuildBuilding(buildingTypeId) && ResourceManager.Instance.CanBuild(GetBuildingTypeData(buildingTypeId))) { GameObject go = (GameObject)Instantiate(buildingPrefab); go.transform.parent = gameView.transform; Building building = go.GetComponent <Building>(); Ray ray = gameCamera.ScreenPointToRay(new Vector2(Screen.width / 2.0f, Screen.height / 2.0f)); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1 << TERRAIN_LAYER)) { building.Init(types[buildingTypeId], BuildingModeGrid.GetInstance().WorldPositionToGridPosition(hit.point)); ActiveBuilding = building; ResourceManager.Instance.RemoveResources(ActiveBuilding.Type.cost); if ((int)saveMode < (int)SaveMode.SAVE_MOSTLY) { PersistenceManager.GetInstance().Save(); } } else { Debug.LogWarning("Couldn't find terrain, not able to place building."); } } else { if (CanBuildBuilding(buildingTypeId)) { Debug.LogWarning("This is where you bring up your in app purchase screen"); } else { Debug.LogError("Tried to build unbuildable building"); } } }