public AnimatedSprite(Animation animation, Vector2 position, Anchor anchor)
        {
            this.animation = animation;
            int width = animation.FrameWidth;
            int height = animation.FrameHeight;

            switch (anchor)
            {
                case Anchor.TOPLEFT:
                    this.mCenter.X = position.X + width / 2;
                    this.mCenter.Y = position.Y + height / 2;
                    break;
                case Anchor.TOPRIGHT:
                    this.mCenter.X = position.X - width / 2;
                    this.mCenter.Y = position.Y + height / 2;
                    break;
                case Anchor.CENTER:
                    this.mCenter = position;
                    break;
                case Anchor.BOTTOMLEFT:
                    this.mCenter.X = position.X + width / 2;
                    this.mCenter.Y = position.Y - height / 2;
                    break;
                case Anchor.BOTTOMRIGHT:
                    this.mCenter.X = position.X - width / 2;
                    this.mCenter.Y = position.Y - height / 2;
                    break;
            }
        }
        public Enemy(Animation animation, Vector2 position, Anchor a, float maxHealth, int value, float move_speed)
            : base(animation, position, a)
        {
            this.maxHealth = maxHealth;
            //this.setDifficulty(difficulty);

            this.value = value;
            this.alive = true;

            this.mSpeed = move_speed;
            this.health = maxHealth;
            this.at_end = false;
            this.layer_depth = 0.6f;
        }
Exemple #3
0
 /// <summary>
 /// Create the event used an animation has been wrapped up in something.
 /// </summary>
 /// <param name="animation">The animation.</param>
 public AnimationEventArgs(Animation animation)
 {
     //Pass along the data.
     _Animation = animation;
 }
 public AxeMan(Animation animation, Vector2 position, Anchor a)
     : base(animation, position, a, MAX_HEALTH, VALUE, MOVE_SPEED)
 {
     deathSound = DEATH_SOUND;
 }
        /// <summary>
        /// Update the list of animations to accurately reflect the loaded list of animations.
        /// This also updates the animation bars scattered around the screen.
        /// </summary>
        private void UpdateAnimationLists()
        {
            //Clear the lists.
            _AnimationList.Items.Clear();
            foreach (AnimationBar bar in _AnimationBars) { _GUI.RemoveItem(bar); }
            _AnimationBars.Clear();
            _SelectedAnimation = (_Character.Skeleton.Animations.Count == 0) ? new Animation() : GetAnimation(0);

            //Go through all the skeleton's animations and add them as entries in the list.
            foreach (Animation animation in _Character.Skeleton.Animations)
            {
                //Add an entry.
                _AnimationList.AddItem();
                if (_GUI.ContentManager != null) { _AnimationList[_AnimationList.Items.Count - 1].LoadContent(); }
                _GUI.AddItem(new AnimationBar(_GUI, animation, new Vector2(50, (600 + _AnimationBars.Count * 22)), 800, 20));
                _AnimationBars.Add(_GUI.LastItem as AnimationBar);
                if (_GUI.ContentManager != null) { _AnimationBars[_AnimationBars.Count - 1].LoadContent(); }

                //Hook up some events.
                _AnimationBars[_AnimationBars.Count - 1].MouseClick += OnAnimationBarClick;
                _AnimationBars[_AnimationBars.Count - 1].PlayStateChange += OnPlayStateChange;
                _AnimationBars[_AnimationBars.Count - 1].SelectedFrameChange += OnSelectedFrameChange;

                //Edit the label.
                _AnimationList[_AnimationList.Items.Count - 1].Checkbox.Text = animation.Name;
            }
        }
 /// <summary>
 /// Save the animation.
 /// </summary>
 /// <param name="animation">The animation to save.</param>
 /// <param name="name">The name of the animation.</param>
 private void SaveAnimation(Animation animation, string name)
 {
     //Change the name of the animation.
     animation.Name = name;
     //Save the animation.
     Helper.SaveAnimation(animation, (_ContentManager.RootDirectory + @"\Editor\"));
 }
 /// <summary>
 /// Remove an animation from both the editor and the skeleton.
 /// </summary>
 /// <param name="animation">The animation to delete.</param>
 private void RemoveAnimation(Animation animation)
 {
     //Remove the animation from the skeleton.
     _Character.Skeleton.RemoveAnimation(animation);
     //Update the animaion lists.
     UpdateAnimationLists();
 }
 /// <summary>
 /// An already loaded animation has been selected.
 /// </summary>
 /// <param name="obj">The object that fired the event.</param>
 /// <param name="e">The event arguments.</param>
 private void OnAnimationSelected(object obj, ListItemSelectEventArgs e)
 {
     //Change the selected animation.
     _SelectedAnimation = GetAnimation(_AnimationList.Items.IndexOf(e.Item));
 }
        /// <summary>
        /// Modify a frame in a given animation.
        /// </summary>
        /// <param name="animation">The animation to modify.</param>
        /// <param name="frameNumber">The index of the frame to modify.</param>
        private void ModifyFrame(Animation animation, int frameNumber)
        {
            //If there is any bone that has been modified.
            if (_ModifiedBone.Exists(flag => (flag)))
            {
                //If the currently selected frame isn't a keyframe, create it.
                if (!animation.Keyframes.Exists(kf => (kf.FrameNumber == frameNumber))) { AddKeyframe(frameNumber); }

                //Add the bones that have had their properties modified since the last keyframe to the selected keyframe, thus altering the animation.
                for (int i = 0; i < animation.Skeleton.Bones.Count; i++)
                {
                    //If the list have enough items, continue.
                    if (_ModifiedBone.Count >= (i + 1))
                    {
                        //If the bone have been modified, add it to the new keyframe.
                        if (_ModifiedBone[i])
                        {
                            //The new bone.
                            Bone bone = animation.Skeleton.Bones[i].DeepClone();

                            //If the copied bone already exists at the keyframe, remove it.
                            animation.GetKeyframe(frameNumber).RemoveBone(bone.Index);
                            //Add the copied bone to the selected keyframe.
                            animation.GetKeyframe(frameNumber).AddBone(bone);
                        }
                    }
                    //Otherwise break this party up.
                    else { break; }
                }
            }

            //Set up the list of modified bones.
            _ModifiedBone = new List<bool>(animation.Skeleton.Bones.Count);
            //Reset the modify bone list.
            for (int i = 0; i < _ModifiedBone.Capacity; i++) { _ModifiedBone.Add(false); }
        }
 /// <summary>
 /// Get the index of the specified animation.
 /// </summary>
 /// <param name="animation">The animation in question.</param>
 /// <returns>The index of the animation.</returns>
 private int GetAnimationIndex(Animation animation)
 {
     //Return the animation's index.
     return _Character.Skeleton.Animations.IndexOf(animation);
 }
        /// <summary>
        /// Get the animation bar that houses the specified animation.
        /// </summary>
        /// <param name="animation">The animation in question.</param>
        /// <returns>The animation bar.</returns>
        private AnimationBar GetAnimationBar(Animation animation)
        {
            //Go through each animation bar.
            foreach (AnimationBar bar in _AnimationBars)
            {
                //If the bar houses the animation, return it.
                if (bar.Animation == animation) { return bar; }
            }

            //Sorry, no animation bar has any records of that animation.
            return null;
        }
        /// <summary>
        /// Transform the skeleton according to a state of one of its animations, ie. a certain keyframe.
        /// </summary>
        /// <param name="animation">The animation in focus.</param>
        /// <param name="frameNumber">The index of the frame.</param>
        public void TransformSkeleton(Animation animation, int frameNumber)
        {
            //Loop through all bones in the skeleton.
            for (int boneIndex = 0; boneIndex < _Character.Skeleton.BoneUpdateOrder.Count; boneIndex++)
            {
                //Current bone.
                Bone bone = _Character.Skeleton.BoneUpdateOrder[boneIndex];

                //If the frame happens to be a keyframe.
                if (animation.Keyframes.Exists(kf => (kf.FrameNumber == frameNumber)))
                {
                    //Get the keyframe.
                    Keyframe keyframe = animation.Keyframes.Find(kf => (kf.FrameNumber == frameNumber));

                    //If the bone is involved in any key changes in the not so distant future.
                    if (keyframe.ExistsBone(bone.Index))
                    {
                        //Get the correct bone in the next keyframe's list of bones to update, that is the one that's currently being updated.
                        Bone boneToBe = keyframe.GetBone(bone.Index);

                        //Perform the linear interpolation between the last and next keyframe bone states.
                        bone.Rotation = MathHelper.Lerp(bone.Rotation, boneToBe.Rotation, 1);
                    }
                }
            }
        }
        /// <summary>
        /// Initialize the animation controller.
        /// </summary>
        public void Initialize(AnimationEditorScreen screen, Character character)
        {
            //Initialize some variables.
            _Screen = screen;
            _Character = character;
            _SelectedAnimation = ((_Character != null) && (_Character.Skeleton.Animations.Count != 0)) ? GetAnimation(0) : null;
            _AnimationBars = new List<AnimationBar>();
            _SelectedBoneIndex = 0;
            _ModifiedBone = new List<bool>();
            _GUI = new GraphicalUserInterface();
            _IsGUIClicked = false;

            //Create the character.
            _Character = new Character(new Level("redundant", null), "deafult", new Vector2(600, 250), 0, Vector2.One, 0, 0);
            _Character.Skeleton.Initialize(screen.ScreenManager.GraphicsDevice);
            _Character.AddAnimation();
            _Character.Skeleton.Animations[0].Name = "default pose";
            _Character.Skeleton.AddKeyframe(0, 0);
            _Character.Skeleton.AddKeyframe(0, 3);
            _Character.Skeleton.AddKeyframe(0, 8);
            _Character.Skeleton.AddKeyframe(0, 12);
            _Character.Skeleton.AddKeyframe(0, 15);
            _Character.Skeleton.AddKeyframe(0, 19);

            //Initialize the list of modified bones.
            ResetModifiedBones();

            //Add items to the GUI.
            _InformationList = new List(_GUI, new Vector2(950, 155), 300, 300);
            _AnimationList = new Checkboxlist(_GUI, new Vector2(950, 50), 300, 100);
            _Menu = new Menu(_GUI, new Vector2(0, 0), 500, 30);

            //Save some components closer to home.
            _GUI.AddItem(_InformationList);
            _GUI.AddItem(_AnimationList);
            _GUI.AddItem(_Menu);

            //Create the animation bars and update the animation lists.
            UpdateAnimationLists();
            UpdateInformationList(true);

            //Tinker with the animation.
            _SelectedAnimation.ResetKeyframe(0);

            //Hook up some events.
            _GUI.ItemClicked += OnGUIClicked;
            _InformationList.ItemSelect += OnInformationSelected;
            _AnimationList.ItemSelect += OnAnimationSelected;

            #region Menu
            //Play with the menu.
            _Menu.AddMenuItem();
            _Menu.AddMenuItem();
            _Menu.AddMenuItem();

            _Menu.MenuItems[0].AddListItem();
            _Menu.MenuItems[0].AddListItem();
            _Menu.MenuItems[0].AddListItem();
            _Menu.MenuItems[0].AddListItem();
            _Menu.MenuItems[0].AddListItem();
            _Menu.MenuItems[0].AddListItem();

            _Menu.MenuItems[1].AddListItem();
            _Menu.MenuItems[1].AddListItem();
            _Menu.MenuItems[1].AddListItem();
            _Menu.MenuItems[1].AddListItem();
            _Menu.MenuItems[1].AddListItem();

            _Menu.MenuItems[2].AddListItem();
            _Menu.MenuItems[2].AddListItem();
            _Menu.MenuItems[2].AddListItem();

            _Menu.MenuItems[0].IsScrollable = false;
            _Menu.MenuItems[1].IsScrollable = false;
            _Menu.MenuItems[2].IsScrollable = false;
            _Menu.MenuItems[0].IsFixed = false;
            _Menu.MenuItems[1].IsFixed = false;
            _Menu.MenuItems[2].IsFixed = false;

            _Menu.MenuItems[0].Text = "File";
            _Menu.MenuItems[1].Text = "Edit";
            _Menu.MenuItems[2].Text = "View";

            _Menu.MenuItems[0][0].Label.Text = "New Animation";
            _Menu.MenuItems[0][1].Label.Text = "New Skeleton";
            _Menu.MenuItems[0][2].Label.Text = "Open Animation";
            _Menu.MenuItems[0][3].Label.Text = "Open Skeleton";
            _Menu.MenuItems[0][4].Label.Text = "Save Animation";
            _Menu.MenuItems[0][5].Label.Text = "Save Skeleton";

            _Menu.MenuItems[1][0].Label.Text = "Create Bone";
            _Menu.MenuItems[1][1].Label.Text = "Edit Bone";
            _Menu.MenuItems[1][2].Label.Text = "Create Keyframe";
            _Menu.MenuItems[1][3].Label.Text = "Delete Keyframe";
            _Menu.MenuItems[1][4].Label.Text = "Remove Animation";

            _Menu.MenuItems[2][0].Label.Text = "Zoom";
            _Menu.MenuItems[2][1].Label.Text = "Scroll";
            _Menu.MenuItems[2][2].Label.Text = "Windows";

            _Menu.MenuOptionSelect += OnMenuOptionSelected;
            #endregion
        }
 public AnimatedSprite(Animation animation, Vector2 center)
     : this(animation, center, Anchor.CENTER)
 {
 }
 public AnimatedSprite(Animation animation)
 {
     this.animation = animation;
 }