예제 #1
0
        public void CoordToWorldMapping()
        {
            OrientationManager.SetOrientation(Orientation.North);

            Vector2Int coord1 = new Vector2Int(74, -23);
            Vector2Int coord2 = new Vector2Int(-33, 13);
            Vector2Int coord3 = new Vector2Int(93, 0);

            Vector2 expectedWorldPos1 = new Vector2(
                -98 * Settings.TILE_WIDTH_HALF,
                -51 * Settings.TILE_HEIGHT_HALF);

            Assert.AreEqual(TileTransformer.CoordToWorld(coord1), expectedWorldPos1);
            Assert.AreEqual(TileTransformer.CoordToWorld(coord1.x, coord1.y), expectedWorldPos1);
            Assert.AreEqual(TileTransformer.CoordToWorld((float)coord1.x, (float)coord1.y), expectedWorldPos1);

            Vector2 expectedWorldPos2 = new Vector2(
                45 * Settings.TILE_WIDTH_HALF,
                20 * Settings.TILE_HEIGHT_HALF);

            Assert.AreEqual(TileTransformer.CoordToWorld(coord2), expectedWorldPos2);
            Assert.AreEqual(TileTransformer.CoordToWorld(coord2.x, coord2.y), expectedWorldPos2);
            Assert.AreEqual(TileTransformer.CoordToWorld((float)coord2.x, (float)coord2.y), expectedWorldPos2);

            Vector2 expectedWorldPos3 = new Vector2(
                -94 * Settings.TILE_WIDTH_HALF,
                -93 * Settings.TILE_HEIGHT_HALF);

            Assert.AreEqual(TileTransformer.CoordToWorld(coord3), expectedWorldPos3);
            Assert.AreEqual(TileTransformer.CoordToWorld(coord3.x, coord3.y), expectedWorldPos3);
            Assert.AreEqual(TileTransformer.CoordToWorld((float)coord3.x, (float)coord3.y), expectedWorldPos3);
        }
        public void UpdateSprite()
        {
            Vector2 rotatedOffset = TileTransformer.InverseRotateCoord(new Vector2(xOffset, yOffset));

            transform.position = TileTransformer.CoordToWorld(character.x + rotatedOffset.x, character.y + rotatedOffset.y);
            SpriteRenderer sr = GetComponent <SpriteRenderer>();

            sr.sortingOrder = SortingOrders.TileOrder(character.roundedX, character.roundedY, TileSubLayer.Character);
        }
예제 #3
0
        public void WorldToCoordRotates()
        {
            OrientationManager.SetOrientation(Orientation.North);

            Vector2Int coords = new Vector2Int(13, -33);
            Vector2    world  = TileTransformer.CoordToWorld(coords) + new Vector2(Settings.TILE_WIDTH_HALF / 2f, 0f);

            Vector2Int invertedCoords = TileTransformer.WorldToCoord(world);

            OrientationManager.SetOrientation(Orientation.West);
            Assert.AreEqual(TileTransformer.InverseRotateCoord(invertedCoords), TileTransformer.WorldToCoord(world));
        }
예제 #4
0
        void UpdateSprite(ITile tile)
        {
            if (gameobjects.ContainsKey(tile) == false)
            {
                Debug.LogError("Trying to update a furni without a gameobject created.");
                return;
            }

            GameObject furni_go = gameobjects[tile];

            furni_go.transform.position = (Vector3)TileTransformer.CoordToWorld(tile.X, tile.Y);

            SpriteRenderer sr = furni_go.GetComponent <SpriteRenderer>();

            sr.sprite       = DataManager.furnitureSpriteData.GetDataById(tile.GetPlacedFurniture().GetIndex()).GetSprite(tile.GetPlacedFurniture());
            sr.sortingOrder = SortingOrders.TileOrder(tile.X, tile.Y, TileSubLayer.Furniture);
        }
예제 #5
0
        void UpdateSprite(ITile tile)
        {
            if (gameobjects.ContainsKey(tile) == false)
            {
                Debug.LogError("Trying to update a tile without a gameobject created.");
                return;
            }

            GameObject tile_go = gameobjects[tile];

            tile_go.transform.position = (Vector3)TileTransformer.CoordToWorld(tile.X, tile.Y);

            SpriteRenderer sr = tile_go.GetComponent <SpriteRenderer>();

            sr.sprite       = DataManager.tileSpriteData.GetDataById(tile.Type);
            sr.sortingOrder = SortingOrders.FloorOrder(tile.X, tile.Y, FloorSubLayer.FloorTile);
        }
예제 #6
0
        public override void UpdateCursors(Vector2 mousePosition)
        {
            Vector2Int tilePos = TileTransformer.ScreenToCoord(mousePosition);

            if (level.IsTileInBounds(tilePos.x, tilePos.y))
            {
                mainCursorSr.enabled      = true;
                mainCursorSr.sortingOrder = SortingOrders.TileOrder(tilePos.x, tilePos.y, TileSubLayer.Furniture);

                IFurnitureSprite sprite = DataManager.furnitureSpriteData.GetDataById(index);
                mainCursorSr.sprite = sprite.GetSprite(orientation);

                mainCursorGo.transform.position = TileTransformer.CoordToWorld(tilePos);
            }
            else
            {
                mainCursorSr.enabled = false;
            }
        }
예제 #7
0
        public override void UpdateCursors(Vector2 mousePosition)
        {
            Vector2Int coords = TileTransformer.ScreenToCoord(mousePosition);

            if (level.IsTileInBounds(coords.x, coords.y))
            {
                mainCursorSr.enabled            = true;
                mainCursorSr.sortingOrder       = SortingOrders.FloorOrder(coords.x, coords.y, FloorSubLayer.Cursor);
                mainCursorGo.transform.position = TileTransformer.CoordToWorld(coords);

                mainCursorSr.sprite = GetCursorSprite(coords);
            }
            else
            {
                mainCursorSr.enabled = false;
            }

            return;
        }
예제 #8
0
        public override void UpdateCursors(Vector2 mousePosition)
        {
            base.UpdateCursors(mousePosition);

            while (activeStaticCursors.Count > 0)
            {
                SimplePool.Despawn(activeStaticCursors.Pop());
            }

            if (!validClickStart)
            {
                return;
            }

            Vector2Int startCoords = dragStartCoords;
            Vector2Int endCoords   = TileTransformer.ScreenToCoord(mousePosition);

            Vector2Int minCoords = CoordUtil.MinCoords(startCoords, endCoords);
            Vector2Int maxCoords = CoordUtil.MaxCoords(startCoords, endCoords);

            GameObject cursorPrefab = Resources.Load <GameObject> (GamePaths.CursorPrefab);

            for (int x = minCoords.x; x <= maxCoords.x; x++)
            {
                for (int y = minCoords.y; y <= maxCoords.y; y++)
                {
                    Vector3    pos            = TileTransformer.CoordToWorld(x, y);
                    GameObject staticCursorGo = SimplePool.Spawn(cursorPrefab, pos, Quaternion.identity);

                    SpriteRenderer staticCursorSr = staticCursorGo.GetComponent <SpriteRenderer> ();
                    staticCursorSr.sprite           = GetCursorSprite(new Vector2Int(x, y));
                    staticCursorSr.sortingLayerName = mainCursorSr.sortingLayerName;
                    staticCursorSr.sortingOrder     = SortingOrders.FloorOrder(x, y, FloorSubLayer.Cursor);

                    activeStaticCursors.Push(staticCursorGo);
                }
            }

            return;
        }
예제 #9
0
        public void WorldToCoordRounds()
        {
            OrientationManager.SetOrientation(Orientation.North);

            Vector2Int coords1 = new Vector2Int(42, 0);
            Vector2Int coords2 = new Vector2Int(-11, -63);
            Vector2Int coords3 = new Vector2Int(-52, 53);

            Vector2 world1 = TileTransformer.CoordToWorld(coords1) +
                             new Vector2(Settings.TILE_WIDTH / 6f, Settings.TILE_HEIGHT / 9f);

            Vector2 world2 = TileTransformer.CoordToWorld(coords2) +
                             new Vector2(Settings.TILE_WIDTH / 3f, 0f);

            // This test adds a big offset so the coords change.
            Vector2 world3 = TileTransformer.CoordToWorld(coords3) +
                             new Vector2(Settings.TILE_WIDTH_HALF, Settings.TILE_HEIGHT * 0.9f);

            Assert.AreEqual(coords1, TileTransformer.WorldToCoord(world1));
            Assert.AreEqual(coords2, TileTransformer.WorldToCoord(world2));
            Assert.AreEqual(coords3, TileTransformer.WorldToCoord(world3) + Vector2Int.one);
        }
예제 #10
0
        public void CoordToWorldRotates()
        {
            OrientationManager.SetOrientation(Orientation.North);
            Vector2Int originalCoord = new Vector2Int(77, 23);
            Vector2    originalWorld = TileTransformer.CoordToWorld(originalCoord);

            OrientationManager.SetOrientation(Orientation.East);
            Vector2Int eastCoord             = TileTransformer.RotateCoord(originalCoord);
            Vector2    eastWorldFromOriginal = TileTransformer.CoordToWorld(originalCoord);

            OrientationManager.SetOrientation(Orientation.West);
            Vector2Int westCoord             = TileTransformer.RotateCoord(originalCoord);
            Vector2    westWorldFromOriginal = TileTransformer.CoordToWorld(originalCoord);

            OrientationManager.SetOrientation(Orientation.South);
            Vector2Int southCoord             = TileTransformer.RotateCoord(originalCoord);
            Vector2    southWorldFromOriginal = TileTransformer.CoordToWorld(originalCoord);

            OrientationManager.SetOrientation(Orientation.North);

            Assert.AreEqual(TileTransformer.CoordToWorld(eastCoord), eastWorldFromOriginal);
            Assert.AreEqual(TileTransformer.CoordToWorld(westCoord), westWorldFromOriginal);
            Assert.AreEqual(TileTransformer.CoordToWorld(southCoord), southWorldFromOriginal);
        }
예제 #11
0
 public void UpdatePosition()
 {
     gameObject.transform.position = TileTransformer.CoordToWorld(character.x, character.y);
 }