protected virtual void DrawEntityStatusUIContent(ICEWorldEntityStatusUI _ui)
        {
            if (_ui == null)
            {
                return;
            }


            WorldObjectEditor.DrawEntityStatusDisplayObject(_ui, _ui.StatusUI, m_HeaderType);
        }
Example #2
0
        /// <summary>
        /// Draws the target group message.
        /// </summary>
        /// <param name="_control">Control.</param>
        /// <param name="_target">Target.</param>
        /// <param name="_title">Title.</param>
        /// <param name="_help">Help.</param>
        public static void DrawTargetGroupMessage(ICECreatureControl _control, TargetObject _target, string _title = "", string _hint = "", string _help = "")
        {
            if (_control == null || _target == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(_title))
            {
                _title = "Creature Messages";
            }
            if (string.IsNullOrEmpty(_hint))
            {
                _hint = "";
            }
            if (string.IsNullOrEmpty(_help))
            {
                _help = Info.TARGET_INFLUENCES;
            }

            ICEEditorLayout.BeginHorizontal();

            WorldObjectEditor.DrawObjectHeaderLine(_target.GroupMessage, EditorHeaderType.FOLDOUT_ENABLED, _title, _hint);

            ICEEditorLayout.EndHorizontal(_help);



            // CONTENT BEGIN
            if (WorldObjectEditor.BeginObjectContentOrReturn(EditorHeaderType.FOLDOUT_ENABLED, _target.GroupMessage))
            {
                return;
            }

            _target.GroupMessage.Type = (BroadcastMessageType)ICEEditorLayout.EnumPopup("Group Message", "", _target.GroupMessage.Type, Info.TARGET_GROUP_MESSAGE);


            if (_target.GroupMessage.Type == BroadcastMessageType.COMMAND)
            {
                EditorGUI.indentLevel++;
                _target.GroupMessage.Command = ICEEditorLayout.Text("Command", "Command", _target.GroupMessage.Command, Info.TARGET_GROUP_MESSAGE_COMMAND).ToUpper();

                EditorGUI.indentLevel--;
            }

            WorldObjectEditor.EndObjectContent();
            // CONTENT END
        }
Example #3
0
        private static void DrawStatusBasics(ICECreatureControl _control)
        {
            _control.Creature.Status.Enabled = true;

            if (!_control.Display.ShowStatus)
            {
                return;
            }

            EditorGUI.indentLevel++;
            ICEEditorLayout.BeginHorizontal();
            _control.Display.FoldoutStatusBasics = ICEEditorLayout.Foldout(_control.Display.FoldoutStatusBasics, "Basics");
            ICEEditorLayout.EndHorizontal(Info.STATUS_BASICS);

            if (_control.Display.FoldoutStatusBasics)
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.Separator();
                CreatureObjectEditor.DrawInitialDurability(_control.Creature.Status);

                //EditorGUI.BeginDisabledGroup(  _control.Creature.Status.UseAdvanced == true );
                //	CreatureObjectEditor.DrawDurabilitySlider( _control.Creature.Status );
                //EditorGUI.EndDisabledGroup();

                EditorGUI.BeginDisabledGroup(_control.Creature.Status.IsDestructible == false);
                EditorGUI.indentLevel++;
                if (_control.Creature.Status.UseAdvanced)
                {
                    _control.Creature.Status.DamageInPercent   = ICEEditorLayout.DefaultSlider("Damage", "", _control.Creature.Status.DamageInPercent, 0.025f, 0, 100, 0, Info.STATUS_DAMAGE_IN_PERCENT);
                    _control.Creature.Status.StressInPercent   = ICEEditorLayout.DefaultSlider("Stress", "", _control.Creature.Status.StressInPercent, 0.025f, 0, 100, 0, Info.STATUS_STRESS_IN_PERCENT);
                    _control.Creature.Status.DebilityInPercent = ICEEditorLayout.DefaultSlider("Debility", "", _control.Creature.Status.DebilityInPercent, 0.025f, 0, 100, 0, Info.STATUS_DEBILITY_IN_PERCENT);
                    _control.Creature.Status.HungerInPercent   = ICEEditorLayout.DefaultSlider("Hunger", "", _control.Creature.Status.HungerInPercent, 0.025f, 0, 100, 0, Info.STATUS_HUNGER_IN_PERCENT);
                    _control.Creature.Status.ThirstInPercent   = ICEEditorLayout.DefaultSlider("Thirst", "", _control.Creature.Status.ThirstInPercent, 0.025f, 0, 100, 0, Info.STATUS_THIRST_IN_PERCENT);

                    EditorGUILayout.Separator();

                    _control.Creature.Status.Aggressivity = ICEEditorLayout.DefaultSlider("Aggressivity", "", _control.Creature.Status.Aggressivity, 0.025f, 0, 100, _control.Creature.Status.DefaultAggressivity, Info.STATUS_INFLUENCES_AGGRESSIVITY);
                    _control.Creature.Status.Experience   = ICEEditorLayout.DefaultSlider("Experience", "", _control.Creature.Status.Experience, 0.025f, 0, 100, _control.Creature.Status.DefaultExperience, Info.STATUS_INFLUENCES_EXPERIENCE);
                    _control.Creature.Status.Nosiness     = ICEEditorLayout.DefaultSlider("Nosiness", "", _control.Creature.Status.Nosiness, 0.025f, 0, 100, _control.Creature.Status.DefaultNosiness, Info.STATUS_INFLUENCES_NOSINESS);
                    _control.Creature.Status.Anxiety      = ICEEditorLayout.DefaultSlider("Anxiety", "", _control.Creature.Status.Anxiety, 0.025f, 0, 100, _control.Creature.Status.DefaultAnxiety, Info.STATUS_INFLUENCES_ANXIETY);
                }
                else
                {
                    _control.Creature.Status.DamageInPercent = ICEEditorLayout.Slider("Damage", "", _control.Creature.Status.DamageInPercent, Init.DECIMAL_PRECISION, 0, 100, Info.STATUS_DAMAGE_IN_PERCENT);
                }

                EditorGUILayout.Separator();
                CreatureObjectEditor.DrawDamageTransfer(_control.Creature.Status, Info.STATUS_DAMAGE_TRANSFER_MULTIPLIER);
                EditorGUI.indentLevel--;
                EditorGUI.EndDisabledGroup();


                EditorGUILayout.Separator();
                CreatureObjectEditor.DrawStatusMass(_control.Creature.Status);

                ICEEditorLayout.MinMaxDefaultSlider("Perception Time (secs.)", "",
                                                    ref _control.Creature.Status.PerceptionTimeMin,
                                                    ref _control.Creature.Status.PerceptionTimeMax,
                                                    0,
                                                    10,
                                                    0.4f,
                                                    0.6f,
                                                    Init.DECIMAL_PRECISION_TIMER,
                                                    40,
                                                    Info.STATUS_PERCEPTION_TIME);

                if (_control.Creature.Status.UseAdvanced)
                {
                    EditorGUI.indentLevel++;
                    _control.Creature.Status.PerceptionTimeFitnessMultiplier = ICEEditorLayout.DefaultSlider("Fitness Multiplier (inv. +)", "", _control.Creature.Status.PerceptionTimeFitnessMultiplier, 0.025f, 0, 1, 0.3f, Info.STATUS_REACTION_TIME_MULTIPLIER);
                    EditorGUI.indentLevel--;
                }

                ICEEditorLayout.MinMaxDefaultSlider("Reaction Time (secs.)", "",
                                                    ref _control.Creature.Status.ReactionTimeMin,
                                                    ref _control.Creature.Status.ReactionTimeMax,
                                                    0,
                                                    2,
                                                    0.1f,
                                                    0.2f,
                                                    Init.DECIMAL_PRECISION_TIMER,
                                                    40,
                                                    Info.STATUS_REACTION_TIME);

                EditorGUILayout.Separator();

                ICEEditorLayout.MinMaxRandomDefaultSlider("Recovery Phase (secs.)", "Defines how long the creature will be defenceless after spawning.", ref _control.Creature.Status.RecoveryPhaseMin, ref _control.Creature.Status.RecoveryPhaseMax, 0, ref _control.Creature.Status.RecoveryPhaseMaximum, 0.01f, 0.1f, Init.DECIMAL_PRECISION_TIMER, 30, Info.STATUS_RECOVERY_PHASE);
                ICEEditorLayout.MinMaxRandomDefaultSlider("Removing Delay (secs.)", "Defines how long the creature will be visible after dying and before respawning.", ref _control.Creature.Status.RemovingDelayMin, ref _control.Creature.Status.RemovingDelayMax, 0, ref _control.Creature.Status.RemovingDelayMaximum, 0, 0, Init.DECIMAL_PRECISION_TIMER, 30, Info.STATUS_REMOVING_DELAY);

                EditorGUILayout.Separator();
                _control.Creature.Status.FitnessRecreationLimit = ICEEditorLayout.DefaultSlider("Recreation Limit (%)", "If the fitness value reached this limit your creature will go home to recreate.", _control.Creature.Status.FitnessRecreationLimit, 0.5f, 0, 100, 0, Info.STATUS_FITNESS_RECREATION_LIMIT);
                _control.Creature.Status.FitnessVitalityLimit   = ICEEditorLayout.DefaultSlider("Vitality Limit (%)", "If the fitness value reached this limit your creature will be to weak for further activities.", _control.Creature.Status.FitnessVitalityLimit, 0.5f, 0, 100, 0, Info.STATUS_FITNESS_VITALITY_LIMIT);

                EditorGUILayout.Separator();

                // ODOUR BEGIN
                CreatureObjectEditor.DrawOdourObject(_control.Creature.Status.Odour);
                // ODOUR END

                // GENDER BEGIN
                _control.Creature.Status.GenderType = (CreatureGenderType)ICEEditorLayout.EnumPopup("Gender", "", _control.Creature.Status.GenderType, Info.STATUS_GENDER);
                // GENDER END

                // TROPHIC LEVEL BEGIN
                ICEEditorLayout.BeginHorizontal();
                _control.Creature.Status.TrophicLevel = (TrophicLevelType)ICEEditorLayout.EnumPopup("Trophic Level", "", _control.Creature.Status.TrophicLevel);
                if (ICEEditorLayout.RandomButton(""))
                {
                    _control.Creature.Status.CalculateRandomStatusValues(_control.Creature.Status.TrophicLevel);
                }
                _control.Creature.Status.UseDynamicInitialisation = ICEEditorLayout.CheckButtonSmall("DYN", "", _control.Creature.Status.UseDynamicInitialisation);
                ICEEditorLayout.EndHorizontal(Info.STATUS_FEEDTYPE);
                EditorGUI.indentLevel++;
                if (_control.Creature.Status.TrophicLevel == TrophicLevelType.OMNIVORES || _control.Creature.Status.TrophicLevel == TrophicLevelType.CARNIVORE)
                {
                    _control.Creature.Status.IsCannibal = ICEEditorLayout.Toggle("Is Cannibal", "", _control.Creature.Status.IsCannibal, Info.STATUS_FEEDTYPE_CANNIBAL);
                }
                else
                {
                    _control.Creature.Status.IsCannibal = false;
                }
                EditorGUI.indentLevel--;
                // TROPHIC LEVEL END

                EditorGUILayout.Separator();

                WorldObjectEditor.DrawStatusAging(_control.Creature.Status);


                _control.Creature.Status.UseEnvironmentTemperature = ICEEditorLayout.Toggle("Use Environment Temperature", "", _control.Creature.Status.UseEnvironmentTemperature, Info.STATUS_TEMPERATURE);
                if (_control.Creature.Status.UseEnvironmentTemperature)
                {
                    EditorGUI.indentLevel++;
                    _control.Creature.Status.ComfortEnvironmentTemperature = ICEEditorLayout.Slider("Comfort Environment Temperature", "", _control.Creature.Status.ComfortEnvironmentTemperature, 1, _control.Creature.Status.MinEnvironmentTemperature, _control.Creature.Status.MaxEnvironmentTemperature, Info.STATUS_TEMPERATURE_BEST);
                    EditorGUI.indentLevel++;
                    ICEEditorLayout.MinMaxSlider("Temperature Scope", "Minimal and maximal Temperatures",
                                                 ref _control.Creature.Status.MinEnvironmentTemperature,
                                                 ref _control.Creature.Status.MaxEnvironmentTemperature,
                                                 _control.Creature.Status.EnvironmentMinTemperature,
                                                 _control.Creature.Status.EnvironmentMaxTemperature,
                                                 1,
                                                 40,
                                                 Info.STATUS_TEMPERATURE_SCOPE);
                    EditorGUI.indentLevel--;
                    EditorGUI.indentLevel--;

                    EditorGUILayout.Separator();
                }

                _control.Creature.Status.UseArmor = ICEEditorLayout.Toggle("Use Armor", "", _control.Creature.Status.UseArmor, Info.STATUS_ARMOR);
                if (_control.Creature.Status.UseArmor)
                {
                    EditorGUI.indentLevel++;
                    _control.Creature.Status.ArmorInPercent = ICEEditorLayout.DefaultSlider("Armor", "", _control.Creature.Status.ArmorInPercent, 1, 0, 100, 100, Info.STATUS_ARMOR_IN_PERCENT);
                    EditorGUI.indentLevel--;
                }

                _control.Creature.Status.UseShelter = ICEEditorLayout.Toggle("Use Shelter", "", _control.Creature.Status.UseShelter, Info.STATUS_SHELTER);
                if (_control.Creature.Status.UseShelter)
                {
                    EditorGUI.indentLevel++;
                    if (_control.Creature.Status.IsSheltered)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    _control.Creature.Status.ShelterTag = ICEEditorLayout.Tag("Shelter Tag", "", _control.Creature.Status.ShelterTag, Info.STATUS_SHELTER_TAG);
                    GUI.backgroundColor = ICEEditorLayout.DefaultBackgroundColor;
                    EditorGUI.indentLevel--;
                    EditorGUILayout.Separator();
                }

                _control.Creature.Status.UseIndoor = ICEEditorLayout.Toggle("Use Indoor", "", _control.Creature.Status.UseIndoor, Info.STATUS_INDOOR);
                if (_control.Creature.Status.UseIndoor)
                {
                    EditorGUI.indentLevel++;
                    if (_control.Creature.Status.IsIndoor)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    _control.Creature.Status.IndoorTag = ICEEditorLayout.Tag("Indoor Tag", "", _control.Creature.Status.IndoorTag, Info.STATUS_INDOOR_TAG);
                    GUI.backgroundColor = ICEEditorLayout.DefaultBackgroundColor;
                    EditorGUI.indentLevel--;
                    EditorGUILayout.Separator();
                }



                EditorGUI.indentLevel--;

                EditorGUILayout.Separator();
            }
            EditorGUI.indentLevel--;
        }
Example #4
0
 public virtual void DrawCameraContent(ICEWorldCamera _target)
 {
     WorldObjectEditor.DrawUnderwaterCameraEffect(_target, _target.Underwater, m_HeaderType);
 }
Example #5
0
        public static void DrawAnimationDataObject(ICEWorldBehaviour _component, AnimationDataObject _anim, EditorHeaderType _type, string _help = "", string _title = "", string _hint = "", List <AnimationDataObject> _list = null)
        {
            if (_anim == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(_title))
            {
                _title = "Animation";
            }
            if (string.IsNullOrEmpty(_hint))
            {
                _hint = "";
            }
            if (string.IsNullOrEmpty(_help))
            {
                _help = Info.ANIMATION;
            }

            //--------------------------------------------------
            // ANIMATION
            //--------------------------------------------------

            bool _enabled = _anim.Enabled;

            //_anim.Enabled = (_anim.InterfaceType != AnimationInterfaceType.NONE?true:false);

            ICEEditorLayout.BeginHorizontal();

            if (WorldObjectEditor.IsEnabledFoldoutType(_type))
            {
                EditorGUI.BeginDisabledGroup(_anim.Enabled == false);
            }

            WorldObjectEditor.DrawObjectHeaderLine(_anim, WorldObjectEditor.GetSimpleFoldout(_type), _title, _hint);
            GUILayout.FlexibleSpace();
            //EditorGUI.BeginDisabledGroup( _anim.Enabled == false );
            _anim.AllowInterfaceSelector = !ICEEditorLayout.CheckButtonMiddle("AUTO", "Automatic Interface Selection", !_anim.AllowInterfaceSelector);
            //EditorGUI.EndDisabledGroup();

            if (_list != null && _list.Count > 1)
            {
                if (ICEEditorLayout.Button("SHARE", "Use this move settings for all associated rules"))
                {
                    foreach (AnimationDataObject _data in _list)
                    {
                        _data.Copy(_anim);
                    }
                }
            }

            if (WorldObjectEditor.IsEnabledFoldoutType(_type))
            {
                EditorGUI.EndDisabledGroup();
                _anim.Enabled = ICEEditorLayout.EnableButton(_anim.Enabled);
            }

            ICEEditorLayout.EndHorizontal(_help);

            if (_enabled != _anim.Enabled && _anim.Enabled == true)
            {
                _anim.Foldout = true;
            }



            // CONTENT BEGIN
            if (WorldObjectEditor.BeginObjectContentOrReturn(_type, _anim))
            {
                return;
            }

            if ((_component.GetComponentInChildren <Animator>() != null && _component.GetComponentInChildren <Animation>() != null) || _anim.AllowInterfaceSelector)
            {
                if (_anim.InterfaceType == AnimationInterfaceType.NONE && _component.GetComponentInChildren <Animator>() != null && _component.GetComponentInChildren <Animator>().runtimeAnimatorController != null)
                {
                    _anim.InterfaceType = AnimationInterfaceType.MECANIM;
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.NONE)
                {
                    _anim.InterfaceType = AnimationInterfaceType.LEGACY;
                }

                _help = Info.ANIMATION_NONE;
                if (_anim.InterfaceType == AnimationInterfaceType.MECANIM)
                {
                    _help = Info.ANIMATION_ANIMATOR;
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.LEGACY)
                {
                    _help = Info.ANIMATION_ANIMATION;
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.CLIP)
                {
                    _help = Info.ANIMATION_CLIP;
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.CUSTOM)
                {
                    _help = Info.ANIMATION_CUSTOM;
                }

                _anim.InterfaceType = (AnimationInterfaceType)ICEEditorLayout.EnumPopup("Interface", "", _anim.InterfaceType, _help);
            }
            else if (_component.GetComponentInChildren <Animator>())
            {
                _anim.InterfaceType = AnimationInterfaceType.MECANIM;
            }
            else
            {
                _anim.InterfaceType = AnimationInterfaceType.LEGACY;
            }

            if (_anim.InterfaceType != AnimationInterfaceType.NONE)
            {
                if (_anim.InterfaceType == AnimationInterfaceType.MECANIM)
                {
                    _anim.Animator = DrawBehaviourAnimationAnimatorData(_component, _anim.Animator);
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.LEGACY)
                {
                    _anim.Animation = DrawBehaviourAnimationAnimationData(_component, _anim.Animation);
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.CLIP)
                {
                    _anim.Clip = DrawBehaviourAnimationAnimationClipData(_component, _anim.Clip);
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.CUSTOM)
                {
                    Info.Help(_help);
                }

                if (_anim.InterfaceType == AnimationInterfaceType.MECANIM && _anim.Animator.Type == AnimatorControlType.DIRECT)
                {
                    DrawAnimationEventData(_component, _anim.Events, AnimationTools.GetAnimationClipByAnimatorAndName(AnimationTools.TryGetAnimatorComponent(_component.gameObject), _anim.GetAnimationName()), EditorHeaderType.FOLDOUT_ENABLED);
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.LEGACY)
                {
                    DrawAnimationEventData(_component, _anim.Events, AnimationTools.GetAnimationClipByName(AnimationTools.TryGetAnimationComponent(_component.gameObject), _anim.GetAnimationName()), EditorHeaderType.FOLDOUT_ENABLED);
                }
                else if (_anim.InterfaceType == AnimationInterfaceType.CLIP)
                {
                    DrawAnimationEventData(_component, _anim.Events, _anim.Clip.Clip, EditorHeaderType.FOLDOUT_ENABLED);
                }
            }
            else
            {
                Info.Help(Info.ANIMATION_NONE);
            }

            WorldObjectEditor.EndObjectContent();
            // CONTENT END
        }
Example #6
0
        public void DrawWorldPlayerContect(ICEWorldPlayerController _player)
        {
            /*
             * if( Application.isPlaying == false )
             * {
             *      _controller.transform.position = new Vector3(
             *              _controller.transform.position.x,
             *              PositionTools.GetGroundLevel( _controller.transform.position, Groudc , GroundLayerMask );
             *              ICECreatureRegister.Instance.GetGroundLevel(_controller.transform.position),
             *              _controller.transform.position.z );
             * }*/

            EditorGUILayout.Separator();
            ICEEditorLayout.Label("Movement", true);
            EditorGUI.indentLevel++;
            _player.WalkSpeed = ICEEditorLayout.DefaultSlider("Walk Speed", "", _player.WalkSpeed, 0.025f, 0, 25, 3, "");
            _player.RunSpeed  = ICEEditorLayout.DefaultSlider("Run Speed", "", _player.RunSpeed, 0.025f, 0, 25, 7, "");
            EditorGUI.indentLevel++;
            _player.RunstepLenghten = ICEEditorLayout.DefaultSlider("Runstep Lenghten", "", _player.RunstepLenghten, 0.025f, 0, 25, 7, "");
            EditorGUI.indentLevel--;
            _player.JumpSpeed = ICEEditorLayout.DefaultSlider("Jump Speed", "", _player.JumpSpeed, 0.025f, 0, 100, 25, "");
            EditorGUI.indentLevel++;
            _player.StickToGroundForce = ICEEditorLayout.DefaultSlider("Stick To Ground Force", "", _player.StickToGroundForce, 0.025f, 0, 25, 7, "");
            _player.GravityMultiplier  = ICEEditorLayout.DefaultSlider("Gravity", "", _player.GravityMultiplier, 0.025f, 0, 100, 9.825f, "");
            EditorGUI.indentLevel--;
            EditorGUI.indentLevel--;

            EditorGUILayout.Separator();
            ICEEditorLayout.Label("Sounds", true);
            EditorGUI.indentLevel++;
            ICEEditorLayout.Label("Footsteps", false);
            EditorGUI.indentLevel++;

            Keyframe[] _keys = new Keyframe[3];
            _keys[0] = new Keyframe(0, 0f);
            _keys[1] = new Keyframe(_player.WalkSpeed, 0.6f);
            _keys[2] = new Keyframe(_player.RunSpeed, 0.3f);

            _player.Interval = ICEEditorLayout.DefaultCurve("Footstep Interval", "", _player.Interval, new AnimationCurve(_keys));
            for (int _i = 0; _i < _player.FootstepSounds.Count; _i++)
            {
                AudioClip _clip = _player.FootstepSounds[_i];
                _clip = (AudioClip)EditorGUILayout.ObjectField("Footstep Clip #" + _i, _clip, typeof(AudioClip), false);
                if (_clip == null)
                {
                    _player.FootstepSounds.RemoveAt(_i);
                    return;
                }
            }
            AudioClip _new_clip = (AudioClip)EditorGUILayout.ObjectField("Add Footstep Clip", null, typeof(AudioClip), false);

            if (_new_clip != null)
            {
                _player.FootstepSounds.Add(_new_clip);
            }
            EditorGUI.indentLevel--;



            EditorGUILayout.Separator();
            _player.JumpSound = (AudioClip)EditorGUILayout.ObjectField("Jump", _player.JumpSound, typeof(AudioClip), false);
            _player.LandSound = (AudioClip)EditorGUILayout.ObjectField("Land", _player.LandSound, typeof(AudioClip), false);                                // the sound played when character touches back on ground.
            EditorGUI.indentLevel--;

            WorldObjectEditor.DrawMouseLookObject(_player.MouseLook, EditorHeaderType.LABEL_BOLD);

            EditorGUILayout.Separator();
            ICEEditorLayout.Label("Debug Mode", true);
            EditorGUI.indentLevel++;
            _player.UseDebugMode  = ICEEditorLayout.Toggle("Enable Debug Mode", "", _player.UseDebugMode, "");
            _player.KeyFlightMode = (KeyCode)ICEEditorLayout.EnumPopup("Toogle Flight Mode", "", _player.KeyFlightMode);
            EditorGUI.indentLevel++;
            _player.KeyUp   = (KeyCode)ICEEditorLayout.EnumPopup("Up", "", _player.KeyUp);
            _player.KeyDown = (KeyCode)ICEEditorLayout.EnumPopup("Down", "", _player.KeyDown);
            _player.FlightSpeedMultiplier = (int)ICEEditorLayout.DefaultSlider("Flight Speed Multiplier", "", _player.FlightSpeedMultiplier, 1, 1, 100, 10, "");
            EditorGUI.indentLevel--;
            EditorGUI.indentLevel--;
        }
        private static void DrawEnvironmentSurfaceSettings(ICECreatureControl _control)
        {
            ICEEditorLayout.BeginHorizontal();
            EditorGUI.BeginDisabledGroup(_control.Creature.Environment.SurfaceHandler.Enabled == false);
            WorldObjectEditor.DrawObjectHeaderLine(ref _control.Creature.Environment.SurfaceHandler.Enabled, ref _control.Creature.Environment.SurfaceHandler.Foldout, EditorHeaderType.FOLDOUT_BOLD, "Surfaces", "");

            EditorGUI.EndDisabledGroup();

            if (ICEEditorLayout.AddButton("Adds a new surface rule"))
            {
                _control.Creature.Environment.SurfaceHandler.Surfaces.Add(new SurfaceDataObject());
                _control.Creature.Environment.SurfaceHandler.Enabled = true;
            }


            if (ICEEditorLayout.SaveButton("Saves surface data to file"))
            {
                CreatureEditorIO.SaveEnvironmentSurfaceToFile(_control.Creature.Environment.SurfaceHandler, _control.gameObject.name);
            }
            if (ICEEditorLayout.LoadButton("Loads surface data  to file"))
            {
                _control.Creature.Environment.SurfaceHandler = CreatureEditorIO.LoadEnvironmentSurfaceFromFile(_control.Creature.Environment.SurfaceHandler);
            }
            if (ICEEditorLayout.ResetButton("Resets the surface data"))
            {
                _control.Creature.Environment.SurfaceHandler.Reset();
            }

            _control.Creature.Environment.SurfaceHandler.Enabled = ICEEditorLayout.EnableButton(_control.Creature.Environment.SurfaceHandler.Enabled);
            ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE);

            if (_control.Creature.Environment.SurfaceHandler.Enabled == true && _control.Creature.Environment.SurfaceHandler.Surfaces.Count == 0)
            {
                _control.Creature.Environment.SurfaceHandler.Surfaces.Add(new SurfaceDataObject());
                _control.Creature.Environment.SurfaceHandler.Foldout = true;
            }

            // CONTENT BEGIN
            if (WorldObjectEditor.BeginObjectContentOrReturn(EditorHeaderType.FOLDOUT_BOLD, _control.Creature.Environment.SurfaceHandler))
            {
                return;
            }

            _control.Creature.Environment.SurfaceHandler.GroundScanInterval = ICEEditorLayout.MaxDefaultSlider("Ground Scan Interval (secs.)", "Defines the interval for the ground check", _control.Creature.Environment.SurfaceHandler.GroundScanInterval, 0.25f, 0, ref _control.Creature.Environment.SurfaceHandler.GroundScanIntervalMaximum, 1, Info.ENVIROMENT_SURFACE_SCAN_INTERVAL);

            for (int i = 0; i < _control.Creature.Environment.SurfaceHandler.Surfaces.Count; ++i)
            {
                // HEADER BEGIN
                SurfaceDataObject _surface = _control.Creature.Environment.SurfaceHandler.Surfaces[i];

                if (_surface.Name == "")
                {
                    _surface.Name = "Surface Rule #" + (i + 1);
                }

                ICEEditorLayout.BeginHorizontal();
                EditorGUI.BeginDisabledGroup(_surface.Enabled == false);
                _surface.Foldout = ICEEditorLayout.Foldout(_surface.Foldout, _surface.Name);
                EditorGUI.EndDisabledGroup();


                if (ICEEditorLayout.ListDeleteButton <SurfaceDataObject>(_control.Creature.Environment.SurfaceHandler.Surfaces, _surface, "Removes the selected surface rule"))
                {
                    if (_control.Creature.Environment.SurfaceHandler.Surfaces.Count == 0)
                    {
                        _control.Creature.Environment.SurfaceHandler.Enabled = false;
                    }

                    return;
                }

                GUILayout.Space(5);
                if (ICEEditorLayout.ListUpDownButtons <SurfaceDataObject>(_control.Creature.Environment.SurfaceHandler.Surfaces, i))
                {
                    return;
                }

                _surface.Enabled = ICEEditorLayout.EnableButton("Activates/deactivates the  the selected surfaces rule", _surface.Enabled);

                ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE);
                // HEADER END

                if (_surface.Foldout)
                {
                    EditorGUI.BeginDisabledGroup(_surface.Enabled == false);
                    ICEEditorLayout.BeginHorizontal();
                    _surface.Name = ICEEditorLayout.Text("Name", "", _surface.Name);
                    if (ICEEditorLayout.ResetButtonSmall())
                    {
                        _surface.Name = "";
                    }
                    ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE_NAME);
                    //_surface.Interval = ICEEditorLayout.DefaultSlider( "Interval", "", _surface.Interval, 0.005f, 0, 30, 1, Info.ENVIROMENT_SURFACE_RULE_INTERVAL );

                    //ICEEditorStyle.SplitterByIndent( EditorGUI.indentLevel + 1 );

                    DrawEnvironmentTextures(_surface);

                    ICEEditorLayout.Label("Procedures", true, Info.ENVIROMENT_SURFACE_RULE_PROCEDURES);
                    EditorGUI.indentLevel++;
                    EditorGUI.BeginDisabledGroup(_surface.Textures.Count == 0);
                    _surface.UseBehaviourModeKey = ICEEditorLayout.Toggle("Behaviour", "", _surface.UseBehaviourModeKey, Info.ENVIROMENT_SURFACE_BEHAVIOUR);
                    if (_surface.UseBehaviourModeKey)
                    {
                        EditorGUI.indentLevel++;
                        _surface.BehaviourModeKey = BehaviourEditor.BehaviourSelect(_control, "Behaviour", "Reaction to this impact", _surface.BehaviourModeKey, "SURFACE_" + _surface.Name.ToUpper(), Info.ENVIROMENT_SURFACE_BEHAVIOUR);
                        EditorGUI.indentLevel--;
                    }
                    EditorHeaderType _header = EditorHeaderType.TOGGLE;
                    CreatureObjectEditor.DrawInfluenceObject(_surface.Influences, _header, _control.Creature.Status.UseAdvanced, _control.Creature.Status.InitialDurabilityMax, Info.ENVIROMENT_SURFACE_INFLUENCES);
                    CreatureObjectEditor.DrawFootstepAudioObject(_surface.Footsteps, _header, Info.ENVIROMENT_SURFACE_AUDIO);
                    CreatureObjectEditor.DrawAudioObject(_surface.Audio, _header, Info.ENVIROMENT_SURFACE_AUDIO);
                    CreatureObjectEditor.DrawEffectObject(_control, _surface.Effect, _header, Info.ENVIROMENT_SURFACE_EFFECT);
                    EditorGUI.EndDisabledGroup();
                    EditorGUI.indentLevel--;
                    EditorGUILayout.Separator();
                    EditorGUI.EndDisabledGroup();
                    ICEEditorStyle.SplitterByIndent(EditorGUI.indentLevel + 1);
                }
            }

            ICEEditorLayout.DrawListAddLine <SurfaceDataObject>(_control.Creature.Environment.SurfaceHandler.Surfaces, new SurfaceDataObject(), false, "Add Surface Rule");

            WorldObjectEditor.EndObjectContent();
            // CONTENT END
        }
        private static void DrawEnvironmentCollisionSettings(ICECreatureControl _control)
        {
            // IMPACT HEADER BEGIN
            ICEEditorLayout.BeginHorizontal();

            EditorGUI.BeginDisabledGroup(_control.Creature.Environment.CollisionHandler.Enabled == false);
            WorldObjectEditor.DrawObjectHeaderLine(ref _control.Creature.Environment.CollisionHandler.Enabled, ref _control.Creature.Environment.CollisionHandler.Foldout, EditorHeaderType.FOLDOUT_BOLD, "Collisions", "");

            _control.Creature.Environment.CollisionHandler.AllowChildCollisions = ICEEditorLayout.CheckButtonSmall("ACC", "Allow Child Collisions", _control.Creature.Environment.CollisionHandler.AllowChildCollisions);
            _control.Creature.Environment.CollisionHandler.UseCollider          = ICEEditorLayout.CheckButtonSmall("COL", "Use Collider events", _control.Creature.Environment.CollisionHandler.UseCollider);
            _control.Creature.Environment.CollisionHandler.UseTrigger           = ICEEditorLayout.CheckButtonSmall("TRI", "Use Trigger events", _control.Creature.Environment.CollisionHandler.UseTrigger);
            EditorGUI.BeginDisabledGroup(_control.GetComponent <CharacterController>() == null);
            _control.Creature.Environment.CollisionHandler.UseCharacterController = ICEEditorLayout.CheckButtonSmall("CON", "Use CharacterController events", _control.Creature.Environment.CollisionHandler.UseCharacterController);
            EditorGUI.EndDisabledGroup();
            GUILayout.Space(5);
            EditorGUI.EndDisabledGroup();

            if (ICEEditorLayout.AddButton("Adds a new collision rule"))
            {
                _control.Creature.Environment.CollisionHandler.Collisions.Add(new CollisionDataObject());
                _control.Creature.Environment.CollisionHandler.Enabled = true;
            }

            if (ICEEditorLayout.SaveButton("Saves collision data to file"))
            {
                CreatureEditorIO.SaveEnvironmentCollisionToFile(_control.Creature.Environment.CollisionHandler, _control.gameObject.name);
            }
            if (ICEEditorLayout.LoadButton("Loads collision data  to file"))
            {
                _control.Creature.Environment.CollisionHandler = CreatureEditorIO.LoadEnvironmentCollisionFromFile(_control.Creature.Environment.CollisionHandler);
            }
            if (ICEEditorLayout.ResetButton("Resets the collision data"))
            {
                _control.Creature.Environment.CollisionHandler.Reset();
            }

            _control.Creature.Environment.CollisionHandler.Enabled = ICEEditorLayout.EnableButton(_control.Creature.Environment.CollisionHandler.Enabled);
            ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_COLLISION);
            // IMPACT HEADER END

            if (_control.Creature.Environment.CollisionHandler.Enabled == true && _control.Creature.Environment.CollisionHandler.Collisions.Count == 0)
            {
                _control.Creature.Environment.CollisionHandler.Collisions.Add(new CollisionDataObject());
                _control.Creature.Environment.CollisionHandler.Foldout = true;
            }

            // CONTENT BEGIN
            if (WorldObjectEditor.BeginObjectContentOrReturn(EditorHeaderType.FOLDOUT_BOLD, _control.Creature.Environment.CollisionHandler))
            {
                return;
            }

            for (int i = 0; i < _control.Creature.Environment.CollisionHandler.Collisions.Count; i++)
            {
                CollisionDataObject _collision = _control.Creature.Environment.CollisionHandler.Collisions[i];

                if (_collision != null)
                {
                    if (_collision.Name.Trim() == "")
                    {
                        _collision.Name = "Collision Rule #" + (i + 1);
                    }

                    // IMPACT RULE HEADER BEGIN
                    ICEEditorLayout.BeginHorizontal();
                    EditorGUI.BeginDisabledGroup(_collision.Enabled == false);
                    _collision.Foldout = ICEEditorLayout.Foldout(_collision.Foldout, _collision.Name);
                    EditorGUI.EndDisabledGroup();

                    if (ICEEditorLayout.ListDeleteButton <CollisionDataObject>(_control.Creature.Environment.CollisionHandler.Collisions, _collision, "Removes the selected collision rule"))
                    {
                        if (_control.Creature.Environment.CollisionHandler.Collisions.Count == 0)
                        {
                            _control.Creature.Environment.CollisionHandler.Enabled = false;
                        }
                        return;
                    }

                    GUILayout.Space(5);
                    if (ICEEditorLayout.ListUpDownButtons <CollisionDataObject>(_control.Creature.Environment.CollisionHandler.Collisions, i))
                    {
                        return;
                    }

                    _collision.Enabled = ICEEditorLayout.EnableButton("Activates/deactivates the selected collision rule", _collision.Enabled);

                    ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_COLLISION_RULE);
                    // IMPACT RULE HEADER END

                    // IMPACT RULE CONTENT BEGIN
                    if (_collision.Foldout)
                    {
                        EditorGUI.BeginDisabledGroup(_collision.Enabled == false);
                        ICEEditorLayout.BeginHorizontal();
                        _collision.Name = ICEEditorLayout.Text("Name", "", _collision.Name);
                        if (ICEEditorLayout.ResetButtonSmall())
                        {
                            _collision.Name = "";
                        }
                        ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_COLLISION_RULE_NAME);

                        EditorGUILayout.Separator();
                        ICEEditorLayout.BeginHorizontal();
                        ICEEditorLayout.Label("Conditions", true);

                        _collision.UseTag      = ICEEditorLayout.CheckButtonMiddle("TAG", "", _collision.UseTag);
                        _collision.UseLayer    = ICEEditorLayout.CheckButtonMiddle("LAYER", "", _collision.UseLayer);
                        _collision.UseBodyPart = ICEEditorLayout.CheckButtonMiddle("COLLIDER", "", _collision.UseBodyPart);
                        ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_COLLISION_RULE_CONDITIONS);
                        EditorGUI.indentLevel++;

                        if (_collision.UseLayer)
                        {
                            _collision.Layer = ICEEditorLayout.Layer("Layer", "Desired collision layer", _collision.Layer, Info.ENVIROMENT_COLLISION_RULE_LAYER);
                        }

                        if (_collision.UseTag)
                        {
                            _collision.Tag = ICEEditorLayout.Tag("Tag", "Desired collision tag", _collision.Tag, Info.ENVIROMENT_COLLISION_RULE_TAG);
                        }

                        if (_collision.UseBodyPart)
                        {
                            _collision.BodyPart = ICEEditorLayout.ColliderPopup(_control.gameObject, "Body Part", "Desired body part", _collision.BodyPart, Info.ENVIROMENT_COLLISION_RULE_BODYPART);
                        }

                        EditorGUI.indentLevel--;

                        EditorGUILayout.Separator();
                        ICEEditorLayout.Label("Procedures", true, Info.ENVIROMENT_COLLISION_RULE_PROCEDURES);
                        EditorGUI.indentLevel++;
                        _collision.UseBehaviourModeKey = ICEEditorLayout.Toggle("Behaviour", "", _collision.UseBehaviourModeKey, Info.ENVIROMENT_COLLISION_BEHAVIOUR);
                        if (_collision.UseBehaviourModeKey)
                        {
                            EditorGUI.indentLevel++;
                            _collision.BehaviourModeKey = BehaviourEditor.BehaviourSelect(_control, "Behaviour", "Reaction to this impact", _collision.BehaviourModeKey, "COLLISION_" + _collision.Name.ToUpper(), Info.ENVIROMENT_COLLISION_BEHAVIOUR);
                            EditorGUI.indentLevel--;
                        }

                        EditorHeaderType _header = EditorHeaderType.TOGGLE;
                        CreatureObjectEditor.DrawInfluenceObject(_collision.Influences, _header, _control.Creature.Status.UseAdvanced, _control.Creature.Status.InitialDurabilityMax, Info.ENVIROMENT_COLLISION_INFLUENCES);
                        //CreatureObjectEditor.DrawAudioObject( _collision.Audio, _header, Info.ENVIROMENT_COLLISION_AUDIO );
                        //CreatureObjectEditor.DrawEffectObject( _control, _collision.Effect, _header, Info.ENVIROMENT_COLLISION_EFFECT );


                        //_impact.ForceInteraction = EditorGUILayout.Toggle("Force Interaction", _impact.ForceInteraction );
                        EditorGUI.indentLevel--;
                        EditorGUILayout.Separator();


                        EditorGUI.EndDisabledGroup();
                        ICEEditorStyle.SplitterByIndent(EditorGUI.indentLevel + 1);
                    }
                    // IMPACT RULE CONTENT END
                }
            }

            ICEEditorLayout.DrawListAddLine <CollisionDataObject>(_control.Creature.Environment.CollisionHandler.Collisions, new CollisionDataObject(), false, "Add Collision Rule");

            WorldObjectEditor.EndObjectContent();
            // CONTENT END
        }
        private static void DrawReferenceGroup(ICECreatureRegister _register, ReferenceGroupObject _obj)
        {
            if (_obj == null || _obj.Foldout == false)
            {
                return;
            }

            EditorGUI.BeginDisabledGroup(_obj.Enabled == false);

            // BEGIN OBJECT
            ICEEditorLayout.BeginHorizontal();
            _obj.ReferenceGameObject = (GameObject)EditorGUILayout.ObjectField("Reference Object", _obj.ReferenceGameObject, typeof(GameObject), true);
            EditorGUI.BeginDisabledGroup(_obj.ReferenceGameObject == null);


            if (_obj.ReferenceGameObject != null)
            {
                ICEEditorLayout.ButtonDisplayObject(_obj.ReferenceGameObject.transform.position);
            }
            else
            {
                ICEEditorLayout.ButtonDisplayObject(Vector3.zero);
            }
            ICEEditorLayout.ButtonSelectObject(_obj.ReferenceGameObject, ICEEditorStyle.CMDButtonDouble);

            //_obj.GroupByTag = ICEEditorLayout.ButtonCheck( "TAG", "Allows to find a group in addition to its name also by its tag.", _obj.GroupByTag, ICEEditorStyle.CMDButtonDouble );
            _obj.GroupByTag = false;

            _obj.UseGroupParent = ICEEditorLayout.CheckButtonMiddle("GROUP", "Assorts instances to the defined Hierarchy Group", _obj.UseGroupParent);
            EditorGUI.EndDisabledGroup();
            ICEEditorLayout.EndHorizontal(Info.REGISTER_REFERENCE_OBJECT);
            // END OBJECT

            //_obj.UseHierarchyGroupObject = ICEEditorLayout.Toggle( "Use Hierarchy Group", "", _obj.UseHierarchyGroupObject, Info.REGISTER_REFERENCE_OBJECT_POOL_GROUP_USE );
            if (_obj.UseGroupParent)
            {
                EditorGUI.indentLevel++;
                ICEEditorLayout.BeginHorizontal();
                _obj.CustomGroupParent = (GameObject)EditorGUILayout.ObjectField("Custom Hierarchy Group", _obj.CustomGroupParent, typeof(GameObject), true);
                ICEEditorLayout.EndHorizontal(Info.REGISTER_REFERENCE_OBJECT_POOL_GROUP_CUSTOM);

                if (_obj.CustomGroupParent == null)
                {
                    EditorGUILayout.HelpBox(Info.REGISTER_REFERENCE_OBJECT_POOL_GROUP_INFO, MessageType.Info);
                }

                EditorGUI.indentLevel--;
            }

            // BEGIN POOL MANAGEMENT
            if (_obj.PoolManagementEnabled == true && _register.UsePoolManagement == true)
            {
                // PLAYER
                if (_obj.EntityType == EntityClassType.Player)
                {
                    _obj.MaxCoexistingObjects = 1;
                    _obj.UseInitialSpawn      = true;
                    _obj.InitialSpawnPriority = 0;
                    _obj.UseRandomization     = false;
                    _obj.SpawnWaveMin         = 1;
                    _obj.SpawnWaveMax         = 1;
                    _obj.UseSoftRespawn       = true;

                    ICEEditorLayout.MinMaxRandomDefaultSlider("Spawn Interval (min/max)", "", ref _obj.MinSpawnInterval, ref _obj.MaxSpawnInterval, 0, ref _obj.RespawnIntervalMax, 0, 0, 0.25f, 30, Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_INTERVAL);

                    if (_obj.MinSpawnInterval > 0 && _obj.ReferenceGameObject != null && _obj.ReferenceGameObject.GetComponentsInChildren <Camera>() != null)
                    {
                        //Debug.Log( "test" );
                    }
                }

                // CREATURES AND OTHER OBJECTS
                else
                {
                    ICEEditorLayout.BeginHorizontal();
                    float _maximum = _obj.MaxCoexistingObjectsMaximum;
                    _obj.MaxCoexistingObjects        = (int)ICEEditorLayout.MaxDefaultSlider("Max. Coexistent Objects (" + _obj.ActiveObjectsCount + ")", "Specifies the limit of coexistent objects", _obj.MaxCoexistingObjects, 1, 0, ref _maximum, 25, "");
                    _obj.MaxCoexistingObjectsMaximum = (int)_maximum;
                    _obj.UseMaxSpawnCycles           = ICEEditorLayout.CheckButtonSmall("MAX", "Specifies the total number of objects", _obj.UseMaxSpawnCycles);
                    _obj.UseInitialSpawn             = ICEEditorLayout.CheckButtonMiddle("INITIAL", "Spawns all instances on start according to the given priority", _obj.UseInitialSpawn);
                    ICEEditorLayout.EndHorizontal(Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_MAX);


                    if (_obj.UseMaxSpawnCycles)
                    {
                        if (_obj.MaxSpawnCycles < _obj.MaxCoexistingObjects)
                        {
                            _obj.MaxSpawnCycles = _obj.MaxCoexistingObjects;
                        }

                        if (_obj.MaxSpawnCyclesMaximum < _obj.MaxCoexistingObjectsMaximum)
                        {
                            _obj.MaxSpawnCyclesMaximum = _obj.MaxCoexistingObjectsMaximum;
                        }

                        float _max_spawn_cycles = _obj.MaxSpawnCyclesMaximum;
                        _obj.MaxSpawnCycles        = (int)ICEEditorLayout.MaxDefaultSlider("Max. Spawn Cycles (" + _obj.TotalSpawnCycles + ")", "", _obj.MaxSpawnCycles, 1, _obj.MaxCoexistingObjects, ref _max_spawn_cycles, 25, "");
                        _obj.MaxSpawnCyclesMaximum = (int)_max_spawn_cycles;
                    }

                    if (_obj.UseInitialSpawn)
                    {
                        EditorGUI.indentLevel++;
                        _obj.InitialSpawnPriority = (int)ICEEditorLayout.DefaultSlider("Initial Spawn Priority", "", _obj.InitialSpawnPriority, 1, 0, 100, 0, Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_PRIORITY);
                        EditorGUI.indentLevel--;
                    }

                    ICEEditorLayout.BeginHorizontal();
                    ICEEditorLayout.MinMaxRandomDefaultSlider("Spawn Interval (min/max)", "", ref _obj.MinSpawnInterval, ref _obj.MaxSpawnInterval, 0, ref _obj.RespawnIntervalMax, 0, 0, 0.25f, 30);
                    _obj.UseSpawnWave = ICEEditorLayout.CheckButton("WAVE", "", _obj.UseSpawnWave, ICEEditorStyle.ButtonMiddle);
                    ICEEditorLayout.EndHorizontal(Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_INTERVAL);

                    if (_obj.UseSpawnWave)
                    {
                        EditorGUI.indentLevel++;
                        ICEEditorLayout.MinMaxRandomDefaultSlider("Wave Size (min/max)", "Amount per Wave", ref _obj.SpawnWaveMin, ref _obj.SpawnWaveMax, 1, ref _obj.SpawnWaveMaximum, 1, 5, 30, Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_WAVE);
                        EditorGUI.indentLevel--;
                    }

                    EditorGUILayout.Separator();


                    _obj.UseRandomization = ICEEditorLayout.Toggle("Spawn Randomization", "", _obj.UseRandomization, Info.REGISTER_REFERENCE_OBJECT_POOL_RANDOM_SIZE);
                    if (_obj.UseRandomization)
                    {
                        EditorGUI.indentLevel++;
                        ICEEditorLayout.MinMaxRandomDefaultSlider("Random Size Variance (min/max)", "", ref _obj.RandomSizeMin, ref _obj.RandomSizeMax, -1, 1, 0, 0, 0.025f, 30, Info.REGISTER_REFERENCE_OBJECT_POOL_RANDOM_SIZE_VARIANCE);
                        EditorGUI.indentLevel--;
                        EditorGUILayout.Separator();
                    }

                    WorldObjectEditor.DrawCullingOptionsObject(_register, _obj.CullingOptions, EditorHeaderType.TOGGLE, Info.REGISTER_REFERENCE_OBJECT_POOL_SPAWN_CONDITIONS, "Spawn Conditions");
                }

                ICEEditorLayout.BeginHorizontal();
                ICEEditorLayout.Label("Spawn Areas", false);
                if (ICEEditorLayout.AddButton("Adds a new spawn point entry"))
                {
                    _obj.SpawnPoints.Add(new SpawnPointObject());
                }
                ICEEditorLayout.EndHorizontal(Info.REGISTER_REFERENCE_OBJECT_SPAWN_POINTS);

                EditorGUI.indentLevel++;

                if (_obj.SpawnPoints.Count == 0)
                {
                    if (_obj.EntityCreature != null)
                    {
                        _obj.SpawnPoints.Add(new SpawnPointObject(_obj.EntityCreature.Creature.Essentials.Target));
                    }
                    else if (_obj.ReferenceGameObject != null)
                    {
                        ICECreatureTargetAttribute _target = _obj.ReferenceGameObject.GetComponent <ICECreatureTargetAttribute>();
                        if (_target != null)
                        {
                            _obj.SpawnPoints.Add(new SpawnPointObject(_target.Target));
                        }
                        else
                        {
                            _obj.SpawnPoints.Add(new SpawnPointObject(_obj.ReferenceGameObject));
                        }
                    }
                }

                foreach (SpawnPointObject _point in _obj.SpawnPoints)
                {
                    if (CreatureObjectEditor.DrawSpawnPointObject(_point, _obj.SpawnPoints, EditorHeaderType.FOLDOUT_ENABLED))
                    {
                        return;
                    }
                }

                EditorGUI.indentLevel--;
            }
            // END POOL MANAGEMENT

            EditorGUI.EndDisabledGroup();
            EditorGUILayout.Separator();
        }