public override void WindowGUI() { string targetButtonText = "Target: Self"; if (targetEntityIsActivator) { targetButtonText = "Target: Activators"; } else if (targetEntity != null) { targetButtonText = "Target: " + targetEntity.ToString(); } TutorialGUI.TutorialHighlight("behavior target"); if (GUIUtils.HighlightedButton(targetButtonText)) { entityPicker = PropertyGUIs.BehaviorTargetPicker(gameObject, voxelArray, self, value => { targetEntity = value.targetEntity.entity; targetEntityIsActivator = value.targetEntityIsActivator; UpdateBehaviorList(); }); } TutorialGUI.ClearHighlight(); if (typePicker != null) { typePicker.scroll = scroll; typePicker.WindowGUI(); scroll = typePicker.scroll; } // prevent panel from closing when entity picker closes holdOpen = entityPicker != null; }
public static EntityPickerGUI BehaviorTargetPicker(GameObject guiGameObject, VoxelArrayEditor voxelArray, Entity self, Action <EntityBehavior.BehaviorTargetProperty> handler) { EntityPickerGUI entityPicker = guiGameObject.AddComponent <EntityPickerGUI>(); entityPicker.voxelArray = voxelArray; entityPicker.allowNone = true; entityPicker.allowMultiple = false; entityPicker.allowNull = true; entityPicker.nullName = "Activators"; entityPicker.handler = (ICollection <Entity> entities) => { entityPicker = null; foreach (Entity entity in entities) { if (entity == null) // activator { handler(new EntityBehavior.BehaviorTargetProperty(new EntityReference(null), true)); } else if (entity == self) { handler(new EntityBehavior.BehaviorTargetProperty(new EntityReference(null), false)); } else { handler(new EntityBehavior.BehaviorTargetProperty(new EntityReference(entity), false)); } return; } handler(new EntityBehavior.BehaviorTargetProperty(new EntityReference(null), false)); }; return(entityPicker); }
public override void WindowGUI() { if (GUILayout.Button("Specific object")) { EntityPickerGUI picker = gameObject.AddComponent <EntityPickerGUI>(); picker.voxelArray = voxelArray; picker.allowNone = false; picker.allowMultiple = false; picker.handler = (ICollection <Entity> entities) => { if (entities.Count > 0) { foreach (Entity entity in entities) // only first one { handler(new ActivatedSensor.EntityFilter(entity)); return; } } }; Destroy(this); } if (GUILayout.Button("Object type")) { TypePickerGUI picker = gameObject.AddComponent <TypePickerGUI>(); picker.title = "Filter by object type"; picker.categories = new PropertiesObjectType[][] { GameScripts.entityFilterTypes }; picker.handler = (PropertiesObjectType type) => { handler(new ActivatedSensor.EntityTypeFilter(type)); }; Destroy(this); } if (GUILayout.Button("Active behavior type")) { TypePickerGUI picker = gameObject.AddComponent <TypePickerGUI>(); picker.title = "Filter by behavior type"; picker.categoryNames = GameScripts.behaviorTabNames; picker.categories = GameScripts.behaviorTabs; picker.handler = (PropertiesObjectType type) => { handler(new ActivatedSensor.EntityTypeFilter(type)); }; Destroy(this); } if (GUILayout.Button("Tag")) { TagPickerGUI picker = gameObject.AddComponent <TagPickerGUI>(); picker.title = "Filter by tag"; picker.handler = (byte tag) => { handler(new ActivatedSensor.TagFilter(tag)); }; Destroy(this); } }
public override void WindowGUI() { GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); DirectionButtons(); GUILayout.BeginHorizontal(); if (allowObjectTarget && GUILayout.Button("Pick object")) { EntityPickerGUI picker = gameObject.AddComponent <EntityPickerGUI>(); picker.voxelArray = voxelArray; picker.allowNone = false; picker.allowMultiple = false; picker.handler = (ICollection <Entity> entities) => { if (entities.Count > 0) { foreach (Entity entity in entities) // only first one { handler(new Target(entity)); return; } } }; Destroy(this); } if (allowNullTarget && GUILayout.Button("Any")) { handler(new Target(null)); Destroy(this); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.BeginVertical(); GUILayout.Label("North:"); GUILayout.Box("", GUIStyle.none, GUILayout.Width(150), GUILayout.Height(150)); float compassRotation = -Camera.current.transform.parent.rotation.eulerAngles.y; DrawCompass(GUILayoutUtility.GetLastRect(), compassRotation); GUILayout.EndVertical(); GUILayout.EndHorizontal(); }
public static void _EntityReferenceCustom(Property property, bool allowNull, string nullName) { var reference = (EntityReference)property.value; string valueString = nullName; Color baseColor = GUI.color; if (reference.entity != null) { EntityReferencePropertyManager.Next(reference.entity); GUI.color = baseColor * EntityReferencePropertyManager.GetColor(); valueString = EntityReferencePropertyManager.GetName(); } GUILayout.BeginHorizontal(); AlignedLabel(property); if (GUILayout.Button(valueString, GUI.skin.textField)) { EntityPickerGUI picker = GUIManager.guiGameObject.AddComponent <EntityPickerGUI>(); picker.voxelArray = VoxelArrayEditor.instance; picker.allowNone = false; picker.allowMultiple = false; picker.allowNull = allowNull; picker.nullName = nullName; picker.handler = (ICollection <Entity> entities) => { foreach (Entity entity in entities) { property.value = new EntityReference(entity); return; } property.value = null; }; } GUILayout.EndHorizontal(); GUI.color = baseColor; }
private void InputsGUI(Property property) { Input[] inputs = (Input[])property.value; GUILayout.Label("Inputs:"); if (GUILayout.Button("Add Input")) { EntityPickerGUI picker = GUIPanel.guiGameObject.AddComponent <EntityPickerGUI>(); picker.voxelArray = VoxelArrayEditor.instance; picker.handler = (ICollection <Entity> entities) => { Input[] newInputs = new Input[inputs.Length + entities.Count]; Array.Copy(inputs, newInputs, inputs.Length); int i = 0; foreach (Entity entity in entities) { newInputs[inputs.Length + i] = new Input(entity); i++; } property.value = newInputs; }; } bool copyArray = false; int inputToDelete = -1; Color baseColor = GUI.color; for (int i = 0; i < inputs.Length; i++) { Entity e = inputs[i].entityRef.entity; if (e == null) { inputToDelete = i; } EntityReferencePropertyManager.Next(e); GUI.color = baseColor * EntityReferencePropertyManager.GetColor(); GUILayout.BeginVertical(GUI.skin.box); GUILayout.BeginHorizontal(); GUILayout.Label(EntityReferencePropertyManager.GetName() + " "); GUILayout.FlexibleSpace(); if (GUILayout.Button("X")) { inputToDelete = i; } GUILayout.EndHorizontal(); int negativeNum = inputs[i].negative ? 1 : 0; int newNegativeNum = GUILayout.SelectionGrid(negativeNum, new string[] { "Positive", "Negative" }, 2, GUI.skin.GetStyle("button_tab")); if (negativeNum != newNegativeNum) { inputs[i].negative = newNegativeNum == 1; copyArray = true; } GUILayout.EndVertical(); } GUI.color = baseColor; if (inputToDelete != -1) { Input[] newInputs = new Input[inputs.Length - 1]; Array.Copy(inputs, newInputs, inputToDelete); Array.Copy(inputs, inputToDelete + 1, newInputs, inputToDelete, newInputs.Length - inputToDelete); property.value = newInputs; } else if (copyArray) { Input[] newInputs = new Input[inputs.Length]; Array.Copy(inputs, newInputs, inputs.Length); property.value = newInputs; // mark unsaved changes flag } }