void DestroyTube(StaticCharacter target) { for (int i = 0; i < target.childrenCharacters.Count; i++) { DestroyTube(target.childrenCharacters[i]); } DestroyImmediate(target.gameObject); }
void UpdateChildren(StaticCharacter target) { for (int i = target.childrenCharacters.Count - 1; i >= 0; i--) { UpdateChildren(target.childrenCharacters[i]); } InstantiateFromList(target, target.listIndex); }
public virtual void OnChildDie(StaticCharacter child) { childrenCharacters.Remove(child); if (childrenCharacters.Count == 0 && instanceType != INSTYPE.Center) { OnDie(); } }
void InstantiateFromList(StaticCharacter target, int index) { StaticCharacter newObj = ((GameObject)GameObject.Instantiate(staticCharacters.staticObjects[index])).GetComponent <StaticCharacter>(); for (int i = 0; i < target.childrenCharacters.Count; i++) { newObj.childrenCharacters.Add(target.childrenCharacters[i]); target.childrenCharacters[i].parentCharacter = newObj; } if (target.parentCharacter != null) { target.parentCharacter.childrenCharacters.Remove(target); target.parentCharacter.childrenCharacters.Add(newObj); newObj.parentCharacter = target.parentCharacter; } newObj.listIndex = index; newObj.transform.SetParent(target.transform.parent); newObj.parentDir = target.parentDir; newObj.transform.position = target.transform.position; if (newObj.GetComponent <AttackingUnitI>() != null) { newObj.instanceType = StaticCharacter.INSTYPE.Tower; } else if (newObj.GetComponent <CenterStaticCharacter>() != null) { newObj.instanceType = StaticCharacter.INSTYPE.Center; } else { newObj.instanceType = StaticCharacter.INSTYPE.Tube; } newObj.UpdateSprite(); if (newObj.parentCharacter) { newObj.parentCharacter.UpdateSprite(); } Selection.activeGameObject = newObj.gameObject; DestroyImmediate(target.gameObject); }
public override void OnChildDie(StaticCharacter child) { base.OnChildDie(child); }
public override void OnInspectorGUI() { myTarget = (StaticCharacter)target; staticCharacters = ResourceCash.Cash.ScriptableObjects__towerlist_asset_StaticObject; if (myTarget.GetComponent <AttackingUnitI>() != null) { myTarget.instanceType = StaticCharacter.INSTYPE.Tower; } else if (myTarget.GetComponent <CenterStaticCharacter>() != null) { myTarget.instanceType = StaticCharacter.INSTYPE.Center; } else { myTarget.instanceType = StaticCharacter.INSTYPE.Tube; } distance = 0.95f; showObjList(); if (serializedObject == null) { return; } myTarget.spriteRoot = (Texture2D)EditorGUILayout.ObjectField(myTarget.spriteRoot, typeof(Texture2D), true); EditorGUILayout.LabelField("Add Tube"); EditorGUILayout.BeginHorizontal(); GUI.enabled = !myTarget.north; if (GUILayout.Button("North")) { GameObject newObj = (GameObject)GameObject.Instantiate(staticCharacters.staticObjects[0]); newObj.transform.position = myTarget.gameObject.transform.position + new Vector3(0, distance, 0); newObj.transform.SetParent(myTarget.transform.parent); Selection.activeGameObject = newObj; StaticCharacter child = newObj.GetComponent <StaticCharacter>(); child.parentDir = StaticCharacter.DIRECTION.SOUTH; myTarget.childrenCharacters.Add(child); child.parentCharacter = myTarget; myTarget.UpdateSprite(); child.UpdateSprite(); } GUI.enabled = !myTarget.south; if (GUILayout.Button("South")) { GameObject newObj = (GameObject)GameObject.Instantiate(staticCharacters.staticObjects[0]); newObj.transform.position = myTarget.gameObject.transform.position + new Vector3(0, -distance, 0); newObj.transform.SetParent(myTarget.transform.parent); Selection.activeGameObject = newObj; StaticCharacter child = newObj.GetComponent <StaticCharacter>(); child.parentDir = StaticCharacter.DIRECTION.NORTH; myTarget.childrenCharacters.Add(child); child.parentCharacter = myTarget; myTarget.UpdateSprite(); child.UpdateSprite(); } GUI.enabled = !myTarget.west; if (GUILayout.Button("West")) { GameObject newObj = (GameObject)GameObject.Instantiate(staticCharacters.staticObjects[0]); newObj.transform.position = myTarget.gameObject.transform.position + new Vector3(-distance, 0, 0); newObj.transform.SetParent(myTarget.transform.parent); Selection.activeGameObject = newObj; StaticCharacter child = newObj.GetComponent <StaticCharacter>(); child.parentDir = StaticCharacter.DIRECTION.EAST; myTarget.childrenCharacters.Add(child); child.parentCharacter = myTarget; myTarget.UpdateSprite(); child.UpdateSprite(); } GUI.enabled = !myTarget.east; if (GUILayout.Button("East")) { GameObject newObj = (GameObject)GameObject.Instantiate(staticCharacters.staticObjects[0]); newObj.transform.position = myTarget.gameObject.transform.position + new Vector3(distance, 0, 0); newObj.transform.SetParent(myTarget.transform.parent); Selection.activeGameObject = newObj; StaticCharacter child = newObj.GetComponent <StaticCharacter>(); child.parentDir = StaticCharacter.DIRECTION.WEST; myTarget.childrenCharacters.Add(child); child.parentCharacter = myTarget; myTarget.UpdateSprite(); child.UpdateSprite(); } GUI.enabled = true; EditorGUILayout.EndHorizontal(); EditorGUILayout.LabelField("Add Tube"); EditorGUILayout.BeginHorizontal(); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Destroy This")) { if (myTarget.parentCharacter != null) { myTarget.parentCharacter.childrenCharacters.Remove(myTarget); myTarget.parentCharacter.UpdateSprite(); } DestroyTube(myTarget); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); if (GUILayout.Button("UpdateChildren")) { UpdateChildren(myTarget); return; } if (serializedObject.targetObject != null) { DrawDefaultInspector(); } if (GUI.changed) { EditorUtility.SetDirty(staticCharacters); } }