commit428243f4a6Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:43:13 2026 +0300 Squashed commit of the following: commit68e78fa464Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:41:49 2026 +0300 Updated .gitignore commit9f87122a34Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:34:57 2026 +0300 Added Dohya commitf6a7547e84Author: AsanoRema <asanorema2036@gmail.com> Date: Fri Aug 21 17:59:13 2026 +0300 Fixed commitb98901c366Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:37:22 2026 +0300 Added new particle Package commitbb2f4a3b16Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:17:48 2026 +0300 Map mehanic ready to multiplayer commitc01ff800f6Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 16:16:19 2026 +0300 Squashed commit of the following: commit173bbb165cAuthor: henjkey <henjkey@gmail.com> Date: Fri Aug 14 18:51:23 2026 +0500 Mappp commitd559ab338aAuthor: henjkey <henjkey@gmail.com> Date: Thu Aug 13 18:42:41 2026 +0500 Map Controller Coordinates Target System Crosshair System Radar System
194 lines
6.5 KiB
C#
194 lines
6.5 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.Collections;
|
|
|
|
// Cartoon FX - (c) 2012-2016 Jean Moreno
|
|
|
|
// CFX Spawn System Editor interface
|
|
|
|
[CustomEditor(typeof(CFX_SpawnSystem))]
|
|
public class CFX_SpawnSystemEditor : Editor
|
|
{
|
|
private SerializedProperty _hideObjectsInHierarchy;
|
|
private SerializedProperty p_hideObjectsInHierarchy
|
|
{
|
|
get
|
|
{
|
|
if(_hideObjectsInHierarchy == null)
|
|
_hideObjectsInHierarchy = this.serializedObject.FindProperty("hideObjectsInHierarchy");
|
|
return _hideObjectsInHierarchy;
|
|
}
|
|
}
|
|
|
|
private SerializedProperty _onlyGetInactiveObjects;
|
|
private SerializedProperty p_onlyGetInactiveObjects
|
|
{
|
|
get
|
|
{
|
|
if(_onlyGetInactiveObjects == null)
|
|
_onlyGetInactiveObjects = this.serializedObject.FindProperty("onlyGetInactiveObjects");
|
|
return _onlyGetInactiveObjects;
|
|
}
|
|
}
|
|
|
|
private SerializedProperty _instantiateIfNeeded;
|
|
private SerializedProperty p_instantiateIfNeeded
|
|
{
|
|
get
|
|
{
|
|
if(_instantiateIfNeeded == null)
|
|
_instantiateIfNeeded = this.serializedObject.FindProperty("instantiateIfNeeded");
|
|
return _instantiateIfNeeded;
|
|
}
|
|
}
|
|
|
|
private SerializedProperty _spawnAsChildren;
|
|
private SerializedProperty p_spawnAsChildren
|
|
{
|
|
get
|
|
{
|
|
if(_spawnAsChildren == null)
|
|
_spawnAsChildren = this.serializedObject.FindProperty("spawnAsChildren");
|
|
return _spawnAsChildren;
|
|
}
|
|
}
|
|
|
|
private GUIContent guiContent = new GUIContent();
|
|
private GUIContent getGuiContent(string label, string tooltip = null)
|
|
{
|
|
guiContent.text = label;
|
|
guiContent.tooltip = tooltip;
|
|
return guiContent;
|
|
}
|
|
|
|
// GUI ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
//Options
|
|
EditorGUI.BeginChangeCheck();
|
|
|
|
#if UNITY_4_2
|
|
EditorGUIUtility.LookLikeControls(230f);
|
|
#else
|
|
float labelWidth = EditorGUIUtility.labelWidth;
|
|
EditorGUIUtility.labelWidth = 230f;
|
|
#endif
|
|
|
|
EditorGUILayout.PropertyField(p_hideObjectsInHierarchy, getGuiContent("Hide preloaded objects in Hierarchy", "Will prevent the preloaded instances to show in the Hierarchy"));
|
|
EditorGUILayout.PropertyField(p_spawnAsChildren, getGuiContent("Spawn as children of this GameObject", "Will place the preloaded instances under this GameObject, for better organization of the Hierarchy"));
|
|
|
|
EditorGUILayout.PropertyField(p_onlyGetInactiveObjects, getGuiContent("Only retrieve inactive GameObjects", "Will only return preloaded instances if they are inactive.\nThis means that you have to deactivate the GameObject before being able to reuse it\n(this is already handled on Cartoon FX effects with the CFX_AutoDestructShuriken script)"));
|
|
bool guiEnabled = GUI.enabled;
|
|
GUI.enabled = p_onlyGetInactiveObjects.boolValue;
|
|
EditorGUILayout.PropertyField(p_instantiateIfNeeded, getGuiContent("Instantiate new instances if needed", "If no active GameObject is found in the preloaded list, then instantiate new ones as needed"));
|
|
GUI.enabled = guiEnabled;
|
|
|
|
#if !UNITY_4_2
|
|
EditorGUIUtility.labelWidth = labelWidth;
|
|
#endif
|
|
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
serializedObject.ApplyModifiedProperties();
|
|
}
|
|
|
|
//Drag/drop Prefabs
|
|
GUI.SetNextControlName("DragDropBox");
|
|
EditorGUILayout.HelpBox("Drag GameObjects you want to preload here!\n\nTIP:\nUse the Inspector Lock at the top right to be able to drag multiple objects at once!", MessageType.None);
|
|
Rect dropRect = GUILayoutUtility.GetLastRect();
|
|
|
|
for(int i = 0; i < (this.target as CFX_SpawnSystem).objectsToPreload.Length; i++)
|
|
{
|
|
GUILayout.BeginHorizontal();
|
|
|
|
EditorGUI.BeginChangeCheck();
|
|
GameObject obj = (GameObject)EditorGUILayout.ObjectField((this.target as CFX_SpawnSystem).objectsToPreload[i], typeof(GameObject), true);
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
#if UNITY_4_2
|
|
Undo.RegisterUndo(target, "change Spawn System object to preload");
|
|
#else
|
|
Undo.RecordObject(target, "change Spawn System object to preload");
|
|
#endif
|
|
(this.target as CFX_SpawnSystem).objectsToPreload[i] = obj;
|
|
}
|
|
EditorGUILayout.LabelField(new GUIContent("times","Number of times to copy the effect\nin the pool, i.e. the max number of\ntimes the object will be used\nsimultaneously"), GUILayout.Width(40));
|
|
EditorGUI.BeginChangeCheck();
|
|
int nb = EditorGUILayout.IntField("", (this.target as CFX_SpawnSystem).objectsToPreloadTimes[i], GUILayout.Width(50));
|
|
if(nb < 1)
|
|
nb = 1;
|
|
if(EditorGUI.EndChangeCheck())
|
|
{
|
|
#if UNITY_4_2
|
|
Undo.RegisterUndo(target, "change Spawn System preload count");
|
|
#else
|
|
Undo.RecordObject(target, "change Spawn System preload count");
|
|
#endif
|
|
(this.target as CFX_SpawnSystem).objectsToPreloadTimes[i] = nb;
|
|
}
|
|
|
|
if(GUI.changed)
|
|
{
|
|
EditorUtility.SetDirty(target);
|
|
}
|
|
|
|
if(GUILayout.Button("X", EditorStyles.miniButton, GUILayout.Width(24)))
|
|
{
|
|
Object preloadedObject = (this.target as CFX_SpawnSystem).objectsToPreload[i];
|
|
string objectName = (preloadedObject == null) ? "" : preloadedObject.name;
|
|
#if UNITY_4_2
|
|
Undo.RegisterUndo(target, string.Format("remove {0} from Spawn System", objectName));
|
|
#else
|
|
Undo.RecordObject(target, string.Format("remove {0} from Spawn System", objectName));
|
|
#endif
|
|
ArrayUtility.RemoveAt<GameObject>(ref (this.target as CFX_SpawnSystem).objectsToPreload, i);
|
|
ArrayUtility.RemoveAt<int>(ref (this.target as CFX_SpawnSystem).objectsToPreloadTimes, i);
|
|
|
|
EditorUtility.SetDirty(target);
|
|
}
|
|
|
|
GUILayout.EndHorizontal();
|
|
}
|
|
|
|
if((Event.current.type == EventType.DragPerform || Event.current.type == EventType.DragUpdated)
|
|
&& dropRect.Contains(Event.current.mousePosition))
|
|
{
|
|
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
|
|
|
|
if(Event.current.type == EventType.DragPerform)
|
|
{
|
|
foreach(Object o in DragAndDrop.objectReferences)
|
|
{
|
|
if(o is GameObject)
|
|
{
|
|
bool already = false;
|
|
foreach(GameObject otherObj in (this.target as CFX_SpawnSystem).objectsToPreload)
|
|
{
|
|
if(o == otherObj)
|
|
{
|
|
already = true;
|
|
Debug.LogWarning("CFX_SpawnSystem: Object has already been added: " + o.name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!already)
|
|
{
|
|
#if UNITY_4_2
|
|
Undo.RegisterUndo(target, string.Format("add {0} to Spawn System", o.name));
|
|
#else
|
|
Undo.RecordObject(target, string.Format("add {0} to Spawn System", o.name));
|
|
#endif
|
|
ArrayUtility.Add<GameObject>(ref (this.target as CFX_SpawnSystem).objectsToPreload, (GameObject)o);
|
|
ArrayUtility.Add<int>(ref (this.target as CFX_SpawnSystem).objectsToPreloadTimes, 1);
|
|
|
|
EditorUtility.SetDirty(target);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|