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

Revision 7923, 3.6 KB checked in by sieerinn, 3 years ago (diff)

Hypystä tehty parempi

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