예제 #1
0
    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));
    }
예제 #2
0
 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();
                 }
             }
         }
     }
 }
예제 #3
0
 public void SetBuildMode(BuildingGameObject prototype)
 {
     CameraControl.MainCamera.Free();
     ResetMode();
     PlacingBuilding = prototype;
     GridComponent.grid.HighLightForBuilding();
     Builder.builder.SetEnabledResetButton(true);
     CurrentMode = ControlMode.Build;
 }
예제 #4
0
        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);
        }
예제 #5
0
 public OnBuildingClick(BuildingGameObject _building)
 {
     building = _building;
 }