source: 2014/27/AleksanteriV/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Protokolla236TrueSurvivor/Player.cs @ 5427

Revision 5427, 5.4 KB checked in by mijoilmo, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Player : PhysicsObject
10{
11    GameObject thrusterEffect;
12    Proto236b parent;
13    private List<Weapon> weapons = new List<Weapon>();
14    private SoundEffect weaponSound;
15    private SoundEffect thrusterSound;
16    private bool soundPlayed = false;
17
18    public void rotate(double rotSpeed)
19    {
20        this.AngularVelocity = rotSpeed;
21    }
22    public void thrusterStart(double speed)
23    {
24        this.thrusterEffect.IsVisible = true;
25        this.Push(Vector.FromLengthAndAngle(speed * 800, this.Angle + Angle.RightAngle));
26        if (!thrusterSound.IsPlaying)
27        {
28            soundPlayed = false;
29        }
30        if (!soundPlayed) { thrusterSound.Play(); soundPlayed = true; };
31    }
32    public void thrusterEnd()
33    {
34        this.thrusterEffect.IsVisible = false;
35        soundPlayed = false;
36        thrusterSound.Stop();
37        //if this.ids, enable ids
38    }
39    public Player(Proto236b parent)
40        : base(40, 40)
41    {
42        this.parent = parent;
43        this.Image = parent.Images["player"];
44        this.Shape = Shape.FromImage(parent.Images["player"]);
45        bool IDS = false; //inertial dampening system, katsotaan pistetäänkö ostettavaksi peliin
46        if (IDS == true)
47        {
48            this.LinearDamping = 0.97;
49        }
50        else
51        {
52            this.LinearDamping = 1;
53        }
54        this.AngularDamping = 0.7;
55        this.Restitution = 0.2;
56        this.MaxVelocity = 1400; //2*800 on 1400
57        //ei niin
58
59        this.thrusterEffect = new GameObject(40, 40);
60        thrusterEffect.Animation = new Animation(parent.ImageLists["player_thruster"]);
61        thrusterEffect.Animation.FPS = 18;
62        thrusterEffect.Animation.Start();
63        thrusterEffect.IsVisible = false;
64        thrusterEffect.Y -= 19;
65        Add(thrusterEffect);
66
67        this.weaponSound = parent.loadSound("soundFx/lasershot");
68        this.thrusterSound = parent.loadSound("soundFx/raketti");
69    }
70    public void shoot()
71    {
72        foreach (Weapon weapon in weapons)
73        {
74            PhysicsObject bullet = weapon.Shoot();
75            if (bullet != null)
76            {
77                weaponSound.Play();
78                bullet.Velocity += this.Velocity;
79                bullet.Tag = "bullet";
80            }
81        }
82    }
83    public void BulletHit(PhysicsObject bullet, PhysicsObject target)
84    {
85        bullet.Destroy();
86        if (target.Tag.Equals("breakable"))
87        {
88            ((MikonPhysicsObject)target).Break(0, 2, 2);
89        }
90    }
91    public void attachWeapon()
92    {
93        Weapon weapon = new AssaultRifle(1, 1);
94        weapon.Angle += Angle.RightAngle;
95        weapon.IsVisible = false;
96        weapon.InfiniteAmmo = true;
97        weapon.ProjectileCollision = BulletHit;
98        Add(weapon);
99        weapons.Add(weapon);
100    }
101    public override void Update(Time time)
102    {
103        base.Update(time);
104        //this.parent.MessageDisplay.Clear();
105        //this.parent.MessageDisplay.Add(this.AbsolutePosition.ToString());
106        if (parent.CurrentLevel.IsPlanet)
107        {
108            //PLANEETAN PINNALLA
109            if (this.X > parent.Level.Right)
110            {
111                this.X = parent.Level.Left;
112                this.parent.Camera.X = parent.Level.Left; // kamera päivitetään ettei pelaaja välky
113            }
114            else if (this.X < parent.Level.Left)
115            {
116                this.X = parent.Level.Right;
117                this.parent.Camera.X = parent.Level.Right; // ditto
118            }
119            if (this.Y > parent.Level.Top - parent.GameScreen.Height / 2)
120            {
121                //player pystyy lähteä pois planeetalta kun menee tarpeeksi ylös
122                Angle shipAngle = Angle.FromRadians((Math.PI * 2) * ((parent.Player.X + parent.Level.Width / 2) / parent.Level.Width));
123                parent.LoadLevel("space", shipAngle);
124            }
125        }
126        else
127        {
128            //AVARUUDESSA
129            foreach (KeyValuePair<string, Planet> kvpair in parent.Galaxy.planets)
130            {
131                if (Vector.Distance(this.Position, kvpair.Value.Position) < kvpair.Value.Radius)
132                {
133                    //mennään planeettaan
134                    //approach angle?
135                    double deltaX = kvpair.Value.X - this.X;
136                    double deltaY = this.Y - kvpair.Value.Y;
137                    Angle approachAngle;
138                    if (deltaX != 0)
139                    {
140                        approachAngle = Angle.ArcTan(deltaY / deltaX);
141                    }
142                    else
143                    {
144                        approachAngle = Angle.RightAngle;
145                    }
146
147                    if (this.X < kvpair.Value.X)
148                    {
149                        approachAngle += Angle.StraightAngle;
150                    }
151                    else if (this.Y > kvpair.Value.Y)
152                    {
153                        approachAngle += Angle.FullAngle;
154                    }
155                    parent.LoadLevel(kvpair.Key, approachAngle);
156                    this.parent.MessageDisplay.Add(approachAngle.GetPositiveDegrees().ToString());
157                }
158            }
159        }
160    }
161}
Note: See TracBrowser for help on using the repository browser.