private static void DrawEnvironmentSurfaceSettings(ICECreatureControl _control)
        {
            ICEEditorLayout.BeginHorizontal();
            _control.Creature.Environment.SurfaceHandler.Enabled = ICEEditorLayout.ToggleLeft("Surfaces", "", _control.Creature.Environment.SurfaceHandler.Enabled, true);
            if (GUILayout.Button(new GUIContent("ADD", "add a new surface rule"), ICEEditorStyle.ButtonMiddle))
            {
                _control.Creature.Environment.SurfaceHandler.Surfaces.Add(new SurfaceDataObject());
            }
            if (GUILayout.Button(new GUIContent("RESET", "removes all surface rules"), ICEEditorStyle.ButtonMiddle))
            {
                _control.Creature.Environment.SurfaceHandler.Surfaces.Clear();
            }
            ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE);

            if (_control.Creature.Environment.SurfaceHandler.Surfaces.Count == 0)
            {
                _control.Creature.Environment.SurfaceHandler.Enabled = false;
            }

            EditorGUI.BeginDisabledGroup(_control.Creature.Environment.SurfaceHandler.Enabled == false);

            EditorGUI.indentLevel++;

            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();
                _surface.Foldout = ICEEditorLayout.Foldout(_surface.Foldout, _surface.Name);
                _surface.Enabled = ICEEditorLayout.ButtonCheck("ACTIVE", "activates/deactivates the rule", _surface.Enabled, ICEEditorStyle.ButtonMiddle);

                if (GUILayout.Button(new GUIContent("REMOVE", "removes the selected surface rule"), ICEEditorStyle.ButtonMiddle))
                {
                    _control.Creature.Environment.SurfaceHandler.Surfaces.RemoveAt(i);
                    --i;
                }
                ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE);
                // HEADER END

                // CONTENT

                if (_surface.Foldout)
                {
                    EditorGUI.BeginDisabledGroup(_surface.Enabled == false);
                    ICEEditorLayout.BeginHorizontal();
                    _surface.Name = ICEEditorLayout.Text("Name", "", _surface.Name);
                    if (GUILayout.Button(new GUIContent("CLR", ""), ICEEditorStyle.CMDButtonDouble))
                    {
                        _surface.Name = "";
                    }
                    ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE_NAME);
                    _surface.Interval = ICEEditorLayout.DefaultSlider("Interval", "", _surface.Interval, 0.25f, 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.Audio      = EditorSharedTools.DrawSharedAudio(_surface.Audio, Info.ENVIROMENT_SURFACE_AUDIO);
                    _surface.Effect     = EditorSharedTools.DrawSharedEffect(_surface.Effect, Info.ENVIROMENT_SURFACE_EFFECT);
                    _surface.Influences = EditorSharedTools.DrawSharedInfluences(_surface.Influences, Info.ENVIROMENT_SURFACE_INFLUENCES);
                    EditorGUI.EndDisabledGroup();
                    EditorGUI.indentLevel--;
                    EditorGUILayout.Separator();
                    EditorGUI.EndDisabledGroup();
                    ICEEditorStyle.SplitterByIndent(EditorGUI.indentLevel + 1);
                }
            }

            EditorGUI.indentLevel--;
            EditorGUI.EndDisabledGroup();
        }
        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 DrawEnvironmentTextures(SurfaceDataObject _environment)
        {
            if (_environment == null)
            {
                return;
            }

            ICEEditorLayout.BeginHorizontal();
            ICEEditorLayout.Label("Trigger Textures", true);
            if (GUILayout.Button(new GUIContent("ADD", "Add a texture"), ICEEditorStyle.ButtonMiddle))
            {
                _environment.Textures.Add(new Texture());
            }
            ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE_TEXTURES);

            if (_environment.Textures != null && _environment.Textures.Count > 0)
            {
                int _width           = 90;
                int _tolerance_space = 50 + (EditorGUI.indentLevel * 15) + _width;
                int _inspector_width = Screen.width - _tolerance_space;
                int _textures_width  = 0;
                int _max_count       = 0;
                int _counter         = 0;

                if (_inspector_width < 120)
                {
                    _max_count = 3;
                }

                for (int i = 0; i < _environment.Textures.Count; i++)
                {
                    if (_counter == 0)
                    {
                        ICEEditorLayout.BeginHorizontal();
                        GUILayout.Space(EditorGUI.indentLevel * 15);
                    }

                    int _indent = EditorGUI.indentLevel;

                    EditorGUI.indentLevel = 0;
                    GUILayout.BeginVertical("box", GUILayout.MinWidth(_width), GUILayout.MaxWidth(_width), GUILayout.MinHeight(90));
                    _environment.Textures[i] = (Texture)EditorGUILayout.ObjectField(_environment.Textures[i], typeof(Texture), false, GUILayout.Height(75));

                    if (GUILayout.Button("DELETE"))
                    {
                        _environment.Textures.RemoveAt(i);
                        --i;
                    }

                    GUILayout.EndVertical();
                    EditorGUI.indentLevel = _indent;

                    _counter++;
                    _textures_width = _counter * _width;
                    if (_textures_width > _inspector_width || _counter == _max_count || i == _environment.Textures.Count - 1)
                    {
                        ICEEditorLayout.EndHorizontal();
                        EditorGUILayout.Separator();
                        _counter = 0;
                    }
                }
            }

            if (_environment.Textures.Count == 0)
            {
                EditorGUILayout.HelpBox("No textures assigned. Press ADD to assign a texture!", MessageType.Info);
            }

            EditorGUILayout.Separator();
        }
        private static void DrawEnvironmentTextures(SurfaceDataObject _environment)
        {
            if (_environment == null)
            {
                return;
            }

            ICEEditorLayout.BeginHorizontal();
            ICEEditorLayout.Label("Trigger Textures", true);
            if (ICEEditorLayout.AddButton("Add a texture"))
            {
                _environment.Textures.Add(new TextureDataObject());
            }
            ICEEditorLayout.EndHorizontal(Info.ENVIROMENT_SURFACE_RULE_TEXTURES);

            if (_environment.Textures.Count > 0)
            {
                int _width           = 90;
                int _tolerance_space = 50 + (EditorGUI.indentLevel * 15) + _width;
                int _inspector_width = Screen.width - _tolerance_space;
                int _textures_width  = 0;
                int _max_count       = 0;
                int _counter         = 0;

                if (_inspector_width < 120)
                {
                    _max_count = 3;
                }

                int _i = 0;
                //for( int i = 0; i < _environment.Textures.Count; i++ )
                foreach (TextureDataObject _data in _environment.Textures)
                {
                    //TextureDataObject _data = _environment.Textures[i];

                    if (_data == null)
                    {
                        continue;
                    }

                    /*
                     * if( _data.Image == null && ! string.IsNullOrEmpty( _data.FilePath ) )
                     *      _data.Image = (Texture)AssetDatabase.LoadAssetAtPath<Texture>( _data.FilePath );
                     */

                    if (_counter == 0)
                    {
                        ICEEditorLayout.BeginHorizontal();
                        GUILayout.Space(EditorGUI.indentLevel * 15);
                    }

                    int _indent = EditorGUI.indentLevel;

                    EditorGUI.indentLevel = 0;
                    GUILayout.BeginVertical("BOX", GUILayout.MinWidth(_width), GUILayout.MaxWidth(_width), GUILayout.MinHeight(90));
                    _data.Image = (Texture)EditorGUILayout.ObjectField(_data.Image, typeof(Texture), false, GUILayout.Height(75));

                    /*
                     *      if( _data.Image != null )
                     *              _data.FilePath = AssetDatabase.GetAssetPath( _data.Image );
                     */

                    if (GUILayout.Button("DELETE"))
                    {
                        _environment.Textures.RemoveAt(_i);
                        return;
                    }

                    GUILayout.EndVertical();
                    EditorGUI.indentLevel = _indent;

                    _counter++;
                    _textures_width = _counter * _width;
                    if (_textures_width > _inspector_width || _counter == _max_count || _i == _environment.Textures.Count - 1)
                    {
                        ICEEditorLayout.EndHorizontal();
                        EditorGUILayout.Separator();
                        _counter = 0;
                    }

                    _i++;
                }
            }

            if (_environment.Textures.Count == 0)
            {
                EditorGUILayout.HelpBox("No textures assigned. Press ADD to assign a texture!", MessageType.Info);
            }

            EditorGUILayout.Separator();
        }