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

Revision 7993, 4.3 KB checked in by sieerinn, 3 years ago (diff)

Jotain kuoleman korjausyrityksiä

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 Animation AnimWalk { get; set; }
13        public Animation AnimCrouch { get; set; }
14
15        public bool IsCrouching { get; private set; }
16
17        public bool Crouch { get; set; }
18        public int PlayerNumber { get; set; }
19        public SimplePhysics.Object Carrying { get; set; }
20        public List<Key> ControlKeys;
21
22        public bool IsAlive { get; set; }
23
24        private readonly double fullHeight;
25        private readonly double crouchHeight;
26        private double walk;
27        private bool jumping;
28        private double jumpForce;
29
30        public event Action Died;
31
32        public Player(double width, double height) : base(width, height)
33        {
34            IsAlive = true;
35            fullHeight = height;
36            crouchHeight = height / 2.0 - 1.0;
37            Friction = 0.2;
38        }
39
40        public void Reappear()
41        {
42            IsAlive = true;
43            IsVisible = true;
44            IgnoresCollisionResponse = false;
45            IgnoresGravity = false;
46            Velocity = Vector.Zero;
47        }
48
49        public override void Destroy()
50        {
51            IsVisible = false;
52            IgnoresCollisionResponse = true;
53            IgnoresGravity = true;
54            Position = new Vector(10000, 10000);
55            Velocity = Vector.Zero;
56        }
57
58        public void Die()
59        {
60            IsAlive = false;
61            Died?.Invoke();
62            Destroy();
63        }
64
65        public override void Walk(double speed)
66        {
67            if (speed > 0) Turn(Direction.Right);
68            if (speed < 0) Turn(Direction.Left);
69            walk = speed;
70            Friction = 0.0;
71        }
72
73        public void Jump()
74        {
75            jumping = true;
76
77            if (IsGrounded)
78                jumpForce = 400;
79        }
80
81        public override void Update(Time time)
82        {
83            var dt = time.SinceLastUpdate.TotalSeconds;
84
85            // Animaatiosäätö.
86            Animation = IsCrouching ? AnimCrouch : AnimWalk;
87
88            // Pelaajan kiihdytys.
89            var vel = Velocity.X;
90            if (Math.Abs(vel) < 200 || Math.Sign(vel) != Math.Sign(walk))
91            {
92                vel += walk * 3 * dt;
93            }
94            Velocity = new Vector(vel, Velocity.Y);
95
96            //Hyppy.
97            if (jumping && jumpForce > 150.0)
98            {
99                Velocity = new Vector(Velocity.X, jumpForce);
100                jumpForce -= 400 * dt;
101            }
102            if (Game.Collisions(this, new Vector(0, 1), true).Count > 0)
103                jumpForce = 0;
104
105            // Kyykky.
106            HandleCrouch();
107
108            // Liikutetaan kannettu kama päälle.
109            if (Carrying != null)
110            {
111                Carrying.X = this.X;
112                Carrying.Bottom = this.Top;
113            }
114
115            // Päivitetään fysiikat.
116            base.Update(time);
117
118            // Nollataan jumping ja walk muuttujat.
119            if (!jumping) jumpForce = 0.0;
120            jumping = false;
121            if (Math.Abs(walk) > 0)
122            {
123                walk = 0;
124                Friction = 0.2;
125            }
126
127
128            if(this.IsAlive && this.Top < VenienteFragore.Instance.Level.Bottom - 500.0)
129            {
130                this.Die();
131            }
132
133        }
134
135        private void HandleCrouch()
136        {
137            if (!IsCrouching && Crouch)
138            {
139                var oldBottom = Bottom;
140                Height = crouchHeight;
141                Bottom = oldBottom;
142                IsCrouching = true;
143            }
144
145            if (IsCrouching && !Crouch)
146            {
147                var oldBottom = Bottom;
148                Height = fullHeight;
149                Bottom = oldBottom;
150                IsCrouching = false;
151
152                if (Game.Collisions(this, Vector.Zero, true).Count > 0)
153                {
154                    Height = crouchHeight;
155                    Bottom = oldBottom;
156                    IsCrouching = true;
157                }
158            }
159        }
160    }
161
162}
Note: See TracBrowser for help on using the repository browser.