コード例 #1
0
 protected void DestroyHidden(GameObject go, bool forceImmediate) {
     if (forceImmediate) {
         GameObject.DestroyImmediate(go);
     } else {
         MadGameObject.SafeDestroy(go);
     }
 }
コード例 #2
0
ファイル: EnergyBarUGUIBase.cs プロジェクト: DevZhav/error
        public static T CreateChild <T>(Transform parent, string name, bool disabled = false) where T : Component
        {
            GameObject go;

            if (parent is RectTransform)
            {
                go = new GameObject(name, typeof(RectTransform));
            }
            else
            {
                go = new GameObject(name);
            }
            if (disabled)
            {
                MadGameObject.SetActive(go, false);
            }

            go.transform.SetParent(parent);
            go.transform.localRotation = Quaternion.identity;
            go.transform.localScale    = Vector3.one;
            go.transform.localPosition = Vector3.zero;
            T obj = go.GetComponent <T>();

            if (obj == null)
            {
                obj = go.AddComponent <T>();
            }
            if (MadTransform.registerUndo)
            {
                MadUndo.RegisterCreatedObjectUndo(go, "Created " + name);
            }
            return(obj);
        }
コード例 #3
0
    protected override void Rebuild() {
        base.Rebuild();

        // remove all hidden child sprites
        var hidden = MadTransform.FindChildren<MadSprite>(
            transform, (s) => s.gameObject.hideFlags == HideFlags.HideInHierarchy);
        for (int i = 0; i < hidden.Count; ++i) {
            MadGameObject.SafeDestroy(hidden[i].gameObject);
        }
    
        int nextDepth = guiDepth * DepthSpace;
        
        // build background
        nextDepth = BuildBackgroundTextures(nextDepth);

        // build the bar        
        if (textureBar != null) {
            if (effectBurn) {
                spriteBurnBar = CreateHidden<MadSprite>("bar_effect_burn");
                spriteBurnBar.guiDepth = nextDepth++;

                if (TextureValid(effectBurnTextureBar, atlasEffectBurnTextureBarGUID)) {
                    SetTexture(spriteBurnBar, effectBurnTextureBar, atlasEffectBurnTextureBarGUID);
                } else {
                    SetTexture(spriteBurnBar, textureBar, atlasTextureBarGUID);
                }
                
                spriteBurnBar.fillType = ToFillType(growDirection);
                spriteBurnBar.radialFillOffset = radialOffset;
                spriteBurnBar.radialFillLength = radialLength;
            }
        
            spriteBar = CreateHidden<MadSprite>("bar");
            spriteBar.guiDepth = nextDepth++;

            SetTexture(spriteBar, textureBar, atlasTextureBarGUID);
            
            spriteBar.fillType = ToFillType(growDirection);
            spriteBar.radialFillOffset = radialOffset;
            spriteBar.radialFillLength = radialLength;
        }
        
        // build foreground textures
        nextDepth = BuildForegroundTextures(nextDepth);
        
        // follow effect
        if (effectFollow) {
            if (effectFollowObject != null && effectFollowObject is Texture2D) {
                effectFollowSprite = CreateHidden<MadSprite>("bar_effect_follow");
                effectFollowSprite.texture = effectFollowObject as Texture2D;
                effectFollowSprite.guiDepth = nextDepth++;
            }
        }
        
        nextDepth = RebuildLabel(nextDepth);

        UpdateContainer();
    }
コード例 #4
0
        protected void FieldLabel()
        {
            bool classic = labelFont == null; // true if classic GUI version

            MadGUI.PropertyFieldToggleGroup2(labelEnabled, "Draw Label", () => {
                MadGUI.Indent(() => {
                    if (classic)
                    {
                        EditorGUILayout.PropertyField(labelSkin, new GUIContent("Label Skin"));
                    }
                    else
                    {
                        MadGUI.PropertyField(labelFont, "Label Font", MadGUI.ObjectIsSet);
                        MadGUI.PropertyField(labelScale, "Label Scale");
                    }

                    labelPosition.vector2Value = EditorGUILayout.Vector2Field("Label Position", labelPosition.vector2Value);
                    var t = target as EnergyBarBase;
                    if (MadGameObject.IsActive(t.gameObject))
                    {
                        var rect = t.DrawAreaRect;
                        PropertySpecialNormalized(labelPosition, labelPositionNormalized, new Vector2(rect.width, rect.height));
                    }

                    if (labelPivot != null)
                    {
                        MadGUI.PropertyField(labelPivot, "Pivot Point");
                    }

                    EditorGUILayout.PropertyField(labelFormat, new GUIContent("Label Format"));

                    if (MadGUI.Foldout("Label Format Help", false))
                    {
                        EditorGUILayout.HelpBox(FormatHelp, MessageType.None);
                    }

                    EditorGUILayout.PropertyField(labelColor, new GUIContent("Label Color"));

                    if (classic)
                    {
                        MadGUI.PropertyFieldToggleGroup2(labelOutlineEnabled, "Label Outline", () => {
                            MadGUI.Indent(() => {
                                EditorGUILayout.PropertyField(labelOutlineColor, new GUIContent("Outline Color"));
                            });
                        });
                    }
                });
            });
        }
コード例 #5
0
    protected override void Rebuild() {
        base.Rebuild();

        // remove used sprites
        if (objectSprite != null) {
            MadGameObject.SafeDestroy(objectSprite.gameObject);
        }

        int nextDepth = guiDepth * DepthSpace;

        nextDepth = BuildBackgroundTextures(nextDepth);
        nextDepth = BuildObject(nextDepth);
        nextDepth = BuildForegroundTextures(nextDepth);
        nextDepth = RebuildLabel(nextDepth);

        UpdateContainer();
    }
コード例 #6
0
    protected void RemoveCreatedChildren() {
        for (int i = 0; i < createdChildren.Count; ++i) {
            MadGameObject.SafeDestroy(createdChildren[i]);
        }

        // scan for generated children that were not removed
        // this is needed when user performs an undo operation
        var existingChildren = MadTransform.FindChildren<Transform>(transform, c => c.name.StartsWith("generated_"), 0);
        for (int i = 0; i < existingChildren.Count; i++) {
            var child = existingChildren[i];
            MadGameObject.SafeDestroy(child.gameObject);
        }

        createdChildren.Clear();
        backgroundBinds.Clear();
        foregroundBinds.Clear();
    }
コード例 #7
0
    protected virtual void Rebuild() {
#if MAD_DEBUG
        Debug.Log("rebuilding " + this, this);
#endif

        spriteObjectsBg.Clear();
        spriteObjectsFg.Clear();

        DestroyAllHidden();

        // as a precaution I will search for hidden sprites at level 0
        var hidden = MadTransform.FindChildren<MadSprite>(transform, (s) => (s.hideFlags | HideFlags.HideInHierarchy) != 0, 0);
        if (hidden.Count > 0) {
            Debug.Log("There were " + hidden.Count + " hidden unmanaged sprites under this bar. I will remove them.");
            for (int i = 0; i < hidden.Count; ++i) {
                MadGameObject.SafeDestroy(hidden[i].gameObject);
            }
        }
    }
コード例 #8
0
 protected int RebuildLabel(int depth) {
     if (labelSprite != null) {
         MadGameObject.SafeDestroy(labelSprite.gameObject);
     }
     
     if (labelEnabled && labelFont != null) {
         labelSprite = MadTransform.CreateChild<MadText>(transform, "label");
         labelSprite.font = labelFont;
         labelSprite.guiDepth = depth++;
         
         #if !MAD_DEBUG
         labelSprite.gameObject.hideFlags = HideFlags.HideInHierarchy;
         #endif
     }
     
     // after build we must update label at least once to make it visible
     UpdateLabel();
     
     return depth;
 }
コード例 #9
0
    protected T CreateHidden<T>(string name, Transform parent = null) where T : Component {
        if (container == null) {
            // create container
            container = new GameObject("_container").transform;

#if !MAD_DEBUG
            container.gameObject.hideFlags = HideFlags.HideAndDontSave;
#else
            container.gameObject.hideFlags = HideFlags.DontSave;
#endif
        }

        if (parent == null) {
            parent = container;
        }

        var obj = MadTransform.CreateChild<T>(parent, name, true);

        // if created object is mad sprite, then assign the panel
        if (obj is MadSprite) {
            var sprite = obj as MadSprite;
            sprite.panel = panel;

            if (obj.GetType() == typeof(MadSprite)) {
                sprite.hasPremultipliedAlpha = premultipliedAlpha;
            }
        }

        MadGameObject.SetActive(obj.gameObject, true);

        #if !MAD_DEBUG
        obj.gameObject.hideFlags = HideFlags.HideAndDontSave;
        #else
        obj.gameObject.hideFlags = HideFlags.DontSave;
        #endif

        hiddenObjects.Insert(0, obj.gameObject);

        return obj;
    }
コード例 #10
0
    protected virtual void Rebuild() {
#if MAD_DEBUG
        Debug.Log("rebuilding " + this, this);
#endif

        if (spriteObjectsBg.Count == 0 && spriteObjectsFg.Count == 0) {
            // in previous version sprites were created without reference in spriteObjects
            // is spriteObjects is empty it's better to assume, that references are not created yet
            // and background objects may exist
            var children = MadTransform.FindChildren<MadSprite>(transform,
                    (s) => s.name.StartsWith("bg_") || s.name.StartsWith("fg_") || s.name == "label",
                    0);
            foreach (var child in children) {
                MadGameObject.SafeDestroy(child.gameObject);
            }
        } else {
            spriteObjectsBg.Clear();
            spriteObjectsFg.Clear();
        }

        DestroyAllHidden();
    }
コード例 #11
0
 void RemoveSprite(MadSprite sprite) {
     if (sprite != null) {
         MadGameObject.SafeDestroy(sprite.gameObject);
     }
 }
コード例 #12
0
    void Rebuild() {
#if MAD_DEBUG
        Debug.Log("rebuilding " + this, this);
#endif
    
        if (spriteObjectsBg.Count == 0 && spriteObjectsFg.Count == 0) {
            // in previous version sprites were created without reference in spriteObjects
            // is spriteObjects is empty it's better to assume, that references are not created yet
            // and background objects may exist
            var children = MadTransform.FindChildren<MadSprite>(transform,
                (s) => s.name.StartsWith("bg_") || s.name.StartsWith("fg_") || s.name == "label",
                0);
            foreach (var child in children) {
                MadGameObject.SafeDestroy(child.gameObject);
            }
        } else {
            foreach (var sprite in spriteObjectsBg) {
                if (sprite != null) {
                    MadGameObject.SafeDestroy(sprite.gameObject);
                }
            }
            
            foreach (var sprite in spriteObjectsFg) {
                if (sprite != null) {
                    MadGameObject.SafeDestroy(sprite.gameObject);
                }
            }
            
            spriteObjectsBg.Clear();
            spriteObjectsFg.Clear();
        }
        
        if (spriteBar != null) {
            MadGameObject.SafeDestroy(spriteBar.gameObject);
        }
        
        if (spriteBurnBar != null) {
            MadGameObject.SafeDestroy(spriteBurnBar.gameObject);
        }
        
        if (effectFollowSprite != null) {
            MadGameObject.SafeDestroy(effectFollowSprite.gameObject);
        }
        
        int nextDepth = BuildTextures(texturesBackground, "bg_", guiDepth * DepthSpace, ref spriteObjectsBg);
        
        if (textureBar != null) {
        
            if (effectBurn) {
                spriteBurnBar = MadTransform.CreateChild<MadSprite>(transform, "bar_effect_burn");
#if !MAD_DEBUG
                spriteBurnBar.gameObject.hideFlags = HideFlags.HideInHierarchy;
#endif
                spriteBurnBar.guiDepth = nextDepth++;
                spriteBurnBar.texture = textureBar;
                
                spriteBurnBar.fillType = ToFillType(growDirection);
            }
        
            spriteBar = MadTransform.CreateChild<MadSprite>(transform, "bar");
#if !MAD_DEBUG
            spriteBar.gameObject.hideFlags = HideFlags.HideInHierarchy;
#endif
            spriteBar.guiDepth = nextDepth++;
            spriteBar.texture = textureBar;
            
            spriteBar.fillType = ToFillType(growDirection);
        }
        
        nextDepth = BuildTextures(texturesForeground, "fg_", nextDepth, ref spriteObjectsFg);
        
        if (effectFollow) {
            if (effectFollowObject != null && effectFollowObject is Texture2D) {
                effectFollowSprite = MadTransform.CreateChild<MadSprite>(transform, "bar_effect_follow");
                effectFollowSprite.texture = effectFollowObject as Texture2D;
                effectFollowSprite.guiDepth = nextDepth++;
                #if !MAD_DEBUG
                effectFollowSprite.gameObject.hideFlags = HideFlags.HideInHierarchy;
                #endif
            }
        }
        
        nextDepth = RebuildLabel(nextDepth);
    }