private void DrawAnimatorControl(AnimatorControl control) { EditorGroup.Horizontal(() => control.ignoreUi = EditorGUILayout.Toggle("ignoreUi", control.ignoreUi)); EditorGroup.Horizontal(() => { control.useInputButton = EditorGUILayout.Toggle("useInputButton", control.useInputButton); if (control.useInputButton == false) { return; } control.inputButton = (PointerEventData.InputButton)EditorGUILayout.Popup((int)control.inputButton, _buttonList); }); EditorGroup.Horizontal(() => { EditorGUILayout.LabelField($"Reverse mode", EditorStyles.label, GUILayout.MaxWidth(100)); var popup = (AnimationModes)EditorGUILayout.Popup((int)control.mode, _modeList); if (popup == control.mode) { return; } control.mode = popup; control.ModeChanged(); }); if (GUILayout.Button("UpdateAllParameters")) { foreach (var systemAnimator in control.animatorSystems) { systemAnimator.UpdateParameters(); } } }
public Java.Lang.Object Apply(Java.Lang.Object context, Java.Lang.Object groupName) { // Developers can create a special group layout for any given group name. if(groupName.Equals("Group 2")) { EditorGroup group = new EditorGroup((Context)context, groupName.ToString(), Resource.Layout.dataform_custom_group); // Each group can have a specific layout manager, be it a table layout, a linear layout, a placeholder layout or even something completely custom. group.LayoutManager = new DataFormPlaceholderLayoutManager((Context)context, Resource.Layout.dataform_group_placeholder_layout); return group; } return null; }
private void btnGroup_Click(object sender, System.EventArgs e) { if (string.IsNullOrEmpty(tbName.Text)) { MessageBox.Show(@"You must provide a name for this group"); return; } // Create our new Group EditorGroup vg = new EditorGroup(Globals.Game, RenderWindow); vg.Name = tbName.Text; vg.ShowBoundingBox = true; for (int i = 0; i < rlSceneObjects.SelectedItems.Count; i++) { if (rlSceneObjects.SelectedItems[i] is EditorGroup) { var vo = rlSceneObjects.SelectedItems[i] as EditorGroup; if (vo != null) { foreach (var v in vo.Objects) { vg.Objects.Add(v); SceneObjects.Remove(v); } } } else { var vo = rlSceneObjects.SelectedItems[i] as VisualObject; if (vo != null) { if (i == 0) { vg.Scale = vo.Scale; vg.Position = vo.Position; } vg.Objects.Add(vo); SceneObjects.Remove(vo); } } } vg.Initialize(); Globals.ObjectAdded.Invoke(vg); Globals.IsDialogWindowOpen = false; Dispose(); }
private void DrawAnimatorStruct(List <AnimatorStruct> animatorStructs) { for (var i = 0; i < animatorStructs.Count; i++) { var animatorStruct = animatorStructs[i]; EditorGroup.VerticalBox(() => { DrawButtons(animatorStructs, i); DrawAnimatorSystem(animatorStruct.animatorSystem); DrawAnimatorStruct(animatorStruct.animatorStructs); }); } }
public Java.Lang.Object Apply(Java.Lang.Object context, Java.Lang.Object groupName) { // Developers can create a special group layout for any given group name. if (groupName.Equals("Group 2")) { EditorGroup group = new EditorGroup((Context)context, groupName.ToString(), Resource.Layout.dataform_custom_group); // Each group can have a specific layout manager, be it a table layout, a linear layout, a placeholder layout or even something completely custom. group.LayoutManager = new DataFormPlaceholderLayoutManager((Context)context, Resource.Layout.dataform_group_placeholder_layout); return(group); } return(null); }
protected override EditorGroup CreateEditorGroup(string groupName) { if (groupName != null) { var layout = this.renderer.GetGroupLayoutDefinition(groupName); var group = new EditorGroup(this.Context, groupName, Resource.Layout.Custom_Group_Layout); group.LayoutManager = TypeMappings.CreateInstance(layout, this.Context) as DataFormLayoutManager; group.RootLayout().Background = new ColorDrawable(Color.White); return(group); } return(base.CreateEditorGroup(groupName)); }
private void btnSubmit_Click(object sender, EventArgs e) { Globals.IsDialogWindowOpen = false; if (Globals.RenderWindow.CurrentSelectedObject is EditorSprite) { EditorSprite s = Globals.RenderWindow.CurrentSelectedObject as EditorSprite; { s.ObjectTypeName = lsTypes.Text; s.ObjectType = lsTypes.SelectedItem.GetType(); } Service.CloseDropDown(); } if (Globals.RenderWindow.CurrentSelectedObject is EditorActor) { EditorActor s = Globals.RenderWindow.CurrentSelectedObject as EditorActor; { s.ObjectTypeName = lsTypes.Text; s.ObjectType = lsTypes.SelectedItem.GetType(); } Service.CloseDropDown(); } if (Globals.RenderWindow.CurrentSelectedObject is EditorEmitter) { EditorEmitter s = Globals.RenderWindow.CurrentSelectedObject as EditorEmitter; { s.ObjectTypeName = lsTypes.Text; s.ObjectType = lsTypes.SelectedItem.GetType(); } Service.CloseDropDown(); } if (Globals.RenderWindow.CurrentSelectedObject is EditorGroup) { EditorGroup s = Globals.RenderWindow.CurrentSelectedObject as EditorGroup; { s.ObjectTypeName = lsTypes.Text; s.ObjectType = lsTypes.SelectedItem.GetType(); } Service.CloseDropDown(); } }
private void rlSceneObjects_SelectedIndexChanged(object sender, EventArgs e) { if (rlSceneObjects.SelectedItem != null) { if (rlSceneObjects.SelectedValue is EditorGroup) { EditorGroup g = rlSceneObjects.SelectedValue as EditorGroup; foreach (VisualObject vo in g.Objects) { vo.ShowBoundingBox = true; } } Globals.ObjectSelected((VisualObject)rlSceneObjects.SelectedValue); } }
private void DrawButtons(List <AnimatorStruct> animatorStructs, int i) { EditorGroup.Horizontal(() => { if (GUILayout.Button("Add Child", EditorStyles.miniButtonLeft)) { AddElement(animatorStructs[i].animatorStructs); } if (GUILayout.Button(new GUIContent("\u2191", "Move up"), EditorStyles.miniButtonMid, GUILayout.MaxWidth(70))) { Swap(i, i - 1); } if (GUILayout.Button(new GUIContent("\u2193", "Move down"), EditorStyles.miniButtonMid, GUILayout.MaxWidth(70))) { Swap(i, i + 1); } EditorGroup.SetColor(new Color(1, 0.7f, 0.7f), () => { if (GUILayout.Button(new GUIContent("\u00d7", "Remove"), EditorStyles.miniButtonRight, GUILayout.MaxWidth(45))) { animatorStructs.RemoveAt(i); } }); void Swap(int oldPos, int newPos) { if (newPos < 0 || newPos >= animatorStructs.Count) { return; } var buff = animatorStructs[newPos]; animatorStructs[newPos] = animatorStructs[oldPos]; animatorStructs[oldPos] = buff; } }); }
private void DrawAnimatorSystem(AnimatorSystem animSys) { EditorGroup.Horizontal(() => { animSys.animator = (Animator)EditorGUILayout.ObjectField(animSys.animator, typeof(Animator), true); if (GUILayout.Button("UpdateParameters", EditorStyles.miniButtonRight)) { animSys.UpdateParameters(); } }); var parameters = animSys.allAnimatorParameters.ToArray(); animSys.selectedParameter = EditorGUILayout.Popup("Parameters", animSys.selectedParameter, parameters); EditorGroup.Horizontal(() => { EditorGUILayout.LabelField("Direction", GUILayout.MinWidth(120), GUILayout.MaxWidth(120)); var isToBeginning = animSys.Sign == AnimationDirection.ToBeginning; if (GUILayout.Toggle(isToBeginning, "<-", EditorStyles.miniButtonLeft)) { animSys.SetSign(AnimationDirection.ToBeginning); } var isToEnd = animSys.Sign == AnimationDirection.ToEnd; if (GUILayout.Toggle(isToEnd, "->", EditorStyles.miniButtonRight)) { animSys.SetSign(AnimationDirection.ToEnd); } }); EditorGroup.Vertical(() => { animSys.frameRate = EditorGUILayout.FloatField("FrameRate", animSys.frameRate); if (animSys.allAnimatorParameters.Count > animSys.selectedParameter) { var newState = EditorGUILayout.Slider("State", animSys.State, 0, 1); if (Math.Abs(newState - animSys.State) > 0) { animSys.SetState(newState); } } animSys.playFromStart = EditorGUILayout.Toggle("PlayFromStart", animSys.playFromStart); }); EditorGroup.Horizontal(() => { if (GUILayout.Button("Reverse", EditorStyles.miniButtonLeft)) { if (Application.isPlaying) { animSys.ReverseAndPlayback(); } else { animSys.Reverse(); if (animSys.Sign == AnimationDirection.ToEnd) { animSys.SetState(1); } else if (animSys.Sign == AnimationDirection.ToBeginning) { animSys.SetState(0); } } } if (GUILayout.Button(animSys.isPlayback ? "Stop" : "Play current", EditorStyles.miniButtonMid)) { if (animSys.isPlayback) { animSys.isPlayback = false; } else if (Application.isPlaying) { if (animSys.Sign == AnimationDirection.ToEnd) { animSys.SetState(0); } else if (animSys.Sign == AnimationDirection.ToBeginning) { animSys.SetState(1); } animSys.Playback(); } } if (GUILayout.Button("Reset", EditorStyles.miniButtonRight)) { animSys.Reset(); } }); }
public void Draw(GameTime time) { if (CurrentSelectedFrame > (pnKeyFrameContainer.Controls.Count - 1)) { return; } conKeyFrame prevFrame = null; conKeyFrame currentFrame = pnKeyFrameContainer.Controls[CurrentSelectedFrame] as conKeyFrame; if (CurrentSelectedFrame > 0) { prevFrame = pnKeyFrameContainer.Controls[CurrentSelectedFrame - 1] as conKeyFrame; } if (currentFrame != null) { List <VisualObject> currentFrameSprites = (from sprite in currentFrame.VisualObjects orderby sprite.DrawOrder select sprite).ToList(); // Render our Previous Frame if we are not playing the animation cycle if (prevFrame != null && !IsPlaying) { List <VisualObject> prevFrameSprites = (from sprite in prevFrame.VisualObjects orderby sprite.DrawOrder select sprite).ToList(); for (int p = 0; p < prevFrameSprites.Count; p++) { // If its a sprite alter the shader for selected or not if (prevFrameSprites[p] is Sprite) { Sprite s = prevFrameSprites[p] as Sprite; if (s != null && s.CustomEffect != null) { s.CustomEffect.Parameters["IsSelected"].SetValue(false); s.CustomEffect.Parameters["IsPreviousFrame"].SetValue(true); } } // Draw it up prevFrameSprites[p].Draw(time); } } // Render our current frame for (int i = 0; i < currentFrameSprites.Count; i++) { // if its a sprite alter our shader params if (currentFrameSprites[i] is Sprite) { Sprite s = currentFrameSprites[i] as Sprite; if (s != null && s.CustomEffect != null) { if (s.IsSelected && !IsPlaying) { s.CustomEffect.Parameters["IsSelected"].SetValue(true); } else { s.CustomEffect.Parameters["IsSelected"].SetValue(false); } s.CustomEffect.Parameters["IsPreviousFrame"].SetValue(false); } } if (currentFrameSprites[i] is EditorGroup) { EditorGroup g = currentFrameSprites[i] as EditorGroup; if (g != null) { foreach (VisualObject obj in g.Objects) { if (obj is Sprite) { Sprite s = obj as Sprite; if (s.CustomEffect != null) { if (s.IsSelected && !IsPlaying) { s.CustomEffect.Parameters["IsSelected"].SetValue(true); } else { s.CustomEffect.Parameters["IsSelected"].SetValue(false); } s.CustomEffect.Parameters["IsPreviousFrame"].SetValue(false); } } } } } // Draw it up currentFrameSprites[i].Draw(time); } } }
private void btnDuplicate_Click(object sender, EventArgs e) { int counts = Convert.ToInt16(tbQTY.Text); int offsetX = Convert.ToInt16(tbXOffset.Text); int offsetY = Convert.ToInt16(tbYOffset.Text); float totalWidth = 0; float totalHeight = 0; #region Groups if (SceneObjects[rlSceneObjects.SelectedIndex] is EditorGroup) { EditorGroup original = SceneObjects[rlSceneObjects.SelectedIndex] as EditorGroup; if (original != null) { for (int i = 0; i < counts; i++) { EditorGroup group = new EditorGroup(Globals.Game, RenderWindow) { AssetName = original.AssetName, DrawOrder = original.DrawOrder, UpdateOrder = original.UpdateOrder, Enabled = original.Enabled, Name = original.Name, Scale = original.Scale, Visible = original.Visible, ShowBoundingBox = true, Position = original.Position }; foreach (VisualObject o in original.Objects) { if (o is EditorSprite) { EditorSprite sOriginal = o as EditorSprite; // Init our new Sprite EditorSprite sprite = new EditorSprite(sOriginal.Game) { Name = sOriginal.Name, Texture = sOriginal.Texture, AssetName = sOriginal.AssetName, Position = sOriginal.Position, Scale = sOriginal.Scale, LayerDepth = sOriginal.LayerDepth, Origin = sOriginal.Origin, Rotation = sOriginal.Rotation, StartPosition = sOriginal.StartPosition, UpdateOrder = sOriginal.UpdateOrder, CustomEffect = sOriginal.CustomEffect, ShowBoundingBox = false, BlendMode = sOriginal.BlendMode, DrawOrder = sOriginal.DrawOrder, ScrollSpeed = sOriginal.ScrollSpeed, }; // Init this texture sprite.Initialize(); // Add it to our groups objects group.Objects.Add(sprite); } if (o is EditorEmitter) { EditorEmitter eOriginal = o as EditorEmitter; EditorEmitter emitter = new EditorEmitter(eOriginal.Game, RenderWindow) { Name = eOriginal.Name, AssetName = eOriginal.AssetName, Camera = eOriginal.Camera, ParticleColor = eOriginal.ParticleColor, DrawOrder = eOriginal.DrawOrder, EnableAlphaBlending = eOriginal.EnableAlphaBlending, Enabled = eOriginal.Enabled, ForceObjects = eOriginal.ForceObjects, MinAcceleration = eOriginal.MinAcceleration, MaxAcceleration = eOriginal.MaxAcceleration, MinInitialSpeed = eOriginal.MinInitialSpeed, MaxInitialSpeed = eOriginal.MaxInitialSpeed, MinLifeSpan = eOriginal.MinLifeSpan, MaxLifeSpan = eOriginal.MaxLifeSpan, MinParticles = eOriginal.MinParticles, MaxParticles = eOriginal.MaxParticles, MinRotationSpeed = eOriginal.MinRotationSpeed, MaxRotationSpeed = eOriginal.MaxRotationSpeed, MinScale = eOriginal.MinScale, MaxScale = eOriginal.MaxScale, ShowBoundingBox = false, Texture = eOriginal.Texture, Position = eOriginal.Position }; emitter.Initialize(); // Add it to our group group.Objects.Add(emitter); } } // Initialize our group group.Initialize(); float width = 0; float height = 0; foreach (VisualObject o in group.Objects) { if (o is EditorSprite) { EditorSprite s = o as EditorSprite; if ((s.Texture.Width * s.Scale.X) > width) { width = s.Texture.Width * s.Scale.X; } if ((s.Texture.Height * s.Scale.Y) > height) { height = s.Texture.Height * s.Scale.Y; } } if (o is EditorEmitter) { EditorEmitter emitter = o as EditorEmitter; if ((emitter.Texture.Width * emitter.Scale.X) > width) { width = emitter.Texture.Width * emitter.Scale.X; } if ((emitter.Texture.Height * emitter.Scale.Y) > height) { height = emitter.Texture.Height * emitter.Scale.Y; } } } totalWidth += width + offsetX * (i + 1); totalHeight += height + offsetY * (i + 1); // Move the individual objects in the group // TODO: Make this later automatically done in the CTBaseGroup class! foreach (VisualObject vo in group.Objects) { switch (cbDirection.Text) { case "X": vo.Position += new Vector2(totalWidth, 0); break; case "Y": vo.Position += new Vector2(0, totalHeight); break; case "Both": vo.Position += new Vector2(totalWidth, totalHeight); break; } } // Move the Complete groups position too switch (cbDirection.Text) { case "X": group.Position += new Vector2(totalWidth, 0); break; case "Y": group.Position += new Vector2(0, totalHeight); break; case "Both": group.Position += new Vector2(totalWidth, totalHeight); break; } group.Name = original.Name + (i + 1); // Add it to current our Key Frame Globals.ObjectAdded.Invoke(group); } } } #endregion #region Sprites if (SceneObjects[rlSceneObjects.SelectedIndex] is EditorSprite) { EditorSprite sprite = SceneObjects[rlSceneObjects.SelectedIndex] as EditorSprite; if (sprite != null) { for (int i = 0; i < counts; i++) { totalWidth += (sprite.Texture.Width * sprite.Scale.X) + offsetX * (i + 1); totalHeight += (sprite.Texture.Height * sprite.Scale.Y) + offsetY * (i + 1); EditorSprite s = new EditorSprite(sprite.Game) { Name = sprite.Name, AssetName = sprite.AssetName, BlendMode = sprite.BlendMode, Color = sprite.Color, CameraOffsetX = sprite.CameraOffsetX, CameraOffsetY = sprite.CameraOffsetY, CameraZoomOffset = sprite.CameraZoomOffset, CustomEffect = sprite.CustomEffect, DrawOrder = sprite.DrawOrder, Effects = sprite.Effects, Enabled = sprite.Enabled, IsLocked = sprite.IsLocked, ShowBoundingBox = sprite.ShowBoundingBox, LayerDepth = sprite.LayerDepth, Origin = sprite.Origin, Position = sprite.Position, Rotation = sprite.Rotation, Scale = sprite.Scale, UpdateOrder = sprite.UpdateOrder, Visible = sprite.Visible, Texture = sprite.Texture, ScrollSpeed = sprite.ScrollSpeed, AttachedPathingNode = sprite.AttachedPathingNode, AttachedPathingNodeName = sprite.AttachedPathingNodeName, CurrentPathLerpPosition = sprite.CurrentPathLerpPosition, CurrentPathNodeIndex = sprite.CurrentPathNodeIndex, StartPathingLerpPosition = sprite.StartPathingLerpPosition, StartPathNodeIndex = sprite.StartPathNodeIndex, }; s.Initialize(); switch (cbDirection.Text) { case "X": s.Position += new Vector2(totalWidth, 0); break; case "Y": s.Position += new Vector2(0, totalHeight); break; case "Both": s.Position += new Vector2(totalWidth, totalHeight); break; } // Add it to our scene Globals.ObjectAdded.Invoke(s); } } } #endregion #region Emitters if (SceneObjects[rlSceneObjects.SelectedIndex] is EditorEmitter) { EditorEmitter original = SceneObjects[rlSceneObjects.SelectedIndex] as EditorEmitter; if (original != null) { for (int i = 1; i < counts; i++) { totalWidth += (original.Texture.Width * original.Scale.X) + offsetX * (i + 1); totalHeight += (original.Texture.Height * original.Scale.Y) + offsetY * (i + 1); EditorEmitter emitter = new EditorEmitter(original.Game, RenderWindow) { Name = original.Name, AssetName = original.AssetName, Camera = original.Camera, ParticleColor = original.ParticleColor, DrawOrder = original.DrawOrder, EnableAlphaBlending = original.EnableAlphaBlending, Enabled = original.Enabled, ForceObjects = original.ForceObjects, MinAcceleration = original.MinAcceleration, MaxAcceleration = original.MaxAcceleration, MinInitialSpeed = original.MinInitialSpeed, MaxInitialSpeed = original.MaxInitialSpeed, MinLifeSpan = original.MinLifeSpan, MaxLifeSpan = original.MaxLifeSpan, MinParticles = original.MinParticles, MaxParticles = original.MaxParticles, MinRotationSpeed = original.MinRotationSpeed, MaxRotationSpeed = original.MaxRotationSpeed, MinScale = original.MinScale, MaxScale = original.MaxScale, ShowBoundingBox = true, Texture = original.Texture, Position = original.Position, AttachedPathingNode = original.AttachedPathingNode, AttachedPathingNodeName = original.AttachedPathingNodeName, CurrentPathLerpPosition = original.CurrentPathLerpPosition, CurrentPathNodeIndex = original.CurrentPathNodeIndex, StartPathingLerpPosition = original.StartPathingLerpPosition, StartPathNodeIndex = original.StartPathNodeIndex }; emitter.Initialize(); switch (cbDirection.Text) { case "X": emitter.Position += new Vector2(totalWidth, 0); break; case "Y": emitter.Position += new Vector2(0, totalHeight); break; case "Both": emitter.Position += new Vector2(totalWidth, totalHeight); break; } // Add it to current our Key Frame Globals.ObjectAdded.Invoke(emitter); } } } #endregion #region Custom Sprite Boxes if (SceneObjects[rlSceneObjects.SelectedIndex] is EditorSpriteBox) { EditorSpriteBox sprite = SceneObjects[rlSceneObjects.SelectedIndex] as EditorSpriteBox; if (sprite != null) { for (int i = 0; i < counts; i++) { totalWidth += (sprite.Texture.Width * sprite.Scale.X) + offsetX * (i + 1); totalHeight += (sprite.Texture.Height * sprite.Scale.Y) + offsetY * (i + 1); EditorSpriteBox s = new EditorSpriteBox(sprite.Game, RenderWindow) { Name = sprite.Name, AssetName = sprite.AssetName, BlendMode = sprite.BlendMode, Width = sprite.Width, Height = sprite.Height, Color = sprite.Color, CameraOffsetX = sprite.CameraOffsetX, CameraOffsetY = sprite.CameraOffsetY, CameraZoomOffset = sprite.CameraZoomOffset, CustomEffect = sprite.CustomEffect, DrawOrder = sprite.DrawOrder, Effects = sprite.Effects, Enabled = sprite.Enabled, IsLocked = sprite.IsLocked, ShowBoundingBox = sprite.ShowBoundingBox, LayerDepth = sprite.LayerDepth, Origin = sprite.Origin, Position = sprite.Position, Rotation = sprite.Rotation, Scale = sprite.Scale, UpdateOrder = sprite.UpdateOrder, Visible = sprite.Visible, Texture = sprite.Texture, ScrollSpeed = sprite.ScrollSpeed, AttachedPathingNode = sprite.AttachedPathingNode, AttachedPathingNodeName = sprite.AttachedPathingNodeName, CurrentPathLerpPosition = sprite.CurrentPathLerpPosition, CurrentPathNodeIndex = sprite.CurrentPathNodeIndex, StartPathingLerpPosition = sprite.StartPathingLerpPosition, StartPathNodeIndex = sprite.StartPathNodeIndex }; s.Initialize(); switch (cbDirection.Text) { case "X": s.Position += new Vector2(totalWidth, 0); break; case "Y": s.Position += new Vector2(0, totalHeight); break; case "Both": s.Position += new Vector2(totalWidth, totalHeight); break; } // Add it to our scene Globals.ObjectAdded.Invoke(s); } } } #endregion Globals.IsDialogWindowOpen = false; Dispose(); }
private void btnSubmit_Click(object sender, EventArgs e) { if (lsSceneObjects.SelectedItem != null && lsAvailablePaths.SelectedItem != null) { if (lsSceneObjects.SelectedItem is EditorGroup) { EditorGroup vo = lsSceneObjects.SelectedItem as EditorGroup; LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder; if (bo != null) { vo.AttachedPathingNode = bo; vo.CurrentPathNodeIndex = Convert.ToInt16(tbNodeIndex.Text); vo.AttachedPathingNodeName = bo.Name; foreach (LedgeNodeDisplay node in bo.Nodes) { node.Scale = vo.Scale; } Globals.IsDialogWindowOpen = false; Dispose(); } } if (lsSceneObjects.SelectedItem is EditorSprite) { EditorSprite vo = lsSceneObjects.SelectedItem as EditorSprite; LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder; if (bo != null) { vo.AttachedPathingNode = bo; vo.CurrentPathNodeIndex = Convert.ToInt16(tbNodeIndex.Text); vo.AttachedPathingNodeName = bo.Name; foreach (LedgeNodeDisplay node in bo.Nodes) { node.Scale = vo.Scale; } Globals.IsDialogWindowOpen = false; Dispose(); } } if (lsSceneObjects.SelectedItem is EditorEmitter) { EditorEmitter vo = lsSceneObjects.SelectedItem as EditorEmitter; LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder; if (bo != null) { vo.AttachedPathingNode = bo; vo.CurrentPathNodeIndex = Convert.ToInt16(tbNodeIndex.Text); vo.AttachedPathingNodeName = bo.Name; foreach (LedgeNodeDisplay node in bo.Nodes) { node.Scale = vo.Scale; } Globals.IsDialogWindowOpen = false; Dispose(); } } if (lsSceneObjects.SelectedItem is EditorActor) { EditorActor vo = lsSceneObjects.SelectedItem as EditorActor; LedgeBuilder bo = lsAvailablePaths.SelectedItem as LedgeBuilder; if (bo != null) { vo.AttachedPathingNode = bo; vo.CurrentPathNodeIndex = Convert.ToInt16(tbNodeIndex.Text); vo.AttachedPathingNodeName = bo.Name; // Store these in the pathing node bo.Sequences = vo.Sequences; foreach (LedgeNodeDisplay node in bo.Nodes) { node.AnimationSequence = vo.ClipPlayer.CurrentSequence; node.Scale = vo.Scale; } Globals.IsDialogWindowOpen = false; Dispose(); } } } else { MessageBox.Show(@"Please select a scene object and an available pathing node to attach it to."); } }
protected override void Update(GameTime gameTime) { base.Update(gameTime); if (GraphicsDevice == null || GraphicsDevice.IsDisposed) { return; } // Update our key frame animation container if (Globals.Update != null) { Globals.Update.Invoke(gameTime); } #region Check for Mouse Input if (!Globals.IsDialogWindowOpen) { elapsedSelectDelay += gameTime.ElapsedGameTime; // Grab our current mouse state MouseState currentMouseState = Mouse.GetState(); // Get our current mouse x/y Globals.CurrentMouseX = currentMouseState.X; Globals.CurrentMouseY = currentMouseState.Y; // Calculate the distance from the current to the last states float distanceX = currentMouseState.X - prevMouseState.X; float distanceY = currentMouseState.Y - prevMouseState.Y; float cameraZoom = currentMouseState.ScrollWheelValue; // Get the current rendering window x/y size int rendSizeX = Globals.CurrentRenderWindowWidth; int rendSizeY = Globals.CurrentRenderWindowHeight; // If we are outside the rendering window with the mouse ignore the input (could be in menus, ect) if (Globals.CurrentMouseX > rendSizeX || Globals.CurrentMouseY > rendSizeY || Globals.CurrentMouseX <= 0 || Globals.CurrentMouseY <= 0) { return; } // Generate a bounding box with some padding around the mouse cursor Vector3 min = new Vector3(Globals.CurrentMouseX - 0.1f, Globals.CurrentMouseY - 0.1f, -50); Vector3 max = new Vector3(Globals.CurrentMouseX + 0.1f, Globals.CurrentMouseY + 0.1f, 50); BoundingBox mouseBoundingBox = new BoundingBox(min, max); if (pickingState == Enums.PickingState.Idle && currentMouseState.LeftButton == ButtonState.Pressed && !InputHandler.IsHeldDown("SpaceBar")) { if (Globals.IsPathingToolVisible && currentMouseState.LeftButton == ButtonState.Pressed) { if (prevMouseState.LeftButton != ButtonState.Pressed) { Globals.OnPathingNodePlaced.Invoke(); return; } } var vPickables = new List <VisualObject>(); bool foundNodes = false; // Check pathing nodes first! var pathingNodes = Globals.Paths; foreach (var p in pathingNodes) { foreach (var n in p.Nodes) { if (n.BoundingBox.Intersects(mouseBoundingBox)) { pickingState = Enums.PickingState.PickingNode; SelectedNode = n; SelectedNode.IsSelected = true; foundNodes = true; } } } if (!foundNodes && frmMain.conRenderer.RenderWindow.SceneManager.CurrentScreen != null) { // Check for scene objects var sceneObjects = frmMain.conRenderer.RenderWindow.VisualObjects; foreach (var vo in sceneObjects) { if (vo is EditorGroup) { EditorGroup g = vo as EditorGroup; if (g.Objects.Any(v => v.BoundingBox.Intersects(mouseBoundingBox))) { vPickables.Add(vo); } } else if (vo.BoundingBox.Intersects(mouseBoundingBox)) { vPickables.Add(vo); } } // Found some pickable objects get the one with the highest draw order var pickable = (from v in vPickables orderby v.DrawOrder descending select v).ToList(); if (pickable.Count > 0) { if (InputHandler.IsHeldDown("Cntrl")) { if (frmMain.conRenderer.CurrentSelectedObject != null) { frmMain.conRenderer.CurrentlySelectedObjects.Add(frmMain.conRenderer.CurrentSelectedObject); } // Deleselct any selected objects Globals.ObjectSelected.Invoke(null); if (!frmMain.conRenderer.CurrentlySelectedObjects.Contains(pickable.First())) { frmMain.conRenderer.CurrentlySelectedObjects.Add(pickable.First()); } } else { frmMain.conRenderer.CurrentlySelectedObjects.Clear(); pickingState = Enums.PickingState.PickingObject; Globals.ObjectSelected.Invoke(pickable.First()); } } else { frmMain.conRenderer.CurrentlySelectedObjects.Clear(); cameraState = Enums.CameraState.Idle; Globals.ObjectSelected.Invoke(null); return; } } } else { if (!Globals.IsScenePaused && pickingState == Enums.PickingState.PickingObject && !InputHandler.IsHeldDown("SpaceBar")) { // Latched on a scene object if (currentMouseState.LeftButton == ButtonState.Pressed) { if (frmMain.conRenderer.CurrentSelectedObject is EditorGroup) { EditorGroup g = frmMain.conRenderer.CurrentSelectedObject as EditorGroup; if (g != null && !g.IsLocked) { foreach (var vo in g.Objects) { vo.Position += new Vector2(distanceX, distanceY); } g.Position += new Vector2(distanceX, distanceY); } } else if (frmMain.conRenderer.CurrentSelectedObject is LedgeBuilder) { SelectedNode.Position += new Vector2(distanceX, distanceY); } else { if (!frmMain.conRenderer.CurrentSelectedObject.IsLocked) { frmMain.conRenderer.CurrentSelectedObject.Position += new Vector2(distanceX, distanceY); } } } } else if (pickingState == Enums.PickingState.PickingNode && !InputHandler.IsHeldDown("SpaceBar")) { if (currentMouseState.LeftButton == ButtonState.Pressed) { if (SelectedNode != null) { // Nodes are Locked move all them together if (SelectedNode.IsLocked) { // MOVE ALL OTHER NODES IN THE CHAIN var firstNode = SelectedNode.Parent.Nodes[0]; if (firstNode != null) { // Move the first node firstNode.Position += new Vector2(distanceX, distanceY); firstNode.IsSelected = true; for (int i = 1; i < SelectedNode.Parent.Nodes.Count; i++) { // move the other nodes too SelectedNode.Parent.Nodes[i].Position += new Vector2(distanceX, distanceY); } } } else { if (SelectedNode.Parent != null) { foreach (var nodes in SelectedNode.Parent.Nodes) { nodes.IsSelected = false; } SelectedNode.IsSelected = true; if (SelectedNode.Parent.IsAxisYLocked) { SelectedNode.Position += new Vector2(distanceX, 0); } else if (SelectedNode.Parent.IsAxisXLocked) { SelectedNode.Position += new Vector2(0, distanceY); } else { SelectedNode.Position += new Vector2(distanceX, distanceY); } } else { SelectedNode.Position += new Vector2(distanceX, distanceY); } } } } } else if (cameraState == Enums.CameraState.Idle) { // Camera Panning if (Globals.IsProjectLoaded) { if (InputHandler.IsHeldDown("SpaceBar")) { if (currentMouseState.LeftButton == ButtonState.Pressed) { cameraState = Enums.CameraState.Panning; } // Camera Zoomage Globals.CurrentCameraZoom += (float)Math.Ceiling(cameraZoom / 1000f); } } } if (cameraState == Enums.CameraState.Panning) { // Move everything Globals.CurrentCameraOffsetX += distanceX / Globals.CameraSensitivity; Globals.CurrentCameraOffsetY += distanceY / Globals.CameraSensitivity; cameraState = Enums.CameraState.Idle; } if (InputHandler.IsActionPressed("Delete")) { if (frmMain.conRenderer.CurrentSelectedObject != null) { if ( MessageBox.Show(@"Remove selected sprite from the scene?", @"Sprite Remove Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes) { // Remove the currently selected sprite from our scene collection Globals.ObjectRemoved.Invoke(frmMain.conRenderer.CurrentSelectedObject); } } } } if (currentMouseState.LeftButton == ButtonState.Released) { // Done dragging pickingState = Enums.PickingState.Idle; } // Update our mouse state prevMouseState = currentMouseState; } #endregion }