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(); }
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(); }
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()); } }