예제 #1
0
        public void Initialize()
        {
            ///TODO: This should grab the ground and doodad layers separately....

            for (int i = 0; i < transform.childCount; i++)
            {
                TileMapLayer tml = transform.GetChild(i).GetComponent <TileMapLayer> ();
                if (tml != null)
                {
                    tml.Initialize();
                }
            }
            //		Debug.Log ("tilemap props: " + tm.CellSize.ToString());
            //		Debug.Log ("tilemap h: " + tm.GridHeight);
            //		Debug.Log ("tilemap w: " + tm.GridWidth);
            //		Debug.Log ("tilemap maxX: " + tm.MaxGridX);
            //		Debug.Log ("tilemap minX: " + tm.MinGridX);
            //		Debug.Log ("tilemap maxY: " + tm.MaxGridY);
            //		Debug.Log ("tilemap minY: " + tm.MinGridY);
            //		Debug.Log ("tilemap w: " + tm.GridWidth);



            //		Debug.LogError ("shits here!");
            MapManager.instance.MapInitialized(this);

            //Debug.Log("==?  " + (newT == MapManager.instance.TileAt(-5, -7)));
            //		Debug.Log ("t null? " + (t == null));
            //		Debug.Log ("to: " + t.prefabData.offset);
            //		Debug.Log ("map bounds: " + bnds.size);
            //		Debug.Log ("map bounds center: " + bnds.center);
            //tm.Erase (new Vector2 (0f, 0f));
        }
예제 #2
0
    private Vector2Int MouseGridPosition(TileMapLayer buildingLayer)
    {
        Vector3 mousePos = GetcameraComp().ScreenToWorldPoint(Input.mousePosition);

        mousePos.z = 0;
        return(gridManager.WorldToGridPosition(mousePos, buildingLayer));
    }
예제 #3
0
 public void CancelEvent(Vector2Int gridPosition, TileMapLayer tilemapLayer)
 {
     if (eventInstance != null)
     {
         eventInstance.Cancel();
     }
 }
예제 #4
0
        public Hero(Player player, TileMapLayer tileMapLayer, Input.Mouse mouse) : base(tileMapLayer)
        {
            _type = UID.Get <Hero>();

            _player = player;
            _mouse  = mouse;

            SetSize(24, 32);
            SetPivot(12, 16);

            // Create Collide Point of Hero
            AddPoint((int)HSpots.UL, new Vector2(-10, -20));
            AddPoint((int)HSpots.UR, new Vector2(+10, -20));

            AddPoint((int)HSpots.DL, new Vector2(-10, +20));
            AddPoint((int)HSpots.DR, new Vector2(+10, +20));

            AddPoint((int)HSpots.LU, new Vector2(-16, -8));
            AddPoint((int)HSpots.LD, new Vector2(-16, +6));

            AddPoint((int)HSpots.RU, new Vector2(+16, -8));
            AddPoint((int)HSpots.RD, new Vector2(+16, +6));


            // Collide Point for Grip
            AddPoint((int)HSpots.EL, new Vector2(-16, -16));
            AddPoint((int)HSpots.ER, new Vector2(+16, -16));

            _sprite = Game1._spriteDragon.Clone();
            _sprite.Start("stand", 1, 0);
        }
예제 #5
0
    public void GatherInteraction(Vector2Int gridPosition, TileMapLayer tilemapLayer)
    {
        if (GetIsGatherable)
        {
            EffectController effectController = new EffectController(PlayerStats._instance.GetStat(StatType.EXP), 0);
            expEffect.duration = currentStage.GetExpReward / expEffect.amount;
            effectController.Begin(expEffect);

            Debug.Log("Tried gathering");
            if (currentStage.GetDestroyOnGather || currentStageIndex == 0)
            {
                Remove(gridPosition, tilemapLayer);
            }
            else
            {
                currentStageIndex--;
                if (!reachedMaxStage)
                {
                    InitEvent(gridPosition, tilemapLayer);
                }
                SetIsBeingGatheredState(false, gridPosition);
            }

            Inventory inventory = Inventory.GetInstance;
            foreach (Drop drop in currentStage.GetDrops)
            {
                if (Random.value <= drop.GetChance)
                {
                    inventory.AddToInventory(0, new ItemSlot(drop.GetItem, Random.Range(drop.GetMinAmount, drop.GetMaxAmount + 1)));
                }
            }
        }
    }
예제 #6
0
        public Enemy0(TileMapLayer tileMapLayer) : base(tileMapLayer)
        {
            _type = UID.Get <Enemy0>();

            SetSize(24, 32);
            SetPivot(12, 16);

            // Create Collide Point of Hero
            AddPoint((int)HSpots.UL, new Vector2(-10, -20));
            AddPoint((int)HSpots.UR, new Vector2(+10, -20));

            AddPoint((int)HSpots.DL, new Vector2(-10, +20));
            AddPoint((int)HSpots.DR, new Vector2(+10, +20));

            AddPoint((int)HSpots.LU, new Vector2(-16, -8));
            AddPoint((int)HSpots.LD, new Vector2(-16, +6));

            AddPoint((int)HSpots.RU, new Vector2(+16, -8));
            AddPoint((int)HSpots.RD, new Vector2(+16, +6));


            // Collide Point for Grip
            AddPoint((int)HSpots.EL, new Vector2(-16, -16));
            AddPoint((int)HSpots.ER, new Vector2(+16, -16));

            _colorA = new Color(Misc.Rng.Next(100, 250), Misc.Rng.Next(50, 250), Misc.Rng.Next(50, 250));
            _colorB = new Color(Misc.Rng.Next(100, 250), Misc.Rng.Next(50, 250), Misc.Rng.Next(50, 250));
        }
예제 #7
0
    public void GatherInteraction(Vector2Int gridPosition, TileMapLayer buildingLayer)
    {
        Tilemap tilemap = GridManager._instance.GetTilemap(buildingLayer);

        tilemap.RemoveTileFlags((Vector3Int)gridPosition, TileFlags.LockColor);
        tilemap.SetColor((Vector3Int)gridPosition, new Color(0.9f, 0.9f, 1f, 0.7f));
    }
예제 #8
0
    public Vector3 GridToWorldPosition(Vector2Int gridPosition, TileMapLayer buildingLayer, bool getCenter)
    {
        Vector3 position = GetTilemap(buildingLayer).CellToWorld((Vector3Int)gridPosition);

        position += Vector3.up * ((buildingLayer == TileMapLayer.Buildings ? BUILDING_LAYER_POSITION_OFFSET : 0f) + (getCenter ? TOP_FACE_HEIGHT / 2 : 0f));
        return(position);
    }
예제 #9
0
 private void InitEvent(Vector2Int gridPosition, TileMapLayer tilemapLayer)
 {
     if (eventInstance != null)
     {
         CancelEvent(gridPosition, tilemapLayer);
     }
     eventInstance = new TileGrowEvent(Time.time + Random.Range(tile.GetMinGrowTime, tile.GetMaxGrowTime), tileSlot, gridPosition, tilemapLayer);
 }
예제 #10
0
        public MapObject(TileMapLayer tileMapLayer)
        {
            _tileMapLayer = tileMapLayer;
            _map2D        = tileMapLayer._map2D;

            _tileW = _map2D._tileW;
            _tileH = _map2D._tileH;
        }
예제 #11
0
 public void Grow(Vector2Int gridPosition, TileMapLayer tileMapLayer)
 {
     currentStageIndex++;
     GridManager._instance.SetTile(tileSlot, gridPosition, tileMapLayer, false);
     if (!reachedMaxStage)
     {
         InitEvent(gridPosition, tileMapLayer);
     }
 }
예제 #12
0
        public MapActor(TileMapLayer tileMapLayer) : base(tileMapLayer)
        {
            _cPoints = new ContactPoint[Enum.GetNames(typeof(HSpots)).Length];

            for (int i = 0; i < _cPoints.Length; ++i)
            {
                _cPoints[i] = new ContactPoint();
            }
        }
예제 #13
0
    // Update is called once per frame
    private void Update()
    {
        viewChanged = false;
        movement    = new Vector2(
            Input.GetKey(KeyCode.D) ? 1 : 0 - (Input.GetKey(KeyCode.A) ? 1 : 0),
            Input.GetKey(KeyCode.W) ? 1 : 0 - (Input.GetKey(KeyCode.S) ? 1 : 0)
            );
        movement *= moveSpeed * Time.deltaTime;
        if (movement != Vector2.zero)
        {
            transform.position += (Vector3)movement;
            viewChanged         = true;
        }

        scrollMovement = Time.deltaTime * scrollSpeed * -Input.GetAxis("Mouse ScrollWheel");
        if (scrollMovement != 0)
        {
            viewChanged = true;
        }

        if (Input.GetKey(KeyCode.Mouse0))
        {
            TileMapLayer layer        = (Input.GetKey(KeyCode.LeftShift)) ? TileMapLayer.Buildings : TileMapLayer.Floor;
            Vector2Int   gridPosition = MouseGridPosition(TileMapLayer.Floor);
            gridManager.SetTile(new TileSlot(clickTile), gridPosition, layer);
        }
        else if (Input.GetKey(KeyCode.Mouse1))
        {
            TileMapLayer layer        = (Input.GetKey(KeyCode.LeftShift)) ? TileMapLayer.Buildings : TileMapLayer.Floor;
            Vector2Int   gridPosition = MouseGridPosition(layer);
            gridManager.SetTile(null, gridPosition, layer);
        }
        else if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            TileMapLayer layer = (Input.GetKey(KeyCode.LeftShift)) ? TileMapLayer.Buildings : TileMapLayer.Floor;
            Debug.Log(gridManager.GetTileFromGrid(MouseGridPosition(layer), layer));
        }
        else if (Input.GetKeyDown(KeyCode.Mouse2))
        {
            Vector3 mousePos = GetcameraComp().ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
            TileMapLayer layer = (Input.GetKey(KeyCode.LeftShift)) ? TileMapLayer.Buildings : TileMapLayer.Floor;
            TileHit      hit   = gridManager.GetHitFromWorldPosition(mousePos, layer);

            if (hit.tile != null &&
                hit.tile.IsGatherable)
            {
                Debug.Log("Color change");
                hit.tile.GatherInteraction(hit.gridPosition, layer);
            }
        }

        if (viewChanged)
        {
            cameraController.UpdateView();
        }
    }
예제 #14
0
 private void Remove(Vector2Int gridPosition, TileMapLayer tilemapLayer)
 {
     CancelEvent(gridPosition, tilemapLayer);
     GridManager._instance.SetTile(null, gridPosition, tilemapLayer, true);
     if (particlesObject != null)
     {
         Object.Destroy(particlesObject);
         particlesObject = null;
     }
 }
예제 #15
0
        public void RenderTexturedBackground(IDrawDevice device, ref TileMapLayer layer, int cacheIndex, float x, float y)
        {
            if (!cachedTexturedBackground.IsAvailable || cachedTexturedBackgroundAnimated)
            {
                RecreateTexturedBackground(ref layer);
            }

            // Fit the input material rect to the output size according to rendering step config
            Vector3 renderPos = new Vector3(device.ViewerPos.X - device.TargetSize.X / 2, device.ViewerPos.Y - device.TargetSize.Y / 2, layer.Depth);

            // Fit the target rect to actual pixel coordinates to avoid unnecessary filtering offsets
            renderPos.X = MathF.Round(renderPos.X);
            renderPos.Y = MathF.Round(renderPos.Y);
            if (MathF.RoundToInt(device.TargetSize.X) != (MathF.RoundToInt(device.TargetSize.X) / 2) * 2)
            {
                renderPos.X += 0.5f;
            }
            if (MathF.RoundToInt(device.TargetSize.Y) != (MathF.RoundToInt(device.TargetSize.Y) / 2) * 2)
            {
                // AMD Bugfix?
                renderPos.Y -= 0.004f;
            }

            // Reserve the required space for vertex data in our locally cached buffer
            int neededVertices = 4;

            if (cachedVertices == null || cachedVertices.Length < neededVertices)
            {
                cachedVertices = new VertexC1P3T2[neededVertices];
            }

            // Render it as world-space fullscreen quad
            cachedVertices[0].Pos = new Vector3(renderPos.X, renderPos.Y, renderPos.Z);
            cachedVertices[1].Pos = new Vector3(renderPos.X + device.TargetSize.X, renderPos.Y, renderPos.Z);
            cachedVertices[2].Pos = new Vector3(renderPos.X + device.TargetSize.X, renderPos.Y + device.TargetSize.Y, renderPos.Z);
            cachedVertices[3].Pos = new Vector3(renderPos.X, renderPos.Y + device.TargetSize.Y, renderPos.Z);

            cachedVertices[0].TexCoord = new Vector2(0f, 0f);
            cachedVertices[1].TexCoord = new Vector2(1f, 0f);
            cachedVertices[2].TexCoord = new Vector2(1f, 1f);
            cachedVertices[3].TexCoord = new Vector2(0f, 1f);

            cachedVertices[0].Color = cachedVertices[1].Color = cachedVertices[2].Color = cachedVertices[3].Color = ColorRgba.White;

            // Setup custom pixel shader
            BatchInfo material = device.RentMaterial();

            material.Technique   = texturedBackgroundShader;
            material.MainTexture = cachedTexturedBackground;
            material.SetValue("horizonColor", layer.BackgroundColor);
            material.SetValue("shift", new Vector2(x, y));
            material.SetValue("parallaxStarsEnabled", layer.ParallaxStarsEnabled ? 1f : 0f);

            device.AddVertices(material, VertexMode.Quads, cachedVertices, 0, 4);
        }
예제 #16
0
 public void Init(Vector2Int gridPosition, TileMapLayer tilemapLayer, bool generation = false)
 {
     if (generation)
     {
         currentStageIndex = StagesCount - 1;
     }
     if (eventInstance == null && tile.GetStages.Length > 1 && !reachedMaxStage)
     {
         InitEvent(gridPosition, tilemapLayer);
     }
 }
예제 #17
0
 public TileSlot GetTileFromGrid(Vector2Int gridPosition, TileMapLayer buildingLayer)
 {
     if (TryGetChunk(GridToChunkCoordinates(gridPosition), out Chunk chunk))
     {
         TileSlot tile = chunk.GetTile(gridPosition, buildingLayer);
         return(tile);
     }
     else
     {
         return(null);
     }
 }
예제 #18
0
        internal void SetTile(TileSlot tile, Vector2Int gridPosition, TileMapLayer buildingLayer, bool countsAsEdit = true, bool generation = false)
        {
            switch (buildingLayer)
            {
            case TileMapLayer.Floor:
                SetTileByRef(tile, gridPosition, buildingLayer, countsAsEdit, ref floorArr, ref _instance.floor, generation);
                break;

            case TileMapLayer.Buildings:
                SetTileByRef(tile, gridPosition, buildingLayer, countsAsEdit, ref buildingsArr, ref _instance.buildings, generation);
                break;
            }
        }
예제 #19
0
    public void SetTile(TileSlot tile, Vector2Int gridPosition, TileMapLayer buildingLayer, bool playerAction = true, Color?color = null)
    {
        Vector2Int chunkPos = GridToChunkCoordinates(gridPosition);

        SetTileColor(gridPosition, buildingLayer, (color != null) ? (Color)color : Color.white);
        if (TryGetChunk(chunkPos, out Chunk chunk))
        {
            chunk.SetTile(tile, gridPosition, buildingLayer, playerAction, false);
        }
        else if (tile != null)
        {
            CreateChunk(chunkPos).SetTile(tile, gridPosition, buildingLayer, playerAction, false);
        }
    }
예제 #20
0
        public TileSlot GetTile(Vector2Int gridPosition, TileMapLayer buildingLayer)
        {
            switch (buildingLayer)
            {
            case TileMapLayer.Floor:
                return(floorArr?[gridPosition.x - chunkStartPos.x, gridPosition.y - chunkStartPos.y]);

            case TileMapLayer.Buildings:
                return(buildingsArr?[gridPosition.x - chunkStartPos.x, gridPosition.y - chunkStartPos.y]);

            default:
                throw new System.NotImplementedException();
            }
        }
예제 #21
0
    public Tilemap GetTilemap(TileMapLayer buildingLayer)
    {
        switch (buildingLayer)
        {
        case TileMapLayer.Floor:
            return(floor);

        case TileMapLayer.Buildings:
            return(buildings);

        default:
            return(null);
        }
    }
예제 #22
0
        private void SetTileByRef(TileSlot tile, Vector2Int gridPosition, TileMapLayer tilemapLayer, bool countsAsEdit, ref TileSlot[,] tileArr, ref Tilemap tilemap, bool generation = false)
        {
            Vector2Int chunkPosition = GridToChunkPosition(gridPosition);
            bool       tileExists    = tileArr != null && tileArr[chunkPosition.x, chunkPosition.y] != null;

            if (tile != null || tileExists)
            {
                if (tileArr == null)
                {
                    tileArr = new TileSlot[CHUNK_SIZE, CHUNK_SIZE];
                }
                if (tileExists && tile == null)
                {
                    tileArr[chunkPosition.x, chunkPosition.y].CancelEvent(gridPosition, tilemapLayer);
                    tilemap.SetTile((Vector3Int)gridPosition, null);
                    tileArr[chunkPosition.x, chunkPosition.y] = null;

                    tileCount--;
                    wasEdited |= countsAsEdit;
                    if (tileCount == 0)
                    {
                        tileArr = null;
                    }
                }
                else if (!tileExists)
                {
                    tileCount++;
                    wasEdited |= countsAsEdit;
                    tile.Init(gridPosition, tilemapLayer, generation);
                    tilemap.SetTile((Vector3Int)gridPosition, tile.GetMainTileBase);
                    tileArr[chunkPosition.x, chunkPosition.y] = tile;
                }
                else
                {
                    if (tile != tileArr[chunkPosition.x, chunkPosition.y])
                    {
                        tileArr[chunkPosition.x, chunkPosition.y].CancelEvent(gridPosition, tilemapLayer);
                        tileArr[chunkPosition.x, chunkPosition.y] = tile;
                        tile.Init(gridPosition, tilemapLayer, generation);
                    }
                    tilemap.SetTile((Vector3Int)gridPosition, tile.GetMainTileBase);
                    wasEdited |= countsAsEdit;
                }
            }
        }
예제 #23
0
        public Level(ContentManager content)
        {
            SetSize(Game1._screenW, Game1._screenH);

            _tmxMap  = new TmxMap("Content/test_slope2D.tmx");
            _tileSet = content.Load <Texture2D>("Image/" + "TileSet_Slope2D");

            //_tileMap2DX = new TileMap2D().Setup(new Rectangle(0, 0, Game1._screenW, Game1._screenH), _tmxMap.Width, _tmxMap.Height, _tmxMap.TileWidth, _tmxMap.TileHeight, 0, 0);
            //_layerX = _tileMap2DX.CreateLayer(null);

            _tileMap2D = new TileMap2D().Setup(new Rectangle(0, 0, Game1._screenW, Game1._screenH), _tmxMap.Width, _tmxMap.Height, _tmxMap.TileWidth, _tmxMap.TileHeight);

            _arenaSizeW = _tmxMap.Width * _tmxMap.TileWidth;
            _arenaSizeH = _tmxMap.Height * _tmxMap.TileHeight;

            _layer0 = TileMap2D.CreateLayer(_tmxMap, _tmxMap.Layers["Tile Layer 1"], _tileSet);

            System.Console.WriteLine("Layer0._map2D = " + _layer0._map2D);


            //System.Console.WriteLine("------> "+_tmxMap.Tilesets[0].Tiles[2].ObjectGroups[0].Objects[0].Points);


            // debug
            //GenerateMap();

            _camera = new Camera();

            _camera.SetView(new RectangleF(0, 0, Game1._screenW, Game1._screenH));
            _camera.SetZone(new RectangleF(0, 0, Game1._screenW / 20, Game1._screenH / 40));

            //_camera.SetLimit(new RectangleF(0, 0, _arenaSizeW, _arenaSizeH));
            _camera.SetLimit(new RectangleF(0, 0, _arenaSizeW, _arenaSizeH));
            _camera.SetPosition(new Vector2(_arenaSizeW / 2 + _layer0._map2D._tileW / 2, _arenaSizeH / 2 + _layer0._map2D._tileH * 2));


            //for (int i = 0; i < 400; ++i)
            //{
            //    new Enemy0(_layer0).SetPosition(Misc.Rng.Next(80, (int)_arenaSizeW - 80), 80).AppendTo(this);
            //}

            _hero = (Hero) new Hero(Game1.Player1, _layer0, _mouseLevel).Init().AppendTo(this).SetPosition(80, 80);
            //_hero2 = (Hero)new Hero(Game1.Player2, _layer0._map2D).Init().AppendTo(this);
        }
예제 #24
0
        protected override void OnCollectStateOverlayDrawcalls(Canvas canvas)
        {
            base.OnCollectStateOverlayDrawcalls(canvas);

            if (CamViewTargetSize.X > LevelRenderSetup.TargetSize.X ||
                CamViewTargetSize.Y > LevelRenderSetup.TargetSize.Y)
            {
                float x1 = (CamViewTargetSize.X - LevelRenderSetup.TargetSize.X) / 2;
                float y1 = (CamViewTargetSize.Y - LevelRenderSetup.TargetSize.Y) / 2;
                float x2 = x1 + LevelRenderSetup.TargetSize.X;
                float y2 = y1 + LevelRenderSetup.TargetSize.Y;

                canvas.State.SetMaterial(DrawTechnique.Alpha);
                canvas.State.ColorTint = new ColorRgba(0.4f, 1f, 0.4f);

                canvas.DrawDashLine(x1, y1, x2, y1, DashPattern.Dash);
                canvas.DrawDashLine(x1, y1, x1, y2, DashPattern.Dash);
                canvas.DrawDashLine(x2, y1, x2, y2, DashPattern.Dash);
                canvas.DrawDashLine(x1, y2, x2, y2, DashPattern.Dash);
            }

            VertexC1P3T2[] vertices = null;
            {
                int vertexCount = FontRasterizer.Native9.EmitTextVertices("Pre-alpha version", ref vertices, 10, 10, ColorRgba.White);
                canvas.DrawDevice.AddVertices(FontRasterizer.Native9.Material, VertexMode.Quads, vertices, 0, vertexCount);
            }

            {
                int vertexCount = FontRasterizer.Native9.EmitTextVertices("Tile: " + activeTilePos.X + "; " + activeTilePos.Y, ref vertices, 10, 28, ColorRgba.White);
                canvas.DrawDevice.AddVertices(FontRasterizer.Native9.Material, VertexMode.Quads, vertices, 0, vertexCount);
            }

            if (activeTilePos.X >= 0 && activeTilePos.Y >= 0)
            {
                ref TileMapLayer layer = ref tilemap.Layers.Data[tilemap.SpriteLayerIndex];

                int index = activeTilePos.X + activeTilePos.Y * layer.LayoutWidth;
                if (index < layer.Layout.Length)
                {
                    ref LayerTile tile = ref layer.Layout[index];

                    int vertexCount = FontRasterizer.Native9.EmitTextVertices("ID: " + tile.TileID + "; Anim: " + tile.IsAnimated + "; FlipX: " + tile.IsFlippedX + "; FlipY: " + tile.IsFlippedY + "; OneWay:" + tile.IsOneWay + "; " + tile.MaterialOffset + "; " + tile.Material, ref vertices, 10, 56, ColorRgba.White);
                    canvas.DrawDevice.AddVertices(FontRasterizer.Native9.Material, VertexMode.Quads, vertices, 0, vertexCount);
                }
예제 #25
0
    public void SetDummyTile(TileSlot tile, Vector2Int gridPosition, TileMapLayer buildingLayer, Color?color = null)
    {
        Tilemap tilemap = GetTilemap(buildingLayer);

        if (GetTileFromGrid(gridPosition, buildingLayer) == null)
        {
            if (tile == null)
            {
                tilemap.SetTile((Vector3Int)gridPosition, null);
            }
            else
            {
                GetTilemap(buildingLayer).SetTile((Vector3Int)gridPosition, tile.GetMainTileBase);
                if (color != null)
                {
                    SetTileColor(gridPosition, buildingLayer, (Color)color);
                }
            }
        }
    }
예제 #26
0
    /// <summary>
    /// Gets the tile on a certain position.
    /// Input grid position for an exact position on the grid
    /// and world position if you want to also check for tiles sides.
    /// </summary>
    /// <returns></returns>
    public TileHit GetHitFromWorldPosition(Vector2 worldPosition, TileMapLayer buildingLayer)
    {
        Vector2Int gridPosition = WorldToGridPosition(worldPosition, buildingLayer);
        TileHit    hit;

        if (TryGetChunk(GridToChunkCoordinates(gridPosition), out Chunk chunk))
        {
            hit = new TileHit(chunk.GetTile(gridPosition, buildingLayer), gridPosition);
            if (hit.tile != null)
            {
                return(hit);
            }
            else
            {
                Vector2 tileWorldPosition = GridToWorldPosition(gridPosition, buildingLayer, false);
                Vector2 localPosition     = worldPosition - tileWorldPosition;
                if (localPosition.y < 0.2f && Mathf.Abs(localPosition.x) < 0.1f)
                {
                    return(hit);
                }
                Vector2Int checkPosition = gridPosition + (localPosition.x < 0 ? Vector2Int.up : Vector2Int.right);
                hit = new TileHit(GetTileFromGrid(checkPosition, buildingLayer), checkPosition);
                if (hit.tile != null)
                {
                    return(hit);
                }
                else if (Vector2.Distance(localPosition, new Vector2(0, 0.45f)) <= 0.24f)
                {
                    checkPosition = gridPosition + Vector2Int.one;
                    hit           = new TileHit(GetTileFromGrid(checkPosition, buildingLayer), checkPosition);
                    if (hit.tile != null)
                    {
                        return(hit);
                    }
                }
            }
        }
        return(new TileHit(null, gridPosition));
    }
예제 #27
0
        public TileHit Scan(Vector2Int gridStartPosition, DirectionEnum _direction, int _radius, TileMapLayer _buildingLayer, IChecker _checker)
        {
            startPosition = gridStartPosition;
            radius        = _radius;
            buildingLayer = _buildingLayer;
            checker       = _checker;
            direction     = _direction;
            TileSlot currentTile = gridManager.GetTileFromGrid(startPosition, buildingLayer);

            if (currentTile != null && checker.CheckTile(currentTile))
            {
                return(new TileHit(currentTile, startPosition));
            }
            for (int i = 1; i <= radius; i++)
            {
                TileHit tileHit = GetClosestTileInSquare(i);
                if (tileHit != null)
                {
                    return(tileHit);
                }
            }

            return(null);
        }
예제 #28
0
 public virtual void CancelEvent(Vector2Int gridPosition, TileMapLayer tilemapLayer)
 => tileState.CancelEvent(gridPosition, tilemapLayer);
예제 #29
0
 public void Init(Vector2Int gridPosition, TileMapLayer tilemapLayer, bool generation = false)
 => tileState.Init(gridPosition, tilemapLayer, generation);
예제 #30
0
 public virtual void SpecialInteraction(Vector2Int gridPosition, TileMapLayer buildingLayer)
 => tileState.SpecialInteraction(gridPosition, buildingLayer);