public override void LayoutComposedItem(Object item) { ITransform transformItem = item as ITransform; // centered transformItem.Local.Translation = Vector3.Zero; transformItem.Compose(); }
public void SetFocus(int indexNew) { float twitchTime = 0.1f; // Undo previous slice selection state. if ((this.indexLastHoverItem > -1) && (this.indexLastHoverItem != indexNew)) { PieMenuSlice menuSlice = this.slices[indexLastHoverItem]; menuSlice.DiffuseColor = PieSelector.RenderObjSlice.ColorNormal; if (slices.Count > 2) // dont move them if only two { ITransform transformSlice = menuSlice.mySlice as ITransform; TwitchManager.Set <Vector3> set = delegate(Vector3 value, Object param) { transformSlice.Local.OriginTranslation = value; transformSlice.Compose(); }; TwitchManager.CreateTwitch <Vector3>( transformSlice.Local.OriginTranslation, SliceOffsetDefault, set, twitchTime, TwitchCurve.Shape.EaseInOut); } } // apply new slice selection state // if (indexNew != indexCenteredItem) if ((indexNew > -1) && (indexNew != indexCurrentHoverItem)) { PieMenuSlice menuSlice = this.slices[indexNew]; menuSlice.DiffuseColor = PieSelector.RenderObjSlice.ColorSelectedBright; Foley.PlayClick(); if (slices.Count > 2) // don't move them if only two { ITransform transformSlice = menuSlice.mySlice as ITransform; { TwitchManager.Set <Vector3> set = delegate(Vector3 value, Object param) { transformSlice.Local.OriginTranslation = value; transformSlice.Compose(); }; TwitchManager.CreateTwitch <Vector3>( transformSlice.Local.OriginTranslation, new Vector3(0.20f, 0.0f, 0.0f), set, twitchTime, TwitchCurve.Shape.EaseInOut); } } indexCurrentHoverItem = indexNew; } }
public override void LayoutItems(ArrayList items) { float neededCircumference; // calc needed circumference // CalcLayoutInfoFromItems(out neededCircumference, out this.maxItemRadius, items, 1); // calc radius of the spiral // float radius = neededCircumference / MathHelper.TwoPi; float spacingCircumference = 0.0f; // spacing between items on the circumference float radiusSpiral = this.maxItemRadius * 2.0f; { // radius is too small, must increase // this is assuming the center composed item is the same size as the other items radius = this.maxItemRadius * 2.0f; // and provide the extra spacing between items on the circumference float newCircumference = MathHelper.TwoPi * radius; spacingCircumference = (newCircumference - neededCircumference) / items.Count; neededCircumference = newCircumference; } // layout items into position spiraling on the circumference // float headingArcLength = 0.0f; for (int indexItem = 0; indexItem < items.Count; indexItem++) { OrbitalSelector.ItemData itemData = items[indexItem] as OrbitalSelector.ItemData; IBounding boundingItem = itemData.item as IBounding; ITransform transformItem = itemData.item as ITransform; // skip the first one so it is top dead center if (indexItem != 0) { // update angle along arc headingArcLength += boundingItem.BoundingSphere.Radius; } // create a vector to the current heading float headingAngle = headingArcLength / radius; Vector3 heading = new Vector3((float)(Math.Sin(headingAngle) * radiusSpiral), (float)(Math.Cos(headingAngle) * radiusSpiral), 0.0f); // set position transformItem.Local.Translation = heading; transformItem.Compose(); // update angle along arc headingArcLength += boundingItem.BoundingSphere.Radius + spacingCircumference; // update the spiral radius radiusSpiral += boundingItem.BoundingSphere.Radius / 6.0f; } this.maxOrbit = radiusSpiral; }
bool ITransform.Compose() { ITransform transform = renderPanel as ITransform; bool changed = transform.Compose(); if (changed) { RecalcMatrix(); } return(changed); }
protected void AddCard(Matrix local, ProgrammingElement element, CardSpace.CardType cardType, ControlRenderObj renderClause) { ReflexCard card = new ReflexCard(this, reflex, element, cardType, controls); card.renderClause = renderClause; ITransform transformCard = card as ITransform; Matrix anchor = card.Anchor(true); // invert the anchor to apply to its owner transformCard.Local.Matrix = local * anchor; // *shiftOutOfSocket; transformCard.Compose(); listControls.Add(card); card.Change += CardChanged; }
private void BuildSlices() { ProgrammingElement el = null; ///--------------------- /// float circumferenceAtItems = 5.0f + slices.Count / 6.0f; float maxItemRadius = 0.5f + slices.Count / 40.0f; const float radiusAtItemSpacing = 0.2f; // calculate layout information from items // depreciated.... //CalcLayoutInfoFromItems(out circumferenceAtItems, out maxItemRadius); // calc radius of the pie this.radiusAtItems = circumferenceAtItems / MathHelper.TwoPi + radiusAtItemSpacing; float spacingCircumference = 0.0f; // spacing between items on the circumference // adjust spacing if radius is smaller than the inner radius (one item) if (this.radiusAtItems < maxItemRadius * 2.0f) { // radius is too small, must increase this.radiusAtItems = maxItemRadius * 2.0f + radiusAtItemSpacing; // and provide the extra spacing between items on the circumference float newCircumference = MathHelper.TwoPi * this.radiusAtItems; spacingCircumference = (newCircumference - circumferenceAtItems) / slices.Count; circumferenceAtItems = newCircumference; } float radiusInside = maxItemRadius * 1.2f; // with a little spacing float radiusOutside = this.radiusAtItems + (maxItemRadius * 1.2f); // with a little spacing float arcLength = MathHelper.TwoPi / slices.Count; Vector2 posUV = Vector2.Zero; Matrix invWorld = Matrix.Invert(worldMatrix); Fugly fuglyTransform = new Fugly(); for (int indexItem = 0; indexItem < slices.Count; indexItem++) { ReflexCard reflex = slices[indexItem].MenuItem as ReflexCard; if (reflex != null) { el = reflex.Reflex.Sensor; } float rot = MathHelper.PiOver2 - indexItem * arcLength; // slices[indexItem].mySlice = BuildPieSlice(el, arcLength, radiusInside, radiusOutside); slices[indexItem].mySlice = BuildPieSlice(slices[indexItem].sliceType, arcLength, radiusInside, radiusOutside); innerRadius = radiusInside; outerRadius = radiusOutside; // create a slice for every item ITransform transformSlice = slices[indexItem].mySlice as ITransform; // rotate the slice into place transformSlice.Local.OriginTranslation = SliceOffsetDefault; // move away from center to space them transformSlice.Local.RotationZ = rot; transformSlice.Compose(); // setting position for the icon.... Matrix rotation = Matrix.CreateRotationZ(rot); Vector3 fixRotation = new Vector3(radiusInside + (radiusOutside - radiusInside) * 0.6f, 0.0f, 0.0f); slices[indexItem].Position = camera.WorldToScreenCoordsVector2(Vector3.Transform(fixRotation, rotation)); slices[indexItem].Position -= slices[indexItem].WhenBlockSize / 2; } }
bool ITransform.Compose() { ITransform transform = renderObj as ITransform; return(transform.Compose()); }
public override void LayoutItems(ArrayList items) { float neededCircumference; // calc needed circumference // CalcLayoutInfoFromItems(out neededCircumference, out this.maxItemRadius, items, 1); // calc radius of the pie // float radius = neededCircumference / MathHelper.TwoPi; float spacingCircumference = 0.0f; // spacing between items on the circumference if (radius < this.maxItemRadius * 2.0f) { // radius is too small, must increase // this is assuming the center composed item is the same size as the other items radius = this.maxItemRadius * 2.0f; // and provide the extra spacing between items on the circumference float newCircumference = MathHelper.TwoPi * radius; spacingCircumference = (newCircumference - neededCircumference) / items.Count; neededCircumference = newCircumference; } this.maxOrbit = radius; // layout items into position on the circumference // float headingArcLength = 0.0f; for (int indexItem = 0; indexItem < items.Count; indexItem++) { OrbitalSelector.ItemData itemData = items[indexItem] as OrbitalSelector.ItemData; IBounding boundingItem = itemData.item as IBounding; ITransform transformItem = itemData.item as ITransform; // skip the first one so it is top dead center if (indexItem != 0) { // update angle along arc headingArcLength += boundingItem.BoundingSphere.Radius; } // create a vector to the current heading float headingAngle = headingArcLength / radius; Vector3 heading = new Vector3((float)(Math.Sin(headingAngle) * radius), (float)(Math.Cos(headingAngle) * radius), 0.0f); // set position by animations // transformItem.Local = Matrix.CreateTranslation(heading); TwitchManager.GetVector3 get = delegate(Object param) { return(Vector3.Zero); }; TwitchManager.SetVector3 set = delegate(Vector3 value, Object param) { ITransform transformObject = param as ITransform; if (transformObject != null) { transformObject.Local.Translation = value; transformObject.Compose(); } }; TwitchManager.Vector3Twitch twitch = new TwitchManager.Vector3Twitch( get, set, heading, 0.2f, TwitchCurve.Shape.EaseOut, transformItem); twitch.Play(); // update angle along arc headingArcLength += boundingItem.BoundingSphere.Radius + spacingCircumference; } }
public override void LayoutItems(ArrayList items) { float neededCircumference; int rows; int cols; // calc needed circumference // CalcLayoutInfoFromItems(out this.maxItemRadius, out rows, out cols, items); float itemWidth = this.maxItemRadius * 2.0f * (float)Math.Sin(Math.PI * 0.25) + 0.1f; this.maxOrbit = this.maxItemRadius * (float)rows / 2.0f; this.maxInterItemSpacing = this.maxItemRadius * 2.0f; for (int indexItem = 0; indexItem < items.Count; indexItem++) { OrbitalSelector.ItemData itemData = items[indexItem] as OrbitalSelector.ItemData; IBounding boundingItem = itemData.item as IBounding; ITransform transformItem = itemData.item as ITransform; int col = (indexItem % cols) - (cols / 2); int row = (indexItem / cols) - (rows / 2); Vector3 position = new Vector3((float)col * itemWidth, (float)row * -itemWidth, 0.0f); Debug.Print("[{0}][{1}] ({2,8:F},{3,8:F})", col, row, position.X, position.Y); this.maxOrbit = MathHelper.Max(this.maxOrbit, Math.Abs(position.X)); // set position by animations // transformItem.Local = Matrix.CreateTranslation(heading); TwitchManager.GetVector3 get = delegate(Object param) { return(Vector3.Zero); }; TwitchManager.SetVector3 set = delegate(Vector3 value, Object param) { ITransform transformObject = param as ITransform; if (transformObject != null) { transformObject.Local.Translation = value; transformObject.Compose(); } }; TwitchManager.Vector3Twitch twitch = new TwitchManager.Vector3Twitch( get, set, position, 0.2f, TwitchCurve.Shape.EaseOut, transformItem); twitch.Play(); } /* * // layout items into position on a grid starting top left * // * int ring = 1; * int cols = 3; // first ring is 3x3 * int colEnd = (cols / 2); * int col = -(colEnd); * int row = -(colEnd); * int colInc = 1; * int rowInc = 0; * * float itemWidth = this.maxItemRadius * 2.0f; * * for (int indexItem = 0; indexItem < items.Count; indexItem++) * { * OrbitalSelector.ItemData itemData = items[indexItem] as OrbitalSelector.ItemData; * IBounding boundingItem = itemData.item as IBounding; * ITransform transformItem = itemData.item as ITransform; * * * Vector3 position = new Vector3((float)col * itemWidth, (float)row * -itemWidth, 0.0f); * Debug.Print("[{0}][{1}] ({2,8:F},{3,8:F})", col, row, position.X, position.Y); * * col += colInc; * row += rowInc; * // reached right * if (col > colEnd) * { * col = colEnd; * colInc = 0; * rowInc = 1; * row += rowInc; * } * // reached bottom * if (row > colEnd) * { * row = colEnd; * colInc = -1; * rowInc = 0; * col += colInc; * } * // reached left * if (col < -colEnd) * { * col = -colEnd; * colInc = 0; * rowInc = -1; * row += rowInc; * } * // reached top * if (col == -colEnd && row == -colEnd) * { * cols += 2; * colEnd = (cols / 2); * col = -(colEnd); * row = -(colEnd); * colInc = 1; * rowInc = 0; * } * * // set position by animations * // transformItem.Local = Matrix.CreateTranslation(heading); * TwitchManager.GetVector3 get = delegate(Object param) * { * return Vector3.Zero; * }; * TwitchManager.SetVector3 set = delegate(Vector3 value, Object param) * { * ITransform transformObject = param as ITransform; * if (transformObject != null) * { * transformObject.Local.Translation = value; * transformObject.Compose(); * } * }; * TwitchManager.Vector3Twitch twitch = new TwitchManager.Vector3Twitch( * get, * set, * position, * 0.2f, * TwitchCurve.Shape.EaseOut, * transformItem); * twitch.Play(); * } * this.maxOrbit = colEnd * itemWidth; */ }
protected void CreateCards(string idState) { // create handle // ReflexHandle reflexHandle = new ReflexHandle(this, reflex, controls); ITransform transformHandle = reflexHandle as ITransform; Matrix anchor; renderPanel.GetPositionTransform(idRowHandleAnchor, out anchor); transformHandle.Local.Matrix = anchor; transformHandle.Compose(); listControls.Add(reflexHandle); Matrix chain; renderPanel.GetPositionTransform(idLeftClauseAnchor, out chain); Matrix clauseOffset = Matrix.Identity; { Matrix leftClause; Matrix rightClause; renderPanel.GetPositionTransform(idLeftClauseAnchor, out leftClause); renderPanel.GetPositionTransform(idRightClauseAnchor, out rightClause); clauseOffset.Translation = rightClause.Translation - leftClause.Translation; } Matrix local; // create the begining of the when clause trays // chain = AddClauseLeft(this.listWhenClause, chain, idWhenClause, idState); // create cards for when clause // //Matrix shiftOutOfSocket = Matrix.CreateTranslation(new Vector3(0.0f, 0.0f, 0.05f)); CardSpace.CardType plusType = CardSpace.CardType.Sensor; ProgrammingElement plusElement = CardSpace.Cards.NullSensor; if (reflex.Sensor != null) { chain = AddClauseRepeat(this.listWhenClause, out local, chain, idWhenClause, idState); AddCard(local, reflex.Sensor, CardSpace.CardType.Sensor, this.listWhenClause[this.listWhenClause.Count - 1] as ControlRenderObj); plusType = CardSpace.CardType.Filter; plusElement = CardSpace.Cards.NullFilter; } if (reflex.RawFilters != null) { for (int iFilter = 0; iFilter < reflex.RawFilters.Count; iFilter++) { Filter filter = reflex.RawFilters[iFilter] as Filter; chain = AddClauseRepeat(this.listWhenClause, out local, chain, idWhenClause, idState); AddCard(local, filter, CardSpace.CardType.Filter, this.listWhenClause[this.listWhenClause.Count - 1] as ControlRenderObj); } } // create the end of the when clause chain = AddClauseRight(this.listWhenClause, out local, chain, idWhenClause, idState); if (ReflexCard.HasSelectableElements(reflex, plusType)) { // add the ever present + with context AddCard(local, plusElement, plusType, this.listWhenClause[this.listWhenClause.Count - 1] as ControlRenderObj); } // adjust for next clause chain *= clauseOffset; // create the begining of the do clause trays // chain = AddClauseLeft(this.listDoClause, chain, idDoClause, idState); plusType = CardSpace.CardType.Actuator; plusElement = CardSpace.Cards.NullActuator; if (reflex.Actuator != null) { chain = AddClauseRepeat(this.listDoClause, out local, chain, idDoClause, idState); AddCard(local, reflex.Actuator, CardSpace.CardType.Actuator, this.listDoClause[this.listDoClause.Count - 1] as ControlRenderObj); // Specify Selector type here, since selector menu will pull in modifiers as well. plusType = CardSpace.CardType.Selector; plusElement = CardSpace.Cards.NullSelector; } if (reflex.Selector != null && !reflex.Selector.hiddenDefault) { chain = AddClauseRepeat(this.listDoClause, out local, chain, idDoClause, idState); AddCard(local, reflex.Selector, CardSpace.CardType.Selector, this.listDoClause[this.listDoClause.Count - 1] as ControlRenderObj); // Specify Selector type here, since selector menu will pull in modifiers as well. plusType = CardSpace.CardType.Selector; plusElement = CardSpace.Cards.NullSelector; } if (reflex.Modifiers != null) { for (int iModifier = 0; iModifier < reflex.Modifiers.Count; iModifier++) { Modifier modifier = reflex.Modifiers[iModifier] as Modifier; chain = AddClauseRepeat(this.listDoClause, out local, chain, idDoClause, idState); AddCard(local, modifier, CardSpace.CardType.Modifier, this.listDoClause[this.listDoClause.Count - 1] as ControlRenderObj); } } // create the end of the do clause chain = AddClauseRight(this.listDoClause, out local, chain, idDoClause, idState); CardSpace.CardType cardTypeMask; if (reflex.Actuator == null) { cardTypeMask = CardSpace.CardType.Actuator; } else if (reflex.Selector == null && reflex.Modifiers.Count == 0) { cardTypeMask = CardSpace.CardType.Selector | CardSpace.CardType.Modifier; } else if (reflex.Selector == null && reflex.Modifiers.Count == 1 && this.ActiveCard > 0 && this.ActiveCard < this.listControls.Count && this.listControls[this.ActiveCard] is ReflexCard) { cardTypeMask = CardSpace.CardType.Modifier; if ((this.listControls[this.ActiveCard] as ReflexCard).Card is Modifier) { cardTypeMask |= CardSpace.CardType.Selector; } } else { cardTypeMask = CardSpace.CardType.Modifier; } if (ReflexCard.HasSelectableElements(reflex, cardTypeMask)) { // HACK HACK If use has DO Move Freeze this will still add a '+' to the // end because it thinks that a selector is still a possibility. The // proper solution is to either make Freeze a selector or, better yet, // do away with selectors altogether. if (reflex.modifierUpids.Length == 0 || reflex.modifierUpids[0] != "modifier.constraint.immobile") { // add the + with context AddCard(local, plusElement, plusType, this.listDoClause[this.listDoClause.Count - 1] as ControlRenderObj); } } for (int indexClause = 0; indexClause < this.listWhenClause.Count; indexClause++) { ControlRenderObj renderObj = this.listWhenClause[indexClause] as ControlRenderObj; renderObj.Activate(); renderPanel.renderList.Add(renderObj); } for (int indexClause = 0; indexClause < this.listDoClause.Count; indexClause++) { ControlRenderObj renderObj = this.listDoClause[indexClause] as ControlRenderObj; renderObj.Activate(); renderPanel.renderList.Add(renderObj); } for (int indexCard = 0; indexCard < this.listControls.Count; indexCard++) { GameObject gameObjCard = this.listControls[indexCard] as GameObject; gameObjCard.Activate(); gameObjCard.Refresh(updateObjEditCards.updateList, renderPanel.renderList); } }
/// <summary> /// Moves the curent panel to the correct indent position to match it's current indent level. /// If the panel is already in the correct position, nothing happens. This is designed to /// work fine if called every frame for each panel. /// </summary> public void AnimatePanelIndent(bool force) { float kIndentSpacing = 0.6f; float x = reflex.Indentation * kIndentSpacing; if (position.X != x || force) { position.X = x; ITransform transform = this as ITransform; if (transform != null) { TwitchManager.Set <float> set = delegate(float value, Object param) { Vector3 trans = transform.Local.Translation; trans.X = value; transform.Local.Translation = trans; transform.Compose(); }; TwitchManager.CreateTwitch <float>(transform.Local.Translation.X, position.X, set, 0.1f, TwitchCurve.Shape.EaseOut, this, null); } } }
public void AnimatePanelShift(float changeZ, TwitchCompleteEvent callback) { position.Z += changeZ; ITransform transform = this as ITransform; if (transform != null) { TwitchManager.Set <float> set = delegate(float value, Object param) { Vector3 trans = transform.Local.Translation; trans.Z = value; transform.Local.Translation = trans; transform.Compose(); }; TwitchManager.CreateTwitch <float>(transform.Local.Translation.Z, position.Z, set, twitchTime, TwitchCurve.Shape.EaseOut, this, callback); } }
public void AnimatePanelMove(float changeY) { position.Y += changeY; ITransform transform = this as ITransform; if (transform != null) { TwitchManager.Set <float> set = delegate(float value, Object param) { Vector3 trans = transform.Local.Translation; trans.Y = value; transform.Local.Translation = trans; transform.Compose(); }; TwitchManager.CreateTwitch <float>(transform.Local.Translation.Y, position.Y, set, twitchTime, TwitchCurve.Shape.EaseOut); } }
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()