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

Revision 7981, 4.0 KB checked in by sieerinn, 3 years ago (diff)

Pelaajille Die-metodi ja pelaajat hajoaa palasiksi kuollessaan

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