Beispiel #1
0
    public SrpgTile CreateTileInto(SrpgLayer layer, Sprite tileSprt, int x, int y)
    {
        string     tileName = string.Format("[{0}, {1}] {2}", x, y, tileSprt.name);
        GameObject tileObj  = new GameObject(tileName);

        tileObj.transform.parent = layer.transform;

        SpriteRenderer tileRndr = tileObj.AddComponent <SpriteRenderer>();

        tileRndr.sprite       = tileSprt;
        tileRndr.sortingOrder = CalcZIndex(layer, y);

        float tileScale = _tileWidth / tileRndr.bounds.size.x;

        tileObj.transform.localScale = new Vector3(tileScale, tileScale, 1);
        tileObj.transform.position   = CalcTilePosition(x, y);

        if (layer.touchable)
        {
            tileObj.AddComponent <BoxCollider2D>();
        }

        SrpgTile tile = tileObj.AddComponent <SrpgTile>();

        tile.x = x;
        tile.y = y;

        return(tile);
    }
Beispiel #2
0
    public List <SrpgTile> GetAdjacentTiles(SrpgLayer layer, int x, int y)
    {
        List <SrpgNode> toFindNodes = new List <SrpgNode>();

        // depending on tile types such as rectangle, hexagon..
        if (x > 0)
        {
            toFindNodes.Add(new SrpgNode(x - 1, y));
        }
        if (x < _mapHeight - 1)
        {
            toFindNodes.Add(new SrpgNode(x + 1, y));
        }
        if (y > 0)
        {
            toFindNodes.Add(new SrpgNode(x, y - 1));
        }
        if (y < mapHeight - 1)
        {
            toFindNodes.Add(new SrpgNode(x, y + 1));
        }

        SrpgTile[]      allTiles      = layer.GetTiles();
        List <SrpgTile> adjacentTiles = new List <SrpgTile>();

        foreach (SrpgTile tile in allTiles)
        {
            if (toFindNodes.Contains(new SrpgNode(tile.x, tile.y)))
            {
                adjacentTiles.Add(tile);
            }
        }

        return(adjacentTiles);
    }
Beispiel #3
0
    void OnDestroy()
    {
        SceneView.onSceneGUIDelegate             -= OnSceneGUI;
        EditorApplication.hierarchyWindowChanged -= OnHierarchyChanged;

        SrpgMtUtils.ShowUnityGrid(true);
        SrpgMtUtils.SetupGizmos(false);

        if (_canvas != null)
        {
            DestroyImmediate(_canvas.gameObject);
            _canvas = null;
        }

        if (_brush != null)
        {
            DestroyImmediate(_brush.gameObject);
            _brush = null;
        }

        if (_currMap != null)
        {
            _currMap.lastEditedTime = DateTime.Now.Ticks;
            _currMap = null;
        }

        if (_currLayer != null)
        {
            _currLayer.lastEditedTime = DateTime.Now.Ticks;
            _currLayer = null;
        }
    }
Beispiel #4
0
    public SrpgLayer CreateLayer(string layerName, bool touchable = false, int zIndexStart = -1)
    {
        if (zIndexStart < 0)
        {
            // magic number 5!?
            List <SrpgLayer> layers = GetSortedLayers();
            if (layers.Count > 0)
            {
                zIndexStart = layers[0].zIndexStart + _mapHeight + 5;
            }
            else
            {
                zIndexStart = 5;
            }
        }

        GameObject layerObj = new GameObject(layerName);

        layerObj.transform.parent   = transform;
        layerObj.transform.position = Vector3.zero;

        SrpgLayer newLayer = layerObj.AddComponent <SrpgLayer>();

        newLayer.touchable = touchable;
        newLayer.SetZIndex(zIndexStart, _mapHeight);

        return(newLayer);
    }
Beispiel #5
0
    private void LocateUnit(SrpgLayer layer, SrpgUnit unit, int x, int y)
    {
        unit.SetZIndex(CalcZIndex(layer, y));

        unit.gameObject.name = string.Format("[{0}, {1}] {2}", x, y, unit.gameObject.name);
        unit.x = x;
        unit.y = y;

        float unitX = _tileWidth * x + unit.offsetX;
        float unitY = _tileHeight * y + unit.offsetY;

        unit.transform.position = new Vector3(unitX, unitY);
    }
Beispiel #6
0
    public void LocateUnitFirst(SrpgLayer layer, SrpgUnit unit, int x, int y,
                                float fitRatio = 1f, SrpgBattle.UnitFitMode scaleMode = SrpgBattle.UnitFitMode.Inside)
    {
        unit.boundWidth  = _tileWidth;
        unit.boundHeight = _tileHeight;

        Vector3 unitSize  = unit.GetSize();
        float   unitScale = 0f;

        if (scaleMode == SrpgBattle.UnitFitMode.Inside)
        {
            float widthScale  = _tileWidth * fitRatio / unitSize.x;
            float heightScale = _tileHeight * fitRatio / unitSize.y;

            if (widthScale >= 1f && heightScale >= 1f) // tile width >= unit width && tile height >= unit height
            {
                unitScale = Mathf.Min(widthScale, heightScale);
            }
            else if (widthScale < 1f && heightScale < 1f) // tile width < unit width && tile height < unit height
            {
                unitScale = Mathf.Max(widthScale, heightScale);
            }
            else if (widthScale >= 1f && heightScale < 1f) // tile width >= unit width && tile height < unit height
            {
                unitScale = heightScale;
            }
            else if (widthScale < 1f && heightScale >= 1f) // tile width < unit width && tile height >= unit height
            {
                unitScale = widthScale;
            }
        }
        else if (scaleMode == SrpgBattle.UnitFitMode.Width)
        {
            unitScale = _tileWidth * fitRatio / unitSize.x;
        }
        else if (scaleMode == SrpgBattle.UnitFitMode.Height)
        {
            unitScale = _tileHeight * fitRatio / unitSize.y;
        }

        unit.Scale(unitScale);

        Vector3 unitCenter = unit.GetCenter();

        unit.offsetX = _tileWidth / 2 + unitCenter.x;
        unit.offsetY = _tileHeight / 2 - unitCenter.y;

        LocateUnit(layer, unit, x, y);
    }
Beispiel #7
0
    public void ZIndexUp(int layerIndex)
    {
        if (layerIndex <= 0)
        {
            return;
        }

        List <SrpgLayer> layers      = GetSortedLayers();
        SrpgLayer        destLayer   = layers[layerIndex - 1];
        SrpgLayer        targetLayer = layers[layerIndex];
        int destLayerZIndexStart     = destLayer.zIndexStart;

        destLayer.SetZIndex(targetLayer.zIndexStart, _mapHeight);
        targetLayer.SetZIndex(destLayerZIndexStart, _mapHeight);
        layers[layerIndex - 1] = targetLayer;
        layers[layerIndex]     = destLayer;
    }
Beispiel #8
0
    public void ZIndexDown(int layerIndex)
    {
        if (layerIndex >= transform.childCount - 1)
        {
            return;
        }

        List <SrpgLayer> layers      = GetSortedLayers();
        SrpgLayer        destLayer   = layers[layerIndex + 1];
        SrpgLayer        targetLayer = layers[layerIndex];
        int destLayerZIndexStart     = destLayer.zIndexStart;

        destLayer.SetZIndex(targetLayer.zIndexStart, _mapHeight);
        targetLayer.SetZIndex(destLayerZIndexStart, _mapHeight);
        layers[layerIndex + 1] = targetLayer;
        layers[layerIndex]     = destLayer;
    }
Beispiel #9
0
    public SrpgCell InstantiateCellIntoLayer(SrpgLayer layer, GameObject cellPrefab, int x, int y)
    {
        GameObject cellObj = Instantiate(cellPrefab, layer.transform);

        cellObj.name = string.Format("[{0}, {1}] {2}", x, y, cellObj.name);

        SrpgCell cell = cellObj.GetComponent <SrpgCell>();

        cell.x = x;
        cell.y = y;
        cell.SetZIndex(layer.zIndexStart);

        float cellScale = _tileWidth / cell.GetSize().x;

        cellObj.transform.localScale = new Vector3(cellScale, cellScale, 1);
        cellObj.transform.position   = CalcTilePosition(x, y);

        return(cell);
    }
Beispiel #10
0
    private void SetupLayer()
    {
        if (_currMap.transform.childCount == 0)
        {
            _currLayer = _currMap.CreateLayer("Ground", true);
            Undo.RegisterCreatedObjectUndo(_currLayer.gameObject, _currLayer.name);

            _sortedLayer = new List <SrpgLayer>();
            _sortedLayer.Add(_currLayer);
        }
        else
        {
            _sortedLayer = _currMap.GetSortedLayers();
            if (_currLayer == null)
            {
                _currLayer = _currMap.GetLastestEditedLayer();
            }
        }
    }
Beispiel #11
0
    public void OnSceneGUI(SceneView sceneView, SrpgCanvas canvas, SrpgBrush brush,
                           SrpgMap map, SrpgLayer layer)
    {
        if (canvas == null || brush == null || map == null)
        {
            return;
        }
        //_canvas = canvas;
        _brush     = brush;
        _currMap   = map;
        _currLayer = layer;

        _brush.ShowHide(SrpgMapTool.toolMode == SrpgMapTool.ToolMode.Edit &&
                        SrpgMapTool.editMenu == SrpgMapTool.EditMenu.Brush);

        if (SrpgMapTool.toolMode != SrpgMapTool.ToolMode.Edit)
        {
            return;
        }

        DrawButtons();

        DoMouseEvent();
    }
Beispiel #12
0
    private void GUI_EditMode()
    {
        if (_currMap == null)
        {
            return;
        }

        EditorGUILayout.BeginHorizontal("box");
        {
            if (GUILayout.Button("Generate map"))
            {
                toolMode = ToolMode.Generate;
                editMenu = EditMenu.None;
            }
        }
        EditorGUILayout.EndHorizontal();

        GUI_Title("Edit map: " + _currMap.gameObject.name);

        EditorGUILayout.BeginVertical("box");
        {
            EditorGUILayout.LabelField("Layers (z-index rank. name)");

            GUIStyle buttonStyle = GUI.skin.GetStyle("Button");
            buttonStyle.padding = new RectOffset(2, 2, 1, 1);

            String[] toolbars = { "↑", "↓", "x" };

            for (int i = 0; i < _sortedLayer.Count; i++)
            {
                SrpgLayer layer = _sortedLayer[i];
                if (layer == null)
                {
                    Debug.LogWarning("layer is null");
                    continue;
                }

                EditorGUILayout.BeginHorizontal();
                {
                    Texture2D layerTex = layer.gameObject.activeSelf ?
                                         config.layerVisibleIcon :
                                         config.layerHiddenIcon;

                    if (GUILayout.Button(layerTex, buttonStyle, GUILayout.Width(20), GUILayout.Height(15)))
                    {
                        layer.gameObject.SetActive(!layer.gameObject.activeSelf);
                    }

                    string layerName = (i + 1) + ". " + layer.gameObject.name;
                    if (EditorGUILayout.ToggleLeft(layerName, layer == _currLayer))
                    {
                        _currLayer = layer;
                    }

                    int clickedButton = GUILayout.Toolbar(-1, toolbars, GUILayout.Width(60));
                    if (clickedButton == 0)                     // up
                    {
                        _currMap.ZIndexUp(i);
                        SetupLayer();
                    }
                    else if (clickedButton == 1)                     // down
                    {
                        _currMap.ZIndexDown(i);
                        SetupLayer();
                    }
                    if (clickedButton == 2) // remove
                    {
                        if (_sortedLayer.Count > 1)
                        {
                            _sortedLayer.RemoveAt(i);
                            Undo.DestroyObjectImmediate(layer.gameObject);
                        }
                    }
                }
                EditorGUILayout.EndHorizontal();
            }

            if (!_layerAdding)
            {
                if (GUILayout.Button("Add Layer"))
                {
                    _layerAdding = true;
                }
            }
            else
            {
                EditorGUILayout.BeginHorizontal();
                {
                    EditorGUILayout.LabelField("Name", GUILayout.Width(40));
                    _genLayerName = EditorGUILayout.TextField(_genLayerName);

                    EditorGUILayout.LabelField("", GUILayout.Width(10)); // space

                    //_genLayerTouchable = GUILayout.Toggle(_genLayerTouchable, "Touchable", GUILayout.Width(80));

                    if (GUILayout.Button("Add", GUILayout.Width(50)))
                    {
                        string layerName = _genLayerName;
                        if (layerName.Length == 0)
                        {
                            layerName = "Layer";
                        }

                        _currLayer = _currMap.CreateLayer(layerName, _genLayerTouchable);
                        Undo.RegisterCreatedObjectUndo(_currLayer.gameObject, _currLayer.name);

                        _layerAdding  = false;
                        _genLayerName = "";
                    }

                    if (GUILayout.Button("Cancel", GUILayout.Width(50)))
                    {
                        _layerAdding = false;
                    }
                }
                EditorGUILayout.EndHorizontal();
            }
        }
        EditorGUILayout.EndVertical();

        Texture2D prevTex = _tileset.texture;
        Rect      boxRect = EditorGUILayout.BeginVertical("box");

        {
            string tilesetName = (_tileset.texture == null ? "not selected" : _tileset.texture.name);
            _tileset.texture = (Texture2D)EditorGUILayout.ObjectField("Tileset: " + tilesetName, _tileset.texture, typeof(Texture2D), true, GUILayout.Height(40));

            if (_tileset.texture == null && _currMap.lastTileset != null)
            {
                _tileset.texture = _currMap.lastTileset;
            }

            Sprite firstSprite = null;
            if (_tileset.texture != null)
            {
                string tilesetPath = AssetDatabase.GetAssetPath(_tileset.texture.GetInstanceID());
                firstSprite = AssetDatabase.LoadAssetAtPath <Sprite>(tilesetPath);
                if (firstSprite != null)
                {
                    _tileset.spriteWidth  = firstSprite.rect.width;
                    _tileset.spriteHeight = firstSprite.rect.height;

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.HelpBox("Texture Size: " + _tileset.texture.width + " X " + _tileset.texture.height, MessageType.Info);
                    EditorGUILayout.HelpBox("Sprite Size: " + _tileset.spriteWidth + " X " + _tileset.spriteHeight, MessageType.Info);
                    EditorGUILayout.EndHorizontal();

                    _currMap.lastTileset = _tileset.texture;

                    _tilesetBackColor = EditorGUILayout.ColorField("Background Color", _tilesetBackColor);
                }
            }
        }
        EditorGUILayout.EndVertical();

        if (_tileset.texture == null)
        {
            return;
        }

        // draw background and tileset
        float sideMargin     = 5;
        float rightMargin    = 15;
        float tilesetOriginX = sideMargin;
        float tilesetOriginY = boxRect.y + boxRect.height + sideMargin;

#if UNITY_EDITOR_OSX
        float scaledTilesetWidth = (Screen.width / 2) - (sideMargin + rightMargin);
#else
        float scaledTilesetWidth = Screen.width - (sideMargin + rightMargin);
#endif

        float tilesetScale        = _tileset.texture.width / scaledTilesetWidth;
        float scaledTilesetHeight = _tileset.texture.height / tilesetScale;
        Rect  tilesetRect         = new Rect(tilesetOriginX, tilesetOriginY, scaledTilesetWidth, scaledTilesetHeight);

        EditorGUILayout.LabelField("", GUILayout.Height(scaledTilesetHeight), GUILayout.Width(scaledTilesetWidth - 5)); // tileset place holder

        Texture2D backTex = SrpgMtUtils.MakeAlphaTexture(1, 1, _tilesetBackColor);
        GUI.DrawTexture(tilesetRect, backTex, ScaleMode.StretchToFill);
        GUI.DrawTexture(tilesetRect, _tileset.texture);

        // draw lines
        int tilesetWidth  = (int)(_tileset.texture.width / _tileset.spriteWidth);
        int tilesetHeight = (int)(_tileset.texture.height / _tileset.spriteHeight);

        float scaledSpriteWidth  = _tileset.spriteWidth / tilesetScale;
        float scaledSpriteHeight = _tileset.spriteHeight / tilesetScale;
        //float scaledSpriteWidth = scaledTilesetWidth / tilesetWidth;
        //float scaledSpriteHeight = scaledTilesetHeight / tilesetHeight;

        Handles.BeginGUI();
        {
            Handles.color = Color.white;

            for (int i = 1; i < tilesetWidth; i++)
            {
                float x = tilesetOriginX + scaledSpriteWidth * i;
                Handles.DrawLine(new Vector3(x, tilesetOriginY), new Vector3(x, tilesetOriginY + scaledTilesetHeight));
            }

            for (int i = 1; i < tilesetHeight; i++)
            {
                float y = tilesetOriginY + scaledSpriteHeight * i;
                Handles.DrawLine(new Vector3(tilesetOriginX, y), new Vector3(tilesetOriginX + scaledTilesetWidth, y));
            }
        }
        Handles.EndGUI();

        // fill _sprites
        if (_tileset.texture != prevTex)
        {
            _sprites = new Sprite[tilesetWidth, tilesetHeight];

            string   tilesetPath = AssetDatabase.GetAssetPath(_tileset.texture.GetInstanceID());
            Sprite[] rawSprites  = AssetDatabase.LoadAllAssetsAtPath(tilesetPath).OfType <Sprite>().ToArray();

            foreach (Sprite sprt in rawSprites)
            {
                float spriteCenterX = tilesetOriginX + sprt.rect.center.x / tilesetScale;
                float spriteCenterY = tilesetOriginY + (_tileset.texture.height - (sprt.rect.center.y)) / tilesetScale;
                int   x             = Mathf.FloorToInt((spriteCenterX - tilesetOriginX) / scaledSpriteWidth);
                int   y             = Mathf.FloorToInt((spriteCenterY - tilesetOriginY) / scaledSpriteHeight);
                _sprites[x, y] = sprt;
            }

            _spriteSelection.Init();
        }

        // select sprites
        Event e = Event.current;
        if (e.button == 0)
        {
            if (e.type == EventType.MouseDown || e.type == EventType.MouseDrag)
            {
                Vector2 mousePos = e.mousePosition;

                foreach (Sprite sprt in _sprites)
                {
                    if (sprt == null)
                    {
                        continue;
                    }

                    float spriteX = tilesetOriginX + sprt.rect.x / tilesetScale;
                    float spriteY = tilesetOriginY + (_tileset.texture.height - (sprt.rect.y + sprt.rect.height)) / tilesetScale;

                    if (mousePos.x > spriteX && mousePos.x < spriteX + scaledSpriteWidth &&
                        mousePos.y > spriteY && mousePos.y < spriteY + scaledSpriteHeight)
                    {
                        int selX = Mathf.FloorToInt((mousePos.x - tilesetOriginX) / scaledSpriteWidth);
                        int selY = Mathf.FloorToInt((mousePos.y - tilesetOriginY) / scaledSpriteHeight);

                        if (e.type == EventType.MouseDown)
                        {
                            _spriteSelection.dragSttX = _spriteSelection.dragEndX = selX;
                            _spriteSelection.dragSttY = _spriteSelection.dragEndY = selY;
                            _spriteSelection.changed  = true;
                        }
                        else if (e.type == EventType.MouseDrag)
                        {
                            _spriteSelection.dragEndX = selX;
                            _spriteSelection.dragEndY = selY;
                            _spriteSelection.changed  = true;
                        }

                        _spriteSelection.xMin = Mathf.Min(_spriteSelection.dragSttX, _spriteSelection.dragEndX);
                        _spriteSelection.yMin = Mathf.Min(_spriteSelection.dragSttY, _spriteSelection.dragEndY);
                        _spriteSelection.xMax = Mathf.Max(_spriteSelection.dragSttX, _spriteSelection.dragEndX);
                        _spriteSelection.yMax = Mathf.Max(_spriteSelection.dragSttY, _spriteSelection.dragEndY);

                        e.Use();
                        break;
                    }
                }
            }
            else if (e.type == EventType.MouseUp)
            {
                if (_spriteSelection.changed)
                {
                    _spriteSelection.changed = false;
                    _brush.ResetSprites(_spriteSelection.xMin, _spriteSelection.yMin, _spriteSelection.xMax, _spriteSelection.yMax, _sprites);
                    e.Use();
                }
            }
        }

        // draw selection
        if (_spriteSelection.dragSttY >= 0 && _spriteSelection.dragSttX >= 0 &&
            _spriteSelection.dragEndY >= 0 && _spriteSelection.dragEndX >= 0)
        {
            for (int y = _spriteSelection.yMin; y <= _spriteSelection.yMax; y++)
            {
                for (int x = _spriteSelection.xMin; x <= _spriteSelection.xMax; x++)
                {
                    float     scaledRectX   = tilesetOriginX + scaledSpriteWidth * x;
                    float     scaledRectY   = tilesetOriginY + scaledSpriteHeight * y;
                    Rect      selectionRect = new Rect(scaledRectX, scaledRectY, scaledSpriteWidth, scaledSpriteHeight);
                    Texture2D selectionTex  = SrpgMtUtils.MakeAlphaTexture(1, 1, new Color(0, 0.5f, 0.5f, 0.5f));
                    GUI.DrawTexture(selectionRect, selectionTex, ScaleMode.StretchToFill);
                }
            }
        }
    }
Beispiel #13
0
    void Start()
    {
        //----- init configuration and check -----
        if (!InitConfig())
        {
            return;
        }

        if (_unitFitMode == UnitFitMode.Unknown)
        {
            Debug.LogError("unitFitMode is unknown");
            return;
        }
        if (_moveMethod == MoveMethod.Unknown)
        {
            Debug.LogError("moveMethod is unknown");
            return;
        }

        //----- init map & layers and check -----
        if (!InitMap())
        {
            return;
        }
        if (_map == null)
        {
            Debug.LogError("map is null");
            return;
        }

        List <SrpgLayer> layers = _map.GetSortedLayers();

        if (layers.Count == 0)
        {
            Debug.LogError("no layers");
            return;
        }

        if (_groundLayer == null)
        {
            _groundLayer = layers[layers.Count - 1];
        }

        // unit layer & cell layer z index 수정 필요
        if (_unitLayer == null)
        {
            _unitLayer = _map.CreateLayer("Units");
        }

        // magic number 5!?
        int cellLayerZ = _unitLayer.zIndexStart - 5;

        _cellLayer = _map.CreateLayer("Cells", false, cellLayerZ);

        foreach (SrpgLayer layer in layers)
        {
            if (layer.touchable)
            {
                SrpgTile[] tiles = layer.GetComponentsInChildren <SrpgTile>();
                foreach (SrpgTile tile in tiles)
                {
                    tile.clicked += OnTileClicked;
                }
            }
        }

        //----- init units and check -----
        if (!InitUnits())
        {
            return;
        }
        Debug.Assert(_playerUnits.Count > 0 && _enemyUnits.Count > 0);

        StartGame();
    }
Beispiel #14
0
 public SrpgTile GetTile(SrpgLayer layer, int x, int y)
 {
     return(layer.GetTile(x, y));
 }
    public override void OnInspectorGUI()
    {
        GUI.enabled = false;

        _target.x = EditorGUILayout.IntField("X", _target.x);
        _target.y = EditorGUILayout.IntField("Y", _target.y);

        GUI.enabled = true;

        EditorGUILayout.Space();

        SrpgLayer parentLayer = _target.transform.parent.GetComponent <SrpgLayer>();

        if (parentLayer == null || parentLayer.propertySchemes.Count == 0)
        {
            return;
        }

        Undo.RecordObject(_target, _target.name);

        EditorGUILayout.BeginVertical("box");
        {
            EditorGUILayout.LabelField("Layer Properties");

            GUILayoutOption valueWidth = GUILayout.Width(100);
            foreach (SrpgPropertyScheme scheme in parentLayer.propertySchemes)
            {
                EditorGUILayout.BeginHorizontal();
                {
                    EditorGUILayout.LabelField(scheme.name);

                    SrpgPropertyImpl prop = null;
                    if (!_target.TryGetProperty(scheme.name, out prop))
                    {
                        if (GUILayout.Button("Use", GUILayout.Width(100), GUILayout.Height(14)))
                        {
                            prop = _target.AddProperty(scheme.name);

                            if (scheme.type == SrpgPropertyScheme.PropType.Bool)
                            {
                                prop.b = false;
                            }
                            else if (scheme.type == SrpgPropertyScheme.PropType.Int)
                            {
                                prop.n = 0;
                            }
                            else if (scheme.type == SrpgPropertyScheme.PropType.Float)
                            {
                                prop.f = 0f;
                            }
                            else if (scheme.type == SrpgPropertyScheme.PropType.String)
                            {
                                prop.s = "";
                            }
                            else
                            {
                                Debug.LogError("Wrong type property!");
                            }
                        }
                    }
                    else
                    {
                        if (scheme.type == SrpgPropertyScheme.PropType.Bool)
                        {
                            prop.b = EditorGUILayout.Toggle(prop.b, valueWidth);
                        }
                        else if (scheme.type == SrpgPropertyScheme.PropType.Int)
                        {
                            prop.n = EditorGUILayout.IntField(prop.n, valueWidth);
                        }
                        else if (scheme.type == SrpgPropertyScheme.PropType.Float)
                        {
                            prop.f = EditorGUILayout.FloatField(prop.f, valueWidth);
                        }
                        else if (scheme.type == SrpgPropertyScheme.PropType.String)
                        {
                            prop.s = EditorGUILayout.TextField(prop.s, valueWidth);
                        }
                        else
                        {
                            Debug.LogError("Wrong type property!");
                        }
                    }
                }
                EditorGUILayout.EndHorizontal();
            }

            if (GUILayout.Button("Apply to same tiles"))
            {
                SrpgTile[] layerTiles = parentLayer.GetComponentsInChildren <SrpgTile>();
                foreach (SrpgTile tile in layerTiles)
                {
                    if (tile == _target)
                    {
                        continue;
                    }

                    if (tile.IsSameTile(_target))
                    {
                        tile.CopyProperties(_target.properties);
                    }
                }
            }
        }
        EditorGUILayout.EndVertical();
    }
Beispiel #16
0
 private int CalcZIndex(SrpgLayer layer, int y)
 {
     return(CalcZIndex(layer.zIndexStart, _mapHeight, y));
 }
Beispiel #17
0
 void OnEnable()
 {
     _target = (SrpgLayer)target;
 }