public static void Reset(Entity entity) { foreach (Entity clear in entitiesToClear) { if (clear != null && clear != entity) { clear.SetHighlight(Color.clear); } } entitiesToClear.Clear(); entitiesToClear.UnionWith(targetEntities); targetEntities.Clear(); currentTargetEntityI = -1; if (currentEntity != entity) { if (currentEntity != null) { // entity deselected currentEntity.SetHighlight(Color.clear); EntityPreviewManager.EntityDeselected(); } if (entity != null) { // entity selected entity.SetHighlight(Color.white); EntityPreviewManager.EntitySelected(entity); } } currentEntity = entity; behaviorTarget = null; }
void Update() { if (currentEntity == null && targetEntities.Count != 0) { targetEntities.Clear(); currentTargetEntityI = -1; } if (transform.childCount != targetEntities.Count) { updateTargets = true; } else { foreach (Transform child in transform) { EntityReferenceLine line = child.GetComponent <EntityReferenceLine>(); if (targetEntities[line.i] != line.targetEntity || currentEntity != line.sourceEntity) { updateTargets = true; break; } } } if (updateTargets) { updateTargets = false; foreach (Transform child in transform) { Destroy(child.gameObject); } for (int i = 0; i < targetEntities.Count; i++) { GameObject lineObject = new GameObject(); lineObject.transform.parent = transform; EntityReferenceLine line = lineObject.AddComponent <EntityReferenceLine>(); line.i = i; line.sourceEntity = currentEntity; line.targetEntity = targetEntities[i]; } return; // wait a frame to let the new/deleted objects update } else { foreach (Transform child in transform) { child.GetComponent <EntityReferenceLine>().UpdatePositions(); } } if (currentEntity != null) { EntityPreviewManager.UpdateEntityPosition(currentEntity); } }
public static void Reset(Entity entity) { foreach (Entity target in targetEntities) { if (!(target is Substance)) { continue; } ((Substance)target).highlight = Color.clear; ((Substance)target).UpdateHighlight(); } if (currentEntity != entity) { if (currentEntity != null) { // entity deselected if (currentEntity is Substance) { ((Substance)currentEntity).highlight = Color.clear; ((Substance)currentEntity).UpdateHighlight(); } EntityPreviewManager.EntityDeselected(); } if (entity != null) { // entity selected if (entity is Substance) { ((Substance)entity).highlight = Color.white; ((Substance)entity).UpdateHighlight(); } EntityPreviewManager.EntitySelected(entity); } } currentEntity = entity; behaviorTarget = null; targetEntities.Clear(); currentTargetEntityI = -1; }
private void EntityPropertiesGUI() { Entity singleSelectedEntity = null; if (selectedEntities.Count == 1) { singleSelectedEntity = selectedEntities[0]; } EntityReferencePropertyManager.Reset(singleSelectedEntity); // could be null and that's fine (?) GUILayout.BeginVertical(GUI.skin.box); PropertiesObjectGUI(editEntity); GUILayout.EndVertical(); if (singleSelectedEntity != null && !(singleSelectedEntity is PlayerObject)) { GUILayout.BeginHorizontal(); if (GUIUtils.HighlightedButton("Clone")) { if (singleSelectedEntity is ObjectEntity) { ObjectEntity clone = (ObjectEntity)(singleSelectedEntity.Clone()); var pickerGUI = gameObject.AddComponent <FacePickerGUI>(); pickerGUI.voxelArray = voxelArray; pickerGUI.message = "Tap to place clone"; pickerGUI.pickAction = () => { if (!voxelArray.PlaceObject(clone)) { DialogGUI.ShowMessageDialog(gameObject, ActionBarGUI.OBJECT_NO_ROOM_ERROR); } }; } else if (singleSelectedEntity is Substance) { Substance clone = (Substance)(singleSelectedEntity.Clone()); clone.defaultPaint = voxelArray.GetSelectedPaint(); clone.defaultPaint.addSelected = false; clone.defaultPaint.storedSelected = false; voxelArray.substanceToCreate = clone; var createGUI = gameObject.AddComponent <CreateSubstanceGUI>(); createGUI.voxelArray = voxelArray; } } if (GUIUtils.HighlightedButton("Delete")) { DeleteButton(); } GUILayout.EndHorizontal(); } if (selectedEntities.Count > 1) { if (GUIUtils.HighlightedButton("Delete")) { DeleteButton(); } } TutorialGUI.TutorialHighlight("change sensor"); if (GUILayout.Button("Change Sensor")) { TypePickerGUI sensorMenu = gameObject.AddComponent <TypePickerGUI>(); sensorMenu.title = "Change Sensor"; sensorMenu.categories = new PropertiesObjectType[][] { GameScripts.sensors }; sensorMenu.handler = (PropertiesObjectType type) => { foreach (Entity entity in selectedEntities) { entity.sensor = (Sensor)type.Create(); } voxelArray.unsavedChanges = true; UpdateEditEntity(); }; } TutorialGUI.ClearHighlight(); GUILayout.BeginVertical(GUI.skin.box); PropertiesObjectGUI(editSensor, " Sensor"); GUILayout.EndVertical(); TutorialGUI.TutorialHighlight("add behavior"); if (GUILayout.Button("Add Behavior")) { NewBehaviorGUI behaviorMenu = gameObject.AddComponent <NewBehaviorGUI>(); behaviorMenu.title = "Add Behavior"; behaviorMenu.self = singleSelectedEntity; behaviorMenu.voxelArray = voxelArray; behaviorMenu.handler = (PropertiesObjectType behaviorType) => { foreach (Entity entity in selectedEntities) { EntityBehavior newBehavior = (EntityBehavior)behaviorType.Create(); // with multiple selected entities, NewBehaviorGUI doesn't check if behaviors // are valid for the selected entities if (newBehavior.targetEntity.entity == null && !newBehavior.targetEntityIsActivator && !newBehavior.BehaviorObjectType().rule(entity)) { continue; } entity.behaviors.Add(newBehavior); EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, newBehavior); } voxelArray.unsavedChanges = true; UpdateEditEntity(); scrollVelocity = new Vector2(0, 2000 * editBehaviors.Count); // scroll to bottom }; } TutorialGUI.ClearHighlight(); Color guiBaseColor = GUI.backgroundColor; StoredEntityBehavior behaviorToRemove = null; foreach (StoredEntityBehavior storedBehavior in editBehaviors) { TutorialGUI.TutorialHighlight("behaviors"); Entity behaviorTarget = null; if (storedBehavior.sharedTarget) { behaviorTarget = storedBehavior.allBehaviors[0].targetEntity.entity; } if (behaviorTarget != null) { EntityReferencePropertyManager.Next(behaviorTarget); GUI.backgroundColor = guiBaseColor * EntityReferencePropertyManager.GetColor(); } EntityReferencePropertyManager.SetBehaviorTarget(behaviorTarget); GUILayout.BeginVertical(GUI.skin.box); GUI.backgroundColor = guiBaseColor; PropertiesObjectGUI(storedBehavior, " Behavior", () => EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, storedBehavior.allBehaviors[0])); if (GUILayout.Button("Remove")) { behaviorToRemove = storedBehavior; } GUILayout.EndVertical(); // clear this every time, in case the next target is the same EntityReferencePropertyManager.SetBehaviorTarget(null); } if (behaviorToRemove != null) { foreach (Entity entity in selectedEntities) { foreach (EntityBehavior remove in behaviorToRemove.allBehaviors) { if (entity.behaviors.Remove(remove)) { break; } } } voxelArray.unsavedChanges = true; UpdateEditEntity(); EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, behaviorToRemove.allBehaviors[0]); } if (mismatchedSelectedBehaviorCounts) { GUILayout.BeginVertical(GUI.skin.box); GUILayout.Label("(other behaviors...)", GUIStyleSet.instance.labelTitle); GUILayout.EndVertical(); } }