Exemplo n.º 1
0
 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);	
		}
	}
Exemplo n.º 6
0
 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");
         }
     }
 }