Пример #1
0
    public SrpgPropertyImpl AddProperty(string name)
    {
        SrpgPropertyImpl prop = new SrpgPropertyImpl(name);

        _properties.Add(prop);
        return(prop);
    }
Пример #2
0
 public void CopyValuesTo(SrpgPropertyImpl other)
 {
     other.b = _b;
     other.n = _n;
     other.f = _f;
     other.s = _s;
 }
Пример #3
0
    public void CopyProperties(List <SrpgPropertyImpl> srcProperties)
    {
        _properties.Clear();

        foreach (SrpgPropertyImpl srcProp in srcProperties)
        {
            SrpgPropertyImpl newProp = new SrpgPropertyImpl(srcProp.name);
            srcProp.CopyValuesTo(newProp);
            _properties.Add(newProp);
        }
    }
Пример #4
0
    public override bool IsTileWalkable(SrpgTile tile)
    {
        SrpgPropertyImpl prop = null;

        if (tile.TryGetProperty("Walkable", out prop))
        {
            if (!prop.b)
            {
                return(false);
            }
        }

        return(true);
    }
Пример #5
0
    //public virtual bool IsTileWalkable()
    //{

    //}

    public bool TryGetProperty(string name, out SrpgPropertyImpl outProp)
    {
        outProp = null;

        foreach (SrpgPropertyImpl prop in _properties)
        {
            if (prop.name == name)
            {
                outProp = prop;
                return(true);
            }
        }

        return(false);
    }
Пример #6
0
    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();
    }