示例#1
0
    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();
        }
示例#4
0
 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);
        }
示例#6
0
        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));
        }
示例#7
0
        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();
            }
        }
示例#8
0
        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);
            }
        }
示例#9
0
    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;
            }
        });
    }
示例#10
0
    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);
                }
            }
        }
示例#12
0
        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.");
            }
        }
示例#14
0
        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
        }