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

Revision 7991, 4.2 KB checked in by sieerinn, 3 years ago (diff)

IsAlive? muutettu auto-propertyksi

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