public void AddUISelector(List <GameObject> childList, out UiSelector uiSelector, bool ignorePaths) { // // Set up the pie menu for choosing new objects to add to the scene. // uiSelector = new PieSelector(null, "Sim.EditObjects.PickThing"); // Size used for all items. Vector2 size = new Vector2(1.0f, 1.0f); // Boku var boku = ActorManager.GetActor("BokuBot"); uiSelector.AddItem(new ActorMenuItem(uiSelector, boku.LocalizedName, boku.MenuTextureFile, boku, size, radialOffset)); // Rover var rover = ActorManager.GetActor("Rover"); uiSelector.AddItem(new ActorMenuItem(uiSelector, rover.LocalizedName, rover.MenuTextureFile, rover, size, radialOffset)); // Fruit var fruit = ActorManager.GetActor("Fruit"); uiSelector.AddItem(new ActorMenuItem(uiSelector, fruit.LocalizedName, fruit.MenuTextureFile, fruit, size, radialOffset)); #region BotGroup1 { RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.botsI", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // bot group items var actors = ActorManager.GetActorsInGroup("BotGroup1"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region BotGroup2 // some might think a subroutine would be a better way to structure this... { RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.botsII", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // bot group items var actors = ActorManager.GetActorsInGroup("BotGroup2"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region objects group (star, coin, heart) { RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.objects", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); var actors = ActorManager.GetActorsInGroup("ObjectGroup"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region trees group // trees group // { RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.tree", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickTree"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // Trees group items var actors = ActorManager.GetActorsInGroup("TreeGroup"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region pipe group { RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.pipe", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickPipe"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // Trees group items var actors = ActorManager.GetActorsInGroup("PipeGroup"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region underwater group // underwater group // { RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.underwater", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickUnderwater"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // Trees group items var actors = ActorManager.GetActorsInGroup("UnderwaterGroup"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion #region rock group // rock group // { var rock = ActorManager.GetActor("Rock"); RenderObject group = new ActorMenuItem(uiSelector, rock.LocalizedName, @"filter.rock", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickRock"); // move it out front ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); // Trees group items var actors = ActorManager.GetActorsInGroup("RockGroup"); for (int i = 0; i < actors.Count; i++) { selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset)); } } #endregion // WayPoint #region waypoint group if (!ignorePaths) { RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\modifier.waypointwhite", null, size, radialOffset); UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken"); ITransform transformSelector = selectorGroup as ITransform; transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem); transformSelector.Compose(); selectorGroup.ComposeDefault += NewItemSelectorComposeDefault; selectorGroup.Select += SelectNewItemSelector; selectorGroup.Cancel += CancelNewItemSelector; uiSelector.AddGroup(group, selectorGroup); selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathGeneric"), @"filter.pathplain", null, size, radialOffset)); selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathRoad"), @"filter.pathroad", null, size, radialOffset)); selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathWall"), @"filter.pathwall", null, size, radialOffset)); selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathVeggie"), @"filter.pathflora", null, size, radialOffset)); //uiSelector.AddItem(new ActorMenuItem(uiSelector, Strings.Localize("actorNames.wayPoint"), null, @"modifier.waypointwhite", null, size, radialOffset)); // move the selector into position { //ITransform transformSelector = uiSelector as ITransform; //transformSelector.Local.RotationY = MathHelper.ToRadians(14.0f); //transformSelector.Local.RotationX = MathHelper.ToRadians(14.0f); //transformSelector.Compose(); } // Add the selector to the child list. } #endregion waypoint group uiSelector.ComposeDefault += NewItemSelectorComposeDefault; uiSelector.Select += SelectNewItemSelector; uiSelector.Cancel += CancelNewItemSelector; childList.Add(uiSelector); } // end of AddUISelector()
} // end of EditObjectUpdateObj CancelNewItemSelector() public void SelectNewItemSelector(UiSelector selector) { UiSelector.GroupData groupData = selector.SelectedItem as UiSelector.GroupData; if (groupData != null) { // sub group was activated Foley.PlayProgrammingMoveOut(); } else { Instrumentation.IncrementCounter(Instrumentation.CounterId.AddItem); GameActor thingToColor = null; GameActor thingToDistort = null; //Object item = selector.ObjectSelectedItem; ActorMenuItem item = selector.ObjectSelectedItem as ActorMenuItem; if (item != null) { if (item.StaticActor != null) { if (addPositionIsExplicit) { ///Client has requested a specific position to add this guy. ///Give the people what they want. thingToColor = parent.AddActor( ActorFactory.Create(item.StaticActor), new Vector3(addPosition, float.MaxValue), InGame.inGame.shared.camera.Rotation); // Reset addPositionIsExplicit = false; } else { /// Default is to add at the cursor position. thingToColor = parent.AddActorAtCursor(ActorFactory.Create(item.StaticActor)); } // Give a ref to the actor to the HelpCard. If it's active it // can then program the actor's brain. InGame.inGame.shared.addItemHelpCard.Actor = thingToColor as GameActor; } else if (item.TextureFilename.StartsWith("filter.path")) { if (parent.UnderBudget) { /// If the waypoint editor is active, let it handle this. if (!shared.editWayPoint.Active) { int pathType = 0; if (item.TextureFilename.EndsWith("road")) { pathType = Road.LastRoadCreated; } else if (item.TextureFilename.Contains("wall")) { pathType = Road.LastWallCreated; } else if (item.TextureFilename.Contains("flora")) { pathType = Road.LastVegCreated; } Road.GenIndex = pathType; Vector3 pos = addPositionIsExplicit ? new Vector3(addPosition, float.MaxValue) : parent.cursor3D.Position; shared.editWayPoint.NewPath(pos, shared.curObjectColor); } } else { Instrumentation.IncrementCounter(Instrumentation.CounterId.AddItemNoBudget); Foley.PlayNoBudget(); } } } else { Debug.Assert(false, "How did this happen?"); } if (thingToColor != null) { Foley.PlayProgrammingAdd(); shared.curObjectColor = ColorPalette.GetIndexFromColor(thingToColor.ClassColor); // thingToColor.Classcolor = ColorPalette.GetColorFromIndex(shared.curObjectColor); thingToDistort = thingToColor; } if (thingToDistort != null) { parent.DistortionPulse(thingToDistort, true); } newItemSelectorShim.Deactivate(); InGame.IsLevelDirty = true; } } // end of EditObjectUpdateObj SelectNewItemSelector()