Esempio n. 1
0
    void ApplayObstacleLightUpdate()
    {
        if (ScreenUpdateManager.GetChangeObstacleLight())
        {
            var addSize = obstacleLight.layerData.SizeAdd;
            for (int i = 0; i < countTileX + 2 * addSize - 1; i++)
            {
                for (int j = 0; j < countTileY + 2 * addSize - 1; j++)
                {
                    if (!ScreenUpdateManager.IsUpdateOffsetObstacleLight(i, j))
                    {
                        continue;
                    }

                    var x = p1.x + i * tileSize - (tileSize * addSize);
                    var y = p1.y + j * tileSize - (tileSize * addSize);

                    var tileStructure  = tileDataProvider.GetTileStructure(x, y);
                    var frameStructure = tileDataProvider.GetFrameStructure(x, y, tileStructure, obstacleLight.layerData);
                    obstacleLight.ChangeTile(j, i, frameStructure.TileCollection, frameStructure.FrameX, frameStructure.FrameY, frameStructure.DeltaHeight);
                    ScreenUpdateManager.EndDrawObstacleLightTile(i, j);
                }
            }

            obstacleLight.RenderMesh();
            ScreenUpdateManager.SetChangeObstacleLight(false);
        }
    }
Esempio n. 2
0
    public bool AddItem(short id, Vector2 worldPos, bool useNeighbors = true)
    {
        var offset = tileDataProvider.WorldPosToOffsetTile(worldPos);
        var rez    = AddItem(id, offset.x, offset.y, useNeighbors);

        //ebug.LogError(rez);
        ScreenUpdateManager.RedrawFullScreenLight();
        return(rez);
    }
Esempio n. 3
0
    public void OnInject()
    {
        tileDataProvider = TileDataProvider;
        //this.Inject();
        UpdateScreenTiles();

        Container.Inject(tileDataProvider);

        tileDataProvider.Init(this, tileSize);

        tixtuteGO = new GameObject("tixtuteGO");

        foreach (var layer in LayerData.Layers)
        {
            GameObject layerGO = new GameObject(layer.Name);
            layerGO.transform.SetParent(tixtuteGO.transform, false);
            //   layerGO.transform.localPosition = new Vector3(0, 0, /*-layer.Depth*/0);
            layerGO.layer = LayerMask.NameToLayer(layer.LayerName);
            IInfinityTileMap layerMesh = (IInfinityTileMap)Activator.CreateInstance(layer.RenderType);

            Container.Inject(layerMesh);

            if (layer == LayerData.ObstacleLightLayer)
            {
                obstacleLight = layerMesh;
            }
            else
            if (layer == LayerData.LightLayer)
            {
                lightLayer = layerMesh;
            }
            else
            {
            }

            if (layer != LayerData.ObstacleLightLayer)
            {
                layerMeshs.Add(layerMesh);
            }
            //

            layerMesh.LoadMesh(layerGO, (int)(countTileX) + 2 * layer.SizeAdd, (int)(countTileY) + 2 * layer.SizeAdd, tileSize, layer);
            layerMesh.SetLayer(layer.Depth);
            layerGO.transform.localPosition = new Vector3(-layer.SizeAdd * tileSize, -layer.SizeAdd * tileSize, 0);
        }

        SpriteManager.SetTileMap(layerMeshs[0]);

        var centerPos = MapGenerator.CenterPos;

        camera.transform.position = new Vector3(centerPos.x * tileSize, centerPos.y * tileSize, camera.transform.position.z);

        ScreenUpdateManager.Init((int)(countTileX), (int)(countTileY));

        //  Debug.LogErrorFormat("({0}, {1})",Screen.width, Screen.height);
    }
Esempio n. 4
0
 void ApplayScreenUpdateLight()
 {
     //return;
     if (ScreenUpdateManager.GetChangeLight())
     {
         LightRenderer.CalculateChangeScreen(ScreenUpdateManager.GetLightUptateWorldMin(), ScreenUpdateManager.GetLightUptateWorldMax());
         LightLayerRender();
         ScreenUpdateManager.EndUpdateLight();
     }
 }
Esempio n. 5
0
    void ApplayScreenUpdate()
    {
        if (ScreenUpdateManager.GetApplayChanges())
        {
            for (int i = 0; i < countTileX - 1; i++)
            {
                for (int j = 0; j < countTileY - 1; j++)
                {
                    if (!ScreenUpdateManager.IsUpdateOffset(i, j))
                    {
                        continue;
                    }

                    var x = p1.x + i * tileSize;
                    var y = p1.y + j * tileSize;


                    var tileStructure = tileDataProvider.GetTileStructure(x, y);
                    for (int ii = 0; ii < layerMeshs.Count; ii++)
                    {
                        if (layerMeshs[ii] == lightLayer)
                        {
                            continue;
                        }
                        if (ScreenUpdateManager.IsUpdate(layerMeshs[ii].layerData.Id, i, j))
                        {
                            var frameStructure = tileDataProvider.GetFrameStructure(x, y, tileStructure, layerMeshs[ii].layerData);
                            layerMeshs[ii].ChangeTile(j, i, frameStructure.TileCollection, frameStructure.FrameX, frameStructure.FrameY, frameStructure.DeltaHeight);
                            ScreenUpdateManager.EndDrawScreenTile(layerMeshs[ii].layerData.Id, i, j);
                        }
                    }
                }
            }

            for (int i = 0; i < layerMeshs.Count; i++)
            {
                if (layerMeshs[i] == lightLayer)
                {
                    continue;
                }

                layerMeshs[i].RenderMesh();
            }

            ScreenUpdateManager.SetApplayChanges(false);
        }

        //  ApplayObstacleLightUpdate();
    }
Esempio n. 6
0
    public int RemoveItem(Vector2Int offset)
    {
        // Debug.LogError("RemoveItem");
        var rez = RemoveItem(offset.x, offset.y);

        if (rez != 0)
        {
            var worldPos = tileDataProvider.OffsetTileToWorldPos(offset);
            ItemManager.CreateItem <TorchPoolItem>(worldPos);

            ScreenUpdateManager.RedrawFullScreenLight();
        }

        return(rez);
    }
Esempio n. 7
0
    //вернёт id предмета который удалили или 0
    public int RemoveItem(Vector2 worldPos)
    {
        // Debug.LogError("RemoveItem");
        var offset = GetItemCenter(worldPos);

        if (offset.x < 0 && offset.y < 0)
        {
            return(0);
        }

        var rez = RemoveItem(offset.x, offset.y);

        if (rez != 0)
        {
            ItemManager.CreateItem <TorchPoolItem>(worldPos);
            ScreenUpdateManager.RedrawFullScreenLight();
        }

        return(rez);
    }
Esempio n. 8
0
    //покачто используется только для удаления дерева
    void SetTile(int x, int y, short type)
    {
        var map = mapGenerator.GetMap();

        if (!mapGenerator.GetMap()[x, y].IsTreeTop() && mapGenerator.GetMap()[x, y].IsTree())
        {
            var block = ItemManager.CreateBlock(new Vector2(x * TileSize - 2f * TileSize, y * TileSize - 2f * TileSize),
                                                SpriteData.Tiles_wood.Name);

            block.blockLayer          = 0;
            block.blockType           = SpriteData.Tiles_wood.TypeId;
            block.blockTileCollection = SpriteData.Tiles_wood.Name;

            map[x, y].randomTile = (short)Random.Range(0, 3);
        }

        map[x, y].type = type;

        ScreenUpdateManager.RedrawWorldTile3X(0, x, y);
        ScreenUpdateManager.RedrawWorldTile3X(1, x, y);
        ScreenUpdateManager.RedrawWorldTile3X(2, x, y);
        ScreenUpdateManager.RedrawWorldTile3X(4, x, y);
    }
Esempio n. 9
0
    public void Update()
    {
        //  return;
        time += Time.fixedDeltaTime * dirTime;
        if (time > maxTime)
        {
            // return;
        }
        if (time < 0)
        {
            time    = 0;
            dirTime = 1;
        }
        if (time > maxTime)
        {
            time    = maxTime;
            dirTime = -1;
        }

        // Debug.LogError(time);

        var newTime = (byte)(ColorByte.white.A * (time / maxTime));
        var oldTime = (byte)(ColorByte.white.A * (currTime));

        if (newTime != oldTime)
        {
            //if (currTime != 0.9f){
            currTime = time / maxTime;
            ScreenUpdateManager.RedrawFullScreenLight();
        }
        //Debug.LogError(newTime);

        float val = Mathf.Clamp(currTime, 0, 0.6f);

        camera.backgroundColor = new Color(val, val, val, 1);
        BackgroundManager.SetTime(currTime);
    }
Esempio n. 10
0
    private void SetCount(Vector2Int pos, byte val)
    {
        if (mapGen.IsValidPoint(pos))
        {
            mapGen.GetMap()[pos.x, pos.y].count = val;
            if (ScreenUpdateManager != null)
            {
                ScreenUpdateManager.RedrawWorldTile3X(1, pos.x, pos.y);
            }

            if (SwapItemManager != null && val != 0)
            {
                var id = mapGen.GetMap()[pos.x, pos.y].ItemId;
                if (id != 0 && !ItemData.GetById(id).InWater)
                {
                    SwapItemManager.RemoveItem(pos);
                }
            }

            //   if (mapGen.Map[pos.x, pos.y].count == Settings.WATER_COUNT) {
            //mapGen.Map[pos.x, pos.y].lighted = false;
            //  }
        }
    }
Esempio n. 11
0
    public void ChangeTile(Vector2Int offset, short tileType, byte layer, byte liquidType = 0)
    {
        int offsetX = offset.x;
        int offsetY = offset.y;

        var currentPoint = new Vector2Int(offsetX, offsetY);
        var upPoint      = new Vector2Int(offsetX, offsetY + 1);
        var downPoint    = new Vector2Int(offsetX, offsetY - 1);
        var map          = mapGenerator.GetMap();

        if (mapGenerator.IsValidPoint(currentPoint))
        {
            if (map[currentPoint.x, currentPoint.y].IsTreeTop())
            {
                return;
            }

            liquid.ChackNeighborInactive(currentPoint);
            bool isChangeType  = false;
            bool isCurrentTree = map[currentPoint.x, currentPoint.y].type == (short)TileTypeEnum.Tree ||
                                 map[currentPoint.x, currentPoint.y].type == (short)TileTypeEnum.TreeBody;

            if (mapGenerator.IsValidPoint(upPoint))
            {
                if (!isCurrentTree && (map[upPoint.x, upPoint.y].type == (short)TileTypeEnum.Tree || map[upPoint.x, upPoint.y].type == (short)TileTypeEnum.TreeBody))
                {
                    return;
                }
            }

            //if (offsetX >= 0 && offsetY >= 0 && offsetX <= countTileMapX && offsetY <= countTileMapY) {
            if (!isCurrentTree || liquidType != 0)
            {
                //удаляем заросли (если прямиком в джунгли попали)
                if (Map[currentPoint.x, currentPoint.y].IsDecor())
                {
                    mapGenerator.RemoveLineDown(currentPoint, new List <short>()
                    {
                        (short)TileTypeEnum.Jungle
                    });
                    mapGenerator.RemoveLineUp(currentPoint, new List <short>()
                    {
                        (short)TileTypeEnum.Grass1, (short)TileTypeEnum.Grass2
                    });
                }

                if (liquidType == 0)
                {
                    /*if (tileType != 0 && isCurrentTree) {
                     *  return;
                     * }*/

                    if (map[offsetX, offsetY].type == tileType)
                    {
                        return;
                    }

                    if (map[offsetX, offsetY].type != tileType)
                    {
                        isChangeType = true;
                    }
                    map[offsetX, offsetY].type  = tileType;
                    map[offsetX, offsetY].layer = layer;
                    //map[offsetX, offsetY].count = 0;

                    ScreenUpdateManager.RedrawWorldTile3X(1, offsetX, offsetY);

                    ScreenUpdateManager.RedrawWorldTile3X(0, offsetX, offsetY);
                    ScreenUpdateManager.RedrawWorldTile3X(2, offsetX, offsetY);
                    ScreenUpdateManager.RedrawWorldTile3X(4, offsetX, offsetY);
                }
                else
                {
                    if (map[offsetX, offsetY].IsWater())
                    {
                        map[offsetX, offsetY].count = (byte)Settings.WATER_COUNT;
                        if (ScreenUpdateManager != null)
                        {
                            ScreenUpdateManager.RedrawWorldTile3X(1, offsetX, offsetY);
                        }
                        return;
                    }

                    if (!map[offsetX, offsetY].CanPourWater())
                    {
                        map[offsetX, offsetY].type = 0;
                        isChangeType = true;
                    }

                    if (liquidType == 1)
                    {
                        map[offsetX, offsetY].ChackWater(true);
                        liquid.AddWater(new Vector2Int(offsetX, offsetY));
                    }
                }

                //удаляем заросли (если удалили не заросли а они на нём стояли)
                if (isChangeType)
                {
                    mapGenerator.RemoveLineDown(downPoint, new List <short>()
                    {
                        (short)TileTypeEnum.Jungle
                    });
                    mapGenerator.RemoveLineUp(upPoint, new List <short>()
                    {
                        (short)TileTypeEnum.Grass1, (short)TileTypeEnum.Grass2
                    });
                }
            }
            else

            if (isCurrentTree && tileType == 0)
            {
                if (map[currentPoint.x, currentPoint.y].type != (short)TileTypeEnum.Tree_Top &&
                    map[currentPoint.x, currentPoint.y].type != (short)TileTypeEnum.TreeTopNaked)
                {
                    //изза особенности дерева не оставляем пенёк из одного тайла
                    int LenghtTree = mapGenerator.GetLenghtDown(currentPoint, (short)TileTypeEnum.Tree);
                    if (LenghtTree > 0)
                    {
                        mapGenerator.RemoveContactsUp(currentPoint,
                                                      new List <short>()
                        {
                            (short)TileTypeEnum.Tree, (short)TileTypeEnum.TreeBody, (short)TileTypeEnum.TreeTopNaked, (short)TileTypeEnum.Tree_Top
                        });
                        if (LenghtTree == 2)
                        {
                            mapGenerator.RemoveContactsDown(downPoint,
                                                            new List <short>()
                            {
                                (short)TileTypeEnum.Tree, (short)TileTypeEnum.TreeBody
                            });
                        }
                    }
                }
            }
        }
    }
Esempio n. 12
0
    void Update()
    {
        if (LightUvProvider != null)
        {
            LightUvProvider.LateUpdate();
        }


        if (tileDataProvider == null)
        {
            return;
        }


        if (Input.GetKeyUp(KeyCode.T))
        {
            LightRenderer.Test();
            LightLayerRender(true);
        }

        if (Input.GetKeyUp(KeyCode.G))
        {
            MapGenerator.ChangeMap();
        }

        if (Input.GetKeyUp(KeyCode.Alpha0))
        {
            carrentMarkerType  = 0;
            carrentMarkerLayer = 0;
        }

        if (Input.GetKeyUp(KeyCode.Alpha8))
        {
            carrentMarkerType  = 8;
            carrentMarkerLayer = 3;
        }

        if (Is_Edit_mod)
        {
            if (Input.GetMouseButton(0))
            {
                countClick++;
                var pos = camera.ScreenToWorldPoint(Input.mousePosition);

                tileDataProvider.СircleDamageTile(pos.x + 1.5f * tileSize, pos.y + 1.5f * tileSize, carrentMarkerType,
                                                  carrentMarkerLayer, carrentMarkeLiquidType, 1);
                lastP1 = new Vector3();

                UpdateScreenTiles();
                // Render();
            }

            if (Input.GetMouseButton(1))
            {
                var pos  = camera.ScreenToWorldPoint(Input.mousePosition);
                var tile = tileDataProvider.GetTileStructure(pos.x + 1.5f * tileSize, pos.y + 1.5f * tileSize);
                // pos.x, pos.y);
                carrentMarkerType      = tile.type;
                carrentMarkerLayer     = tile.layer;
                carrentMarkeLiquidType = tile.liquidType;
            }
        }

        if (Input.GetKeyUp(KeyCode.R))
        {
            tileDataProvider.LoadNext();
            lastP1 = new Vector3();

            UpdateScreenTiles();
            // Render();
        }

        //Profiler.BeginSample("1");
        UpdateScreenTiles();
        //Profiler.EndSample();
        //Profiler.BeginSample("2");
        ApplayScreenUpdate();
        //Profiler.EndSample();
        //Profiler.BeginSample("3");
        Render();
        //Profiler.EndSample();
        //Profiler.BeginSample("4");
        if (useLight)
        {
            ApplayScreenUpdateLight();
        }
        //Profiler.EndSample();


        LightRenderer.Update();
        ScreenUpdateManager.RedrawFullScreenLight();
    }
Esempio n. 13
0
    public void Render()
    {
        p1 = camera.ViewportToWorldPoint(new Vector3(0, 0, camera.nearClipPlane));

        int     offsetX = Mathf.CeilToInt(p1.x / tileSize);
        int     offsetY = Mathf.CeilToInt(p1.y / tileSize);
        Vector3 newPos  = new Vector2(offsetX * tileSize - 2 * tileSize, offsetY * tileSize - 2 * tileSize);

        int dist = (int)Vector2.Distance(lastP1, newPos);

        if (dist >= tileSize)
        {
            Vector2 delta  = newPos - lastP1;
            var     deltaX = (int)(Mathf.Sign(delta.x) * Mathf.CeilToInt(Mathf.Abs(delta.x / tileSize)));
            var     deltaY = (int)(Mathf.Sign(delta.y) * Mathf.CeilToInt(Mathf.Abs(delta.y / tileSize)));
            lastP1 = newPos;

            screenStart = new Vector2Int(Mathf.CeilToInt(p1.x / tileSize), Mathf.CeilToInt(p1.y / tileSize));
            screenEnd   = new Vector2Int((int)(screenStart.x + countTileX), (int)(screenStart.y + countTileY));
            ScreenUpdateManager.SetScreenRect(screenStart, screenEnd);
            LightRenderer.SetScreenRect(screenStart, screenEnd);

            var add = obstacleLight.layerData.SizeAdd;

            SwapItemManager.SetSize(screenEnd.x - screenStart.x + 2 * add, screenEnd.y - screenStart.y + 2 * add);
            //SwapItemManager.SetStartPos(new Vector2Int(screenStart.x - add, screenStart.y - add));



            //определяем свапнутую область
            int swapStartX = 0;
            int swapEndX   = Mathf.CeilToInt(countTileX);
            int swapStartY = 0;
            int swapEndY   = Mathf.CeilToInt(countTileY);

            if (deltaX > 0)
            {
                swapStartX = 0;
                swapEndX   = Mathf.CeilToInt(countTileX - deltaX) - 3;
            }
            if (deltaX < 0)
            {
                swapStartX = -(int)deltaX;
                swapEndX   = Mathf.CeilToInt(countTileX);
            }
            if (deltaY > 0)
            {
                swapStartY = 0;
                swapEndY   = Mathf.CeilToInt(countTileY - deltaY) - 3;
            }
            if (deltaY < 0)
            {
                swapStartY = -(int)deltaY;
                swapEndY   = Mathf.CeilToInt(countTileY);
            }

            for (int ii = 0; ii < layerMeshs.Count; ii++)
            {
                layerMeshs[ii].ShiftCells((int)deltaX, (int)deltaY);
            }
            obstacleLight.ShiftCells((int)deltaX, (int)deltaY);


            LightRenderer.Swap((int)deltaX, (int)deltaY);  // -<

            SwapItemManager.SetStartPos(new Vector2Int(screenStart.x - add, screenStart.y - add));
            SwapItemManager.Swap((int)deltaX, (int)deltaY);


            for (int i = 0; i < countTileX - 1; i++)
            {
                for (int j = 0; j < countTileY - 1; j++)
                {
                    bool inSwapRect = i >= swapStartX && i <= swapEndX &&
                                      j >= swapStartY && j <= swapEndY;

                    if (inSwapRect)
                    {
                        continue;
                    }

                    var x = p1.x + i * tileSize;
                    var y = p1.y + j * tileSize;


                    var tileStructure = tileDataProvider.GetTileStructure(x, y);
                    for (int ii = 0; ii < layerMeshs.Count; ii++)
                    {
                        var frameStructure = tileDataProvider.GetFrameStructure(x, y, tileStructure, layerMeshs[ii].layerData);
                        layerMeshs[ii].ChangeTile(j, i, frameStructure.TileCollection, frameStructure.FrameX, frameStructure.FrameY, frameStructure.DeltaHeight);
                    }
                }
            }


            for (int i = 0; i < layerMeshs.Count; i++)
            {
                layerMeshs[i].RenderMesh();
            }

            //   RenderLayerAddSize(obstacleLight, obstacleLight.layerData.SizeAdd, deltaX, deltaY); // -<

            tixtuteGO.transform.position = newPos;
            OnSwap.TryCall();
        }
    }