Exemplo n.º 1
0
        public void Init(
            BuildingItem data, BuildingDataSo so)
        {
            buildingSo = so;
            item       = data;

            ResetBuilding();
            SyncPosition();
        }
Exemplo n.º 2
0
        public static BuildingComp PlaceBuilding(
            BuildingDataSo so, BuildingItem data, Transform parent = null)
        {
            var o = new GameObject(so.name);

            o.transform.parent = parent;
            var comp = o.AddComponent <BuildingComp>();

            comp.Init(data, so);
            return(comp);
        }
Exemplo n.º 3
0
        public void FinishBuild()
        {
            BuildingItem data = new BuildingItem
            {
                pos      = placeBuildingGridPos,
                typeId   = placeBuildingSo.typeId,
                rotation = 0,
                mapType  = GridSystem.CurrentMapType,
                stage    = BuildingStage.placingStage
            };

            MapBuildingManagerSystem.AddBuilding(data, GridSystem.CurrentMapType);
            //finally stop everything
            StopBuildSetup();
        }
Exemplo n.º 4
0
        //public GameObject buildingShadowPrefab;
        //TESTING


        /*
         * public GridBuildingItem gridBuildingItem { get {
         *      return buildingComp.item;
         * } }
         */

        public void StartBuildSetup(BuildingDataSo buildingSo)
        {
            //Move to action button menu
            menuManager.SetActivePanel(buildActionButtonMenuId);

            //create our objects
            _overlayContainer = new GameObject("Building Overlay Container");

            GameObject go;
            float2     cellSize = GridSystem.GETCellSize();

            _overlayCells = new SpriteRenderer[buildingSo.size.x * buildingSo.size.y];
            for (int x = 0; x < buildingSo.size.x; x++)
            {
                for (int y = 0; y < buildingSo.size.y; y++)
                {
                    int index = x + (y * buildingSo.size.x);
                    _overlayCells[index] = Instantiate(overlayPrefab, _overlayContainer.transform)
                                           .GetComponent <SpriteRenderer>();
                    _overlayCells[index].transform.position = new float3(
                        x * cellSize.x,
                        y * cellSize.y, 0);
                }
            }


            placeBuilding = true;

            placeBuildingSo = buildingSo;

            //we go thourgh this process to snap to grid
            _placeBuildingPos        = GETMiddleScreenPosition();
            placeBuildingGridPos     = GridSystem.GETGridPosition(_placeBuildingPos);
            _placeBuildingPos        = GridSystem.GETWorldPosition(placeBuildingGridPos, 0, MapType.current);
            _placeBuildingInitialPos = _placeBuildingPos;

            _placeBuildingPos.z = zLevel;
            _overlayContainer.transform.position = _placeBuildingPos;


            /// get the middle closes cell pos.....
            placeBuildingGridPos = GridSystem.GETGridPosition(_placeBuildingPos);


            //BUILD ITEM
            BuildingItem data = new BuildingItem
            {
                pos      = placeBuildingGridPos,
                typeId   = buildingSo.typeId,
                rotation = 0,
                mapType  = MapType.current,
                stage    = BuildingStage.placingStage
            };

            buildingComp = BuildingComp.PlaceBuilding(buildingSo, data, _overlayContainer.transform);
            buildingComp.transform.localPosition = Vector3.zero; //buildingSO.placementOffset;

            /*
             * buildingPrefab = new GameObject(buildingSO.buildingName);
             * buildingPrefab.transform.position = placeBuildingPos; // middle closest cell
             * buildingComp = buildingPrefab.AddComponent<BuildingComp>();
             * buildingComp.buildingSO = buildingSO;
             *
             * buildingComp.Init(data,buildingSO);
             */
            //buildingShadowPrefab = Instantiate(buildingSO.clearPrefab);
            //buildingShadowPrefab.transform.position = placeBuildingPos;

            Debug.Log($"Started building process::: {_placeBuildingPos}");
            DrawBuildingOverlay();

            //buildingGridSize = buildingSize;
        }
Exemplo n.º 5
0
        //return success or failure
        public static bool AddBuilding(BuildingItem item, MapType mapType)
        {
            int index = GridSystem.GETIndex(item.pos, mapType);

            BuildingDataStruct data = BuildingReferences[item.typeId];
            var indexes             = new NativeArray <int>(data.Size.x * data.Size.y, Allocator.Temp);

            if (mapType == MapType.main)
            {
                //first check if we really can build in these spots
                for (int x = 0; x < data.Size.x; x++)
                {
                    for (int y = 0; y < data.Size.y; y++)
                    {
                        index = GridSystem.GETIndex(new int2(item.pos.x + x, item.pos.y + y));
                        if (!GridSystem.MainMapCells[index].canBuild)
                        {
                            indexes.Dispose();
                            return(false);
                        }

                        indexes[x + (y * data.Size.x)] = index;
                    }
                }

                //we are here, so no duplicates
                for (int i = 0; i < indexes.Length; i++)
                {
                    MapPlantManagerSystem.RemovePlantItem(indexes[i], mapType);
                    MainMapBuildings[indexes[i]] = item;
                    GridSystem.UpdateCell(indexes[i], mapType);
                }
            }
            else if (mapType == MapType.secondary)
            {
                //first check if we really can build in these spots
                for (int x = 0; x < data.Size.x; x++)
                {
                    for (int y = 0; y < data.Size.y; y++)
                    {
                        index = GridSystem.GETIndex(new int2(item.pos.x + x, item.pos.y + y));
                        if (!GridSystem.SecondaryMapCells[index].canBuild)
                        {
                            indexes.Dispose();
                            return(false);
                        }

                        indexes[x + (y * data.Size.x)] = index;
                    }
                }

                //we are here, so no duplicates
                for (int i = 0; i < indexes.Length; i++)
                {
                    SecondaryMapBuildings[indexes[i]] = item;
                    GridSystem.UpdateCell(item.pos, mapType);
                }
            }

            BuildingManager.Instance.AddBuilding(item, mapType);
            indexes.Dispose();
            return(true);
        }