Example #1
0
        public override void Update()
        {
            foreach (PlayerAnimation player in WatchedComponents)
            {
                Physical physical = player.Owner.Components.Get <Physical>();
                PlayerMovementComponent movement    = player.Owner.Components.Get <PlayerMovementComponent>();
                PlayerOrientation       orientation = player.Owner.Components.Get <PlayerOrientation>();
                PulseAbility            pulse       = player.Owner.Components.Get <PulseAbility>();
                if (physical == null || movement == null || orientation == null)
                {
                    continue;
                }

                if (pulse != null && pulse.EnergyMeter == 0)
                {
                    player.WooferBlinkingTime += Owner.DeltaTime;
                    if (player.WooferBlinkingTime >= 0.75)
                    {
                        player.WooferBlinkingTime -= 0.75;
                    }
                }
                else
                {
                    player.WooferBlinkingTime = 0;
                }

                if (!movement.OnGround || Math.Abs(physical.Velocity.X) <= 1e-2)
                {
                    player.WalkAnimationProgress = 0;
                }
                else if (Math.Abs(physical.Velocity.X) > 1e-2)
                {
                    //Console.WriteLine("frames: " + ((int)(Owner.DeltaTime/Owner.FixedDeltaTime)));
                    if (orientation.Unit.X == 0 || orientation.Unit.X / Math.Abs(orientation.Unit.X) == physical.Velocity.X / Math.Abs(physical.Velocity.X))
                    {
                        player.WalkAnimationProgress++;
                    }
                    else
                    {
                        player.WalkAnimationProgress--;
                    }
                    int frameDuration   = 8;
                    int animationFrames = 6;
                    if (player.WalkAnimationProgress >= animationFrames * frameDuration)
                    {
                        player.WalkAnimationProgress = 0;
                    }
                    else if (player.WalkAnimationProgress <= 0)
                    {
                        player.WalkAnimationProgress = animationFrames * frameDuration - 1;
                    }
                }
            }
        }
Example #2
0
        public override void Render <TSurface, TSource>(ScreenRenderer <TSurface, TSource> r)
        {
            foreach (PlayerAnimation player in WatchedComponents)
            {
                Renderable renderable = player.Owner.Components.Get <Renderable>();

                Vector2D[] offsets = new Vector2D[4];
                offsets[Head]   = new Vector2D(0, Origins[Head]);
                offsets[Legs]   = new Vector2D(0, Origins[Legs]);
                offsets[Woofer] = new Vector2D(0, Origins[Woofer]);
                offsets[Arms]   = new Vector2D(0, Origins[Arms]);


                if (!player.Initialized)
                {
                    renderable.Sprites = new Sprite[]
                    {
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(offsets[Head], 32, 32)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(offsets[Legs], 32, 32)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(offsets[Woofer], 32, 32)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(offsets[Arms], 32, 32))
                    };
                    player.Initialized = true;
                }

                Physical          physical    = player.Owner.Components.Get <Physical>();
                PlayerOrientation orientation = player.Owner.Components.Get <PlayerOrientation>();
                PulseAbility      pulse       = player.Owner.Components.Get <PulseAbility>();

                if (orientation.Unit.X > 0 || player.LastLookedRight)
                {
                    for (int i = Head; i <= Arms; i++)
                    {
                        offsets[i] += OrientationOffset;
                    }
                }
                if (orientation.Unit.Y >= Math.Sin(Math.PI / 6))
                {
                    offsets[Head].X += 32;
                }
                else if (orientation.Unit.Y <= Math.Sin(-Math.PI / 6))
                {
                    offsets[Head].X += 64;
                }

                if (orientation.Unit.X != 0)
                {
                    player.LastLookedRight = orientation.Unit.X > 0;
                }

                if (pulse != null)
                {
                    offsets[Woofer].Y += 32 * 5 * (1 - (pulse.EnergyMeter / pulse.MaxEnergy));
                }

                for (int i = Head; i <= Arms; i++)
                {
                    renderable.Sprites[i].Source = new Rectangle(offsets[i], 32, 32);
                }
            }
        }
Example #3
0
        public override void Render <TSurface, TSource>(ScreenRenderer <TSurface, TSource> r)
        {
            foreach (PlayerAnimation player in WatchedComponents)
            {
                Renderable renderable = player.Owner.Components.Get <Renderable>();

                Vector2D[] srcOffsets = new Vector2D[5];
                srcOffsets[Legs]   = new Vector2D(0, Origins[Legs]);
                srcOffsets[Torso]  = new Vector2D(0, Origins[Torso]);
                srcOffsets[Head]   = new Vector2D(0, Origins[Head]);
                srcOffsets[Woofer] = new Vector2D(0, Origins[Woofer]);
                srcOffsets[Arms]   = new Vector2D(0, Origins[Arms]);

                Vector2D[] destOffsets = new Vector2D[5];
                destOffsets[Legs] = destOffsets[Torso] = destOffsets[Head] = destOffsets[Woofer] = destOffsets[Arms] = Vector2D.Empty;

                if (!player.Initialized)
                {
                    renderable.Sprites = new List <Sprite>()
                    {
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(srcOffsets[Legs], 32, 32)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(srcOffsets[Torso], 32, 32)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(srcOffsets[Head], 32, 32)),
                        new Sprite("woofer", Destination, new Rectangle(srcOffsets[Woofer], 0, 0)),
                        new Sprite(player.SpritesheetName, Destination, new Rectangle(srcOffsets[Arms], 32, 32))
                    };
                    player.Initialized = true;
                }


                Physical physical = player.Owner.Components.Get <Physical>();
                PlayerMovementComponent movement    = player.Owner.Components.Get <PlayerMovementComponent>();
                PlayerOrientation       orientation = player.Owner.Components.Get <PlayerOrientation>();
                if (physical == null || movement == null || orientation == null)
                {
                    continue;
                }
                PulseAbility pulse = player.Owner.Components.Get <PulseAbility>();

                bool handsFree = pulse == null;

                if (orientation.Unit.X > 0 || player.LastLookedRight)
                {
                    for (int i = Legs; i <= Arms; i++)
                    {
                        srcOffsets[i] += OrientationOffset;
                    }
                }

                bool forceLook = handsFree && !movement.OnGround;

                if (orientation.Unit.Y >= Math.Sin(Math.PI / 9))
                {
                    if (!forceLook)
                    {
                        srcOffsets[Head].X += 32;
                    }
                    srcOffsets[Woofer].X += 32;
                    if (!handsFree)
                    {
                        srcOffsets[Arms].X += 32;
                    }
                    if (orientation.Unit.Y >= Math.Sin(2 * Math.PI / 6))
                    {
                        srcOffsets[Woofer].X += 32;
                        if (!handsFree)
                        {
                            srcOffsets[Arms].X += 32;
                        }
                    }
                }
                else if (orientation.Unit.Y <= Math.Sin(-Math.PI / 9))
                {
                    if (!forceLook)
                    {
                        srcOffsets[Head].X += 64;
                    }
                    srcOffsets[Woofer].X += 96;
                    if (!handsFree)
                    {
                        srcOffsets[Arms].X += 96;
                    }
                    if (orientation.Unit.Y <= Math.Sin(-2 * Math.PI / 6))
                    {
                        srcOffsets[Woofer].X += 32;
                        destOffsets[Woofer]  += new Vector2D(0, -3); //Offset woofer down since it goes out of the spritesheet grid
                        if (!handsFree)
                        {
                            srcOffsets[Arms].X += 32;
                        }
                    }
                }

                if (forceLook)
                {
                    srcOffsets[Head].X += physical.Velocity.Y <= 0 ? 64 : 32;
                }

                if (orientation.Unit.X != 0)
                {
                    player.LastLookedRight = orientation.Unit.X > 0;
                }

                if (pulse != null)
                {
                    srcOffsets[Woofer].Y  = 256;
                    srcOffsets[Woofer].Y -= 32 * Math.Round(pulse.EnergyMeter / 20);
                    if (pulse.EnergyMeter == 0 && player.WooferBlinkingTime >= 0.375)
                    {
                        srcOffsets[Woofer].Y += 32;
                    }
                }

                if (handsFree)
                {
                    srcOffsets[Arms].Y += 32;
                }

                if (!movement.OnGround || Math.Abs(physical.Velocity.X) <= 1e-2) /*player.WalkAnimationProgress = 0;*/ } {