예제 #1
0
    void HighlevelRuleGUI()
    {
        rulesScrollPos = GUILayout.BeginScrollView(rulesScrollPos, GUILayout.MaxHeight(Screen.height * 0.8f));

        GUILayout.Label("Rules:");

        foreach (BaseRuleElement.EventData eData in eventData)
        {
            GUILayout.Space(10);

            GUILayout.BeginHorizontal(areaBackgroundStyle, GUILayout.ExpandWidth(false));

            // display event
            if (eData.OnShowGui != null)
            {
                //GUILayout.BeginHorizontal(ruleEventStyle);
                eData.OnShowGui(eData);
                //GUILayout.EndHorizontal();
            }

            // show all reactions to this event
            BaseRuleElement.ReactionData r;
            if (eventReactionDict.ContainsKey(eData.id))
            {
                List<int> rIds = eventReactionDict[eData.id];

                GUILayout.BeginVertical(GUILayout.ExpandWidth(false));

                if (rIds.Count > 0)
                {
                    for (int i = 0; i < rIds.Count; i++)
                    {
                        r = reactionData.Find(item => item.id == rIds[i]);

                        GUILayout.BeginVertical();
                        if (r.OnShowGui != null)
                        {
                            GUILayout.BeginHorizontal(ruleReactionStyle, GUILayout.ExpandWidth(false));
                            r.OnShowGui(r);

                            if (GUILayout.Button("", ruleIconDelStyle))
                            {
                                DeleteReaction(r);
                            }
                            GUILayout.FlexibleSpace();

                            GUILayout.EndHorizontal();
                            GUILayout.Space(2);
                        }

                        GUILayout.EndVertical();
                    }
                }

                GUILayout.BeginHorizontal(ruleReactionStyle, GUILayout.ExpandWidth(false));
                if (GUILayout.Button("Add Reaction"))
                {
                    LoadEventAndReactionTypes();
                    addRule_selectedEventId = eData.id;
                    addRule_selectedReactionTypes.Add(0);
                    GuiState = RuleGUIState.ADDRULE_2;
                }
                GUILayout.EndHorizontal();

                GUILayout.EndVertical();
            }
            else
            {
                if (GUILayout.Button("Add Reaction"))
                {
                    LoadEventAndReactionTypes();
                    addRule_selectedEventId = eData.id;
                    addRule_selectedReactionTypes.Add(0);
                    GuiState = RuleGUIState.ADDRULE_2;
                }

                GUILayout.FlexibleSpace();
            }

            if (GUILayout.Button("", ruleIconDelStyle))
            {
                // delete confirmation
                ShowAlertWindow("Delete rule?", "Are you sure you want to delete this rule?", DeleteRule, DontDeleteRule);
                ruleToDelete = eData;
            }

            GUILayout.EndHorizontal();
        }

        GUILayout.Space(10);

        GUILayout.BeginHorizontal(areaBackgroundStyle, GUILayout.ExpandWidth(false));
        if (GUILayout.Button("Add Rule", GUILayout.Height(70), GUILayout.Width(100)))
        {
            AddRule();
        }
        GUILayout.EndHorizontal();

        HorizontalLine();

        GUILayout.Label("Actors:");

        foreach (BaseRuleElement.ActorData aData in actorData)
        {
            GUILayout.Space(10);
            GUILayout.BeginHorizontal(areaBackgroundStyle);

            if (aData.OnShowGui != null)
                aData.OnShowGui(aData);

            GUILayout.FlexibleSpace();

            if (GUILayout.Button("", ruleIconDelStyle))
            {
                ShowAlertWindow("Delete actor?", "Are you sure you want to delete this actor?", DeleteActor, DontDeleteActor);
                actorToDelete = aData;
            }

            GUILayout.EndHorizontal();
        }

        GUILayout.Space(10);
        GUILayout.BeginHorizontal(areaBackgroundStyle, GUILayout.ExpandWidth(false));
        if (GUILayout.Button("Add Actor", GUILayout.Height(70), GUILayout.Width(100)))
        {
            AddActor();
        }
        GUILayout.EndHorizontal();

        GUILayout.EndScrollView();
    }
예제 #2
0
    void AddActor_ChooseActor(int windowId)
    {
        GUILayout.Label("Choose Actor Type");

        GUILayout.FlexibleSpace();

        GUILayout.BeginHorizontal();

        addActor_selectedNameIndex = GUILayout.SelectionGrid(addActor_selectedNameIndex, actorNames, 2, RuleGUI.selectionGridStyle);

        GUILayout.EndHorizontal();

        GUILayout.FlexibleSpace();

        GUILayout.BeginHorizontal();

        if (GUILayout.Button("Cancel", GUILayout.Height(70), GUILayout.Width(100)))
        {
            GuiState = RuleGUIState.RULES;
            addActor_selectedNameIndex = 0;
        }
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Add", GUILayout.Height(70), GUILayout.Width(100)))
        {
            RuleGenerator generator = GetComponent<RuleGenerator>();

            BaseRuleElement.ActorData newActor = new BaseRuleElement.ActorData()
            {
                type = RuleParserLinq.ReflectOverSeveralNamespaces(actorNames[addActor_selectedNameIndex], RuleParserLinq.ExtraNamespaces),
                prefab = "",
                id = generator.GetActorId()
            };

            newActor.label = newActor.type.ToString();
            newActor.parameters = new List<BaseRuleElement.Param>();

            actorData.Add(newActor);
            generator.AddActorToScene(newActor);
            generator.GetActor(newActor.id).Initialize(generator);

            Analytics.LogEvent(Analytics.ruleEvent, Analytics.add_actor, newActor.label);

            if (OnAddedActor != null)
                OnAddedActor(ActorNames, newActor);

            // sort actor data
            actorData.Sort(new BaseRuleElement.OrderComparer<BaseRuleElement.ActorData>());

            GuiState = RuleGUIState.RULES;
            addActor_selectedNameIndex = 0;
        }

        GUILayout.EndHorizontal();
    }
예제 #3
0
 void DontDeleteActor()
 {
     GuiState = RuleGUIState.RULES;
     actorToDelete = null;
 }
    private void ParseActors(RuleGenerator generator, XElement xActors)
    {
        BaseRuleElement.ActorData currentActor = new BaseRuleElement.ActorData();
        foreach (XElement xActor in xActors.Elements("actor"))
        {
            currentActor.id = int.Parse(xActor.Element("id").Value);

            currentActor.label = xActor.Element("label").Value;

            if (xActor.Element("prefab") != null)
                currentActor.prefab = xActor.Element("prefab").Value;

            currentActor.type = ReflectOverSeveralNamespaces(xActor.Element("type").Value, ExtraNamespaces);

            currentActor.parameters = ParseParameters(xActor);

            // parse component parameters
            //currentActor.components = new List<BaseRuleElement.ComponentData>();
            //foreach (XElement xComponent in xActor.Elements("component"))
            //{
            //	BaseRuleElement.ComponentData currentComponent = new BaseRuleElement.ComponentData()
            //	{
            //		type = ReflectOverSeveralNamespaces(xComponent.Element("type").Value, ExtraNamespaces)
            //	};

            //	currentComponent.parameters = ParseParameters(xComponent);
            //	currentActor.components.Add(currentComponent);
            //}

            generator.AddRuleData(currentActor.DeepCopy());
        }
    }