public static Building CreateBuilding(BuildingGameObject bg, BuildingTypes type) { string jsonString = Resources.Load <TextAsset>("JSON/Buildings/" + type).text; JSONNode jsonBuilding = JSON.Parse(jsonString); int income = jsonBuilding["income"].AsInt; float capturePoints = jsonBuilding["capturePoints"].AsFloat; bool canProduce = jsonBuilding["canProduce"].AsBool; float damageToCapturingUnit = jsonBuilding["damageToCapturingUnit"].AsFloat; float capturepointsDecreaseBy = jsonBuilding["capturepointsDecreaseBy"].AsFloat; int fowLos = jsonBuilding["fowLos"].AsInt; int attackRange = jsonBuilding["attackRange"].AsInt; float damage = jsonBuilding["damage"].AsFloat; JSONArray a = jsonBuilding["unitModifiers"].AsArray; var modifiers = new Dictionary <UnitTypes, float>(); foreach (UnitTypes suit in (UnitTypes[])Enum.GetValues(typeof(UnitTypes))) { foreach (JSONNode item in a) { if (item[suit.ToString()] != null && item[suit.ToString()] != "") { modifiers.Add(suit, item[suit.ToString()].AsFloat); } } } return(new Building(bg, income, capturePoints, canProduce, damageToCapturingUnit, capturepointsDecreaseBy, fowLos, attackRange, damage, modifiers)); }
private void Update() { if (CanClick && Input.GetMouseButtonDown(0) && ParentProduction.IsProductionOverlayActive && !ParentProduction.BuildingClickedProduction.Tile.HasUnit()) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit touchBox; if (Physics.Raycast(ray, out touchBox)) { if (touchBox.collider == this.collider) { BuildingGameObject buildingToProduceFrom = ParentProduction.BuildingClickedProduction; // Kind of ugly yet could not find better solution. The unit is created before we check if it can be bought. // Set it inactive immediatly and then check for enough Gold. If not then destroy else decrease the Gold and set it active. UnitGameObject unit = CreatorFactoryUnit.CreateUnit(buildingToProduceFrom.Tile, buildingToProduceFrom.index, type); unit.gameObject.SetActive(false); if (lm.CurrentLevel.CurrentPlayer.CanBuy(unit.UnitGame.Cost)) { unit.gameObject.SetActive(true); lm.CurrentLevel.CurrentPlayer.DecreaseGoldBy(unit.UnitGame.Cost); CanClick = false; ParentProduction.InitiateMoving(true); } else { Notificator.Notify("Not enough gold!", 1.5f); unit.DestroyUnit(); } } } } }
public void SetBuildMode(BuildingGameObject prototype) { CameraControl.MainCamera.Free(); ResetMode(); PlacingBuilding = prototype; GridComponent.grid.HighLightForBuilding(); Builder.builder.SetEnabledResetButton(true); CurrentMode = ControlMode.Build; }
private static BuildingGameObject ConfigBuildingAndTile(Tile tile, GameObject obj) { BuildingGameObject building = ((GameObject)GameObject.Instantiate(obj)).GetComponent <BuildingGameObject>(); tile.buildingGameObject = building; building.transform.position = tile.transform.position; building.transform.parent = tile.transform; building.Tile = tile; return(building); }
public OnBuildingClick(BuildingGameObject _building) { building = _building; }