public static BlockBuildingSite InstantiateNew(Vector3Int position, Block blockToBuild, Type itemRequired)
    {
        GameObject prefabObj = PrefabLoader.GetPrefab <GameObject>(prefabName);
        GameObject obj       = Instantiate(prefabObj) as GameObject;

        if (!obj)
        {
            throw new System.Exception("Could not instantiate prefab " + prefabName);
        }
        GridActor actor = obj.GetComponent <GridActor>();

        if (!actor)
        {
            throw new System.Exception("No GridActor on prefab " + prefabName);
        }
        actor.Move(position);
        BlockBuildingSite bbs = obj.GetComponent <BlockBuildingSite>();

        if (!bbs)
        {
            throw new System.Exception("No BlockBuildingSite on prefab " + prefabName);
        }
        bbs.data.targetBlock  = blockToBuild;
        bbs.data.itemRequired = itemRequired;
        return(bbs);
    }
    public void CostPanel_Build()
    {
        switch (costPanelMode)
        {
        case CostPanelMode.SurfaceMaterialChanging:
            ResourceType rt = ResourceType.GetResourceTypeById(costPanel_selectedButton.y);
            if (colony.storage.CheckBuildPossibilityAndCollectIfPossible(new ResourceContainer[] { new ResourceContainer(rt, PlaneExtension.INNER_RESOLUTION * PlaneExtension.INNER_RESOLUTION) }))
            {
                observingSurface.ChangeMaterial(rt.ID, true);
                costPanel.transform.GetChild(0).GetChild(costPanel_selectedButton.x).GetComponent <Image>().overrideSprite = null;
            }
            else
            {
                GameLogUI.NotEnoughResourcesAnnounce();
            }
            break;

        case CostPanelMode.ColumnBuilding:
        {
            if (colony.storage.CheckBuildPossibilityAndCollectIfPossible(ResourcesCost.GetCost(Structure.COLUMN_ID)))
            {
                // float supportPoints = observingSurface.myChunk.CalculateSupportPoints(observingSurface.pos.x, observingSurface.pos.y, observingSurface.pos.z);
                // if (supportPoints <= 1)
                // {
                Structure s = Structure.GetStructureByID(Structure.COLUMN_ID);
                s.SetBasement(observingSurface, new PixelPosByte(7, 7));
                PoolMaster.current.BuildSplash(s.transform.position);
                SetCostPanelMode(CostPanelMode.Disabled);

                Plane p;
                if ((s as IPlanable).TryGetPlane(observingSurface.faceIndex, out p) && !p.isTerminate)
                {
                    UIController.current.Select(p);
                }
                else
                {
                    ReturnButton();
                }
                // }
                //   else
                //  {
                //    observingSurface.myChunk.ReplaceBlock(observingSurface.pos, BlockType.Cave, observingSurface.material_id, ResourceType.CONCRETE_ID, false);
                // }
            }
            else
            {
                GameLogUI.NotEnoughResourcesAnnounce();
            }
        }
        break;

        case CostPanelMode.BlockBuilding:
            BlockBuildingSite bbs = new BlockBuildingSite(observingSurface, ResourceType.GetResourceTypeById(costPanel_selectedButton.y));
            SetCostPanelMode(CostPanelMode.Disabled);
            UIController.current.ShowWorksite(bbs);
            break;
        }
    }
Beispiel #3
0
    public void Load(ColonyControllerSerializer ccs)
    {
        if (storage == null)
        {
            storage = gameObject.AddComponent <Storage>();
        }
        storage.Load(ccs.storageSerializer);
        gears_coefficient             = ccs.gears_coefficient;
        labourEfficientcy_coefficient = ccs.labourEfficientcy_coefficient;
        happiness_coefficient         = ccs.happiness_coefficient;
        health_coefficient            = ccs.health_coefficient;
        birthrateCoefficient          = ccs.birthrateCoefficient;

        energyStored        = ccs.energyStored;
        energyCrystalsCount = ccs.energyCrystalsCount;
        if (ccs.worksites.Count > 0)
        {
            foreach (WorksiteSerializer ws in ccs.worksites)
            {
                Worksite w = null;
                switch (ws.type)
                {
                case WorksiteType.BlockBuildingSite:
                    w = new BlockBuildingSite();
                    break;

                case WorksiteType.CleanSite:
                    w = new CleanSite();
                    break;

                case WorksiteType.DigSite:
                    w = new DigSite();
                    break;

                case WorksiteType.GatherSite:
                    w = new GatherSite();
                    break;

                case WorksiteType.TunnelBuildingSite:
                    w = new TunnelBuildingSite();
                    break;
                }
                w.Load(ws);
            }
        }
        freeWorkers          = ccs.freeWorkers;
        citizenCount         = ccs.citizenCount;
        deathCredit          = ccs.deathCredit;
        peopleSurplus        = ccs.peopleSurplus;
        housingTimer         = ccs.housingTimer;
        starvationTimer      = ccs.starvationTimer;
        starvationTime       = ccs.starvationTime;
        realBirthrate        = ccs.realBirthrate;
        birthrateCoefficient = ccs.birthrateCoefficient;
    }
    public void CostPanel_Build()
    {
        switch (costPanelMode)
        {
        case CostPanelMode.SurfaceMaterialChanging:
            ResourceType rt = ResourceType.GetResourceTypeById(costPanel_selectedButton.y);
            if (GameMaster.colonyController.storage.CheckBuildPossibilityAndCollectIfPossible(new ResourceContainer[] { new ResourceContainer(rt, GameMaster.SURFACE_MATERIAL_REPLACE_COUNT) }))
            {
                observingSurface.ReplaceMaterial(rt.ID);
                costPanel.transform.GetChild(0).GetChild(costPanel_selectedButton.x).GetComponent <Image>().overrideSprite = null;
            }
            else
            {
                UIController.current.MakeAnnouncement(Localization.GetAnnouncementString(GameAnnouncements.NotEnoughResources));
            }
            break;

        case CostPanelMode.ColumnBuilding:
        {
            if (GameMaster.colonyController.storage.CheckBuildPossibilityAndCollectIfPossible(ResourcesCost.GetCost(Structure.COLUMN_ID)))
            {
                // float supportPoints = observingSurface.myChunk.CalculateSupportPoints(observingSurface.pos.x, observingSurface.pos.y, observingSurface.pos.z);
                // if (supportPoints <= 1)
                // {
                Structure s = Structure.GetStructureByID(Structure.COLUMN_ID);
                s.SetBasement(observingSurface, new PixelPosByte(7, 7));
                PoolMaster.current.BuildSplash(observingSurface.transform.position);
                SetCostPanelMode(CostPanelMode.Disabled);
                // }
                //   else
                //  {
                //    observingSurface.myChunk.ReplaceBlock(observingSurface.pos, BlockType.Cave, observingSurface.material_id, ResourceType.CONCRETE_ID, false);
                // }
            }
            else
            {
                UIController.current.MakeAnnouncement(Localization.GetAnnouncementString(GameAnnouncements.NotEnoughResources));
            }
        }
        break;

        case CostPanelMode.BlockBuilding:
            BlockBuildingSite bbs = observingSurface.gameObject.AddComponent <BlockBuildingSite>();
            bbs.Set(observingSurface, ResourceType.GetResourceTypeById(costPanel_selectedButton.y));
            SetCostPanelMode(CostPanelMode.Disabled);
            UIController.current.ShowWorksite(bbs);
            break;
        }
    }
Beispiel #5
0
    public static void StaticLoad(System.IO.Stream fs, int count)
    {
        if (count < 0 | count > 1000)
        {
            Debug.Log("worksites loading error - incorrect count");
            GameMaster.LoadingFail();
            return;
        }
        if (count > 0)
        {
            Worksite w     = null;
            Chunk    chunk = GameMaster.realMaster.mainChunk;
            for (int i = 0; i < count; i++)
            {
                switch ((WorksiteType)fs.ReadByte())
                {
                case WorksiteType.CleanSite:
                {
                    w = CleanSite.Load(fs, chunk);
                    break;
                }

                case WorksiteType.DigSite:
                {
                    w = DigSite.Load(fs, chunk);
                    break;
                }

                case WorksiteType.BlockBuildingSite:
                {
                    w = BlockBuildingSite.Load(fs, chunk);
                    break;
                }

                case WorksiteType.GatherSite:
                {
                    w = GatherSite.Load(fs, chunk);
                    break;
                }

                default: w = null; break;
                }
            }
        }
    }
    public static BlockBuildingSite Load(System.IO.Stream fs, Chunk chunk)
    {
        var data = new byte[8];

        fs.Read(data, 0, data.Length);
        Plane plane = null;

        if (chunk.GetBlock(data[0], data[1], data[2])?.TryGetPlane(data[3], out plane) == true)
        {
            int x  = System.BitConverter.ToInt32(data, 4);
            var cs = new BlockBuildingSite(plane, ResourceType.GetResourceTypeById(x));
            cs.LoadWorksiteData(fs);
            return(cs);
        }
        else
        {
            Debug.Log("block building site load error");
            return(null);
        }
    }
Beispiel #7
0
    public static void StaticLoad(WorksiteSerializer[] wdata)
    {
        worksitesList = new List <Worksite>(wdata.Length);
        Worksite w = null;

        for (int i = 0; i < worksitesList.Count; i++)
        {
            switch (wdata[i].type)
            {
            default: w = null;; break;

            case WorksiteType.BlockBuildingSite:
                w = new BlockBuildingSite();
                break;

            case WorksiteType.CleanSite:
                w = new CleanSite();
                break;

            case WorksiteType.DigSite:
                w = new DigSite();
                break;

            case WorksiteType.GatherSite:
                w = new GatherSite();
                break;

            case WorksiteType.TunnelBuildingSite:
                w = new TunnelBuildingSite();
                break;
            }
            if (w != null)
            {
                w.Load(wdata[i]);
                worksitesList[i] = w;
            }
        }
    }