source: 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/Player.cs @ 7920

Revision 7920, 2.8 KB checked in by sieerinn, 3 years ago (diff)

Hahmoille kuvat peliin, liike on myös vähän mariota muistuttavampi

Line 
1using Jypeli;
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text;
6
7namespace VenienteFragore
8{
9    class Player : SimplePlatformCharacter
10    {
11        public bool IsCrouching { get; private set; }
12
13        public bool Crouch { get; set; }
14        public int PlayerNumber { get; set; }
15        public SimplePhysics.Object Carrying { get; set; }
16        public List<Key> ControlKeys;
17
18        private readonly double fullHeight;
19        private readonly double crouchHeight;
20        private double walk;
21
22        public Player(double width, double height) : base(width, height)
23        {
24            fullHeight = height;
25            crouchHeight = height / 2.0 - 1.0;
26            Friction = 0.2;
27        }
28
29        public void Reappear()
30        {
31            IsVisible = true;
32            IgnoresCollisionResponse = false;
33            IgnoresGravity = false;
34        }
35
36        public override void Destroy()
37        {
38            IsVisible = false;
39            IgnoresCollisionResponse = true;
40            IgnoresGravity = true;
41            Position = new Vector(double.MinValue, double.MinValue);
42        }
43
44        public override void Walk(double speed)
45        {
46            if (speed > 0) Turn(Direction.Right);
47            if (speed < 0) Turn(Direction.Left);
48            walk = speed;
49            Friction = 0.0;
50        }
51       
52        public override void Update(Time time)
53        {
54            var dt = time.SinceLastUpdate.TotalSeconds;
55
56            var vel = Velocity.X;
57            if (Math.Abs(vel) < 200)
58            {
59                vel += walk * 3 * dt;
60            }
61            Velocity = new Vector(vel, Velocity.Y);
62
63            HandleCrouch();
64
65            if (Carrying != null)
66            {
67                Carrying.X = this.X;
68                Carrying.Bottom = this.Top;
69            }
70
71            base.Update(time);
72
73            if (Math.Abs(walk) > 0)
74            {
75                walk = 0;
76                Friction = 0.2;
77            }
78
79        }
80
81        private void HandleCrouch()
82        {
83            if (!IsCrouching && Crouch)
84            {
85                var oldBottom = Bottom;
86                Height = crouchHeight;
87                Bottom = oldBottom;
88                IsCrouching = true;
89            }
90
91            if (IsCrouching && !Crouch)
92            {
93                var oldBottom = Bottom;
94                Height = fullHeight;
95                Bottom = oldBottom;
96                IsCrouching = false;
97
98                if (Game.Collisions(this, Vector.Zero, true).Count > 0)
99                {
100                    Height = crouchHeight;
101                    Bottom = oldBottom;
102                    IsCrouching = true;
103                }
104            }
105        }
106    }
107
108}
Note: See TracBrowser for help on using the repository browser.