Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
 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);
     }
 }
Exemplo n.º 4
0
    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();
    }
Exemplo n.º 5
0
    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;
    }
Exemplo n.º 6
0
    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
        }
    }