source: 2016/23/ohjaajat/Punasininen/Punasininen/Punasininen/Punasininen.cs @ 7206

Revision 7206, 7.8 KB checked in by sieerinn, 4 years ago (diff)

Merkkijonointerpolaatio poistettu

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9
10public class Punasininen : PhysicsGame
11{
12    private const double SPEED = 450;
13    private const double JUMPSPEED = 1250;
14    private const int TILE_SIZE = 40;
15
16    private Player blue;
17    private Player red;
18    private Image[] orangeTileImages = LoadImages("bluetile\\bluetile", 12);
19    private Image[] blueTileImages;
20    private Image orangeGlow = LoadImage("orangeglow");
21    private Image blueGlow = LoadImage("blueglow");
22
23    private Image bluepic;
24    private Image redpic;
25
26    private Image pistolpic;
27
28    DoubleMeter percentageTracker;
29
30    private Shader shader;
31
32    public override void Begin()
33    {
34
35        IsMouseVisible = true; // <- voi ottaa pois
36        shader = new Shader(GraphicsDevice, Content, Camera);
37
38        //Gravity = new Vector(0, -1000);
39        CreateLevel();
40        AddControls();
41    }
42
43    private static Image[] LoadImages(string prefix, int numberOfImages)
44    {
45        var images = new Image[numberOfImages];
46        for (int i = 1; i <= numberOfImages; i++)
47        {
48            images[i-1] = LoadImage(string.Format("{0}{1:0000}", prefix, numberOfImages));
49        }
50        return images;
51    }
52
53    void CreateLevel()
54    {
55        Gravity = new Vector(0, -1000);
56
57        ColorTileMap map = ColorTileMap.FromLevelAsset("dungeon1");
58        map.SetTileMethod(Color.Black, AddPlatform);
59        map.SetTileMethod(Color.FromHexCode("#FF0026FF"), delegate(Vector paikka, double leveys, double korkeus) { blue = CreatePlayer(paikka, leveys, korkeus, bluepic, Color.Blue);});
60        map.SetTileMethod(Color.FromHexCode("FFD800"), CreateWeaponCrate);
61        map.SetTileMethod(Color.Red, delegate(Vector paikka, double leveys, double korkeus) { red = CreatePlayer(paikka, leveys, korkeus, redpic, Color.Red); });
62        map.Execute(TILE_SIZE, TILE_SIZE);
63
64        Camera.ZoomToAllObjects();
65
66        Level.Background.Color = Color.Black;
67
68        percentageTracker = new DoubleMeter(0, 0, 100);
69
70        ProgressBar percentageBar = new ProgressBar(Level.Width / 2, 20) { Y = Screen.Top - 20, BarColor = red.Color, Color = blue.Color };
71        percentageBar.Y = Screen.Top - 20;
72        percentageBar.BindTo(percentageTracker);
73        Add(percentageBar);
74    }
75
76    void CreateWeaponCrate(Vector place, double width, double height)
77    {
78        WeaponCrate crate = new WeaponCrate(width, height);
79        crate.Position = place;
80        crate.Color = Color.DarkGray;
81        Add(crate);
82    }
83
84    void AddPlatform(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject platform = PhysicsObject.CreateStaticObject(leveys, korkeus);
87        platform.Position = paikka;
88        platform.Color = Color.Black;
89        platform.Tag = "platform";
90        Add(platform);
91    }
92
93    Player CreatePlayer(Vector paikka, double leveys, double korkeus, Image playerspic, Color playersColor)
94    {
95        Player player = new Player(leveys, korkeus, playerspic, playersColor);
96        player.Position = paikka;
97        Add(player);
98
99        player.Weapon = new AssaultRifle(leveys / 2, korkeus / 2) { FireRate = 1.5, AttackSound = null, MaxAmmoLifetime = TimeSpan.FromSeconds(8), ProjectileCollision = BulletHitsSomething};
100
101        AddCollisionHandler(player, "platform", delegate(PhysicsObject a, PhysicsObject b)
102        {
103            ColorTile(a, b);
104        });
105        AddCollisionHandler(player, "crate", delegate(PhysicsObject a, PhysicsObject b)
106        {
107            //((Player)a).Weapon = ((WeaponCrate)b).GiveWeapon();
108            player.Weapon = GunLottery();
109            b.Destroy();
110        });
111
112        return player;
113    }
114
115    void BulletHitsSomething(PhysicsObject bullet, PhysicsObject target)
116    {
117        if (target.Tag == "platform")
118        {
119            // TODO bullet must know its owner
120            if (bullet.Color == Color.Blue)
121            {
122                ColorTile(blue, target);
123            }
124            else if (bullet.Color == Color.Red)
125            {
126                ColorTile(red, target);
127            }
128        }
129        bullet.Destroy();
130    }
131
132    Weapon GunLottery()
133    {
134        return new AssaultRifle(TILE_SIZE / 2, TILE_SIZE / 2) { FireRate = 1.5, AttackSound = null, MaxAmmoLifetime = TimeSpan.FromSeconds(8), ProjectileCollision = BulletHitsSomething };
135    }
136
137    void Win(Player player)
138    {
139       Pause();
140        //Haluaisin tehdä tähän jonkinlaisen hauskan ponnahdusefektin jossain vaiheessa. Sellaisen napakan zoomin ja sitten boing. Hurdur.
141       Camera.ZoomTo(player.Left, player.Bottom, player.Right, player.Top + 100);
142
143        Label announcement = new Label("Kiva homma hei")
144        {
145            TextColor = player.Color,
146            Position = Camera.WorldToScreen(player.Position + new Vector(0, 40)),
147            TextScale = new Vector(2, 2)
148        };
149        Add(announcement);
150       
151    }
152
153    void ColorTile(PhysicsObject player, PhysicsObject platform)
154    {
155        GameObject glow = platform.Objects.FirstOrDefault();
156        if (glow == null)
157        {
158            glow = new GameObject(TILE_SIZE * 7, TILE_SIZE * 7);
159            platform.Add(glow);
160        }
161        glow.Image = player.Color == Color.Blue? blueGlow : orangeGlow;
162        platform.Color = player.Color;
163
164        List<GameObject> colored = GetObjects(o => (o.Color == red.Color || o.Color == blue.Color) && (String)o.Tag == "platform");
165        percentageTracker.Value = (double)colored.FindAll(o => o.Color == red.Color).Count/colored.Count * 100;
166    }
167
168    void AddControls()
169    {
170        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
171
172        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, Move, "Liikuta pelaajaa", red);
173        ControllerOne.Listen(Button.A, ButtonState.Pressed, Jump, "Pelaaja hyppää", red, JUMPSPEED);
174        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Aim, "Tähtää", red);
175        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, Shoot, "", red);
176        ControllerOne.ListenAnalog(AnalogControl.LeftTrigger, 0.1, Shoot, "", red);
177
178        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, Move, "Liikuta pelaajaa", blue);
179        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Jump, "Pelaaja hyppää", blue, JUMPSPEED);
180        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Aim, null, blue);
181        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.1, Shoot, "", blue);
182        ControllerTwo.ListenAnalog(AnalogControl.LeftTrigger, 0.1, Shoot, "", blue);
183
184        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Ohjeet");
185        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta");
186
187        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => shader.NewWave(Mouse.PositionOnWorld), null);
188    }
189
190    void Move(AnalogState stick, Player player)
191    {
192        if (stick.StateVector.Magnitude > 0.15)
193            player.Walk(stick.StateVector.X > 0 ? Direction.Right : Direction.Left);
194    }
195
196    void Shoot(AnalogState trigger, Player player)
197    {
198        if (player.Weapon != null)
199        {
200            PhysicsObject bullet = player.Weapon.Shoot();
201            if (bullet != null)
202            {
203                bullet.Color = player.Color; 
204            }
205        }
206    }
207
208    void Jump(Player player, double speed)
209    {
210        player.Jump(speed);
211    }
212
213    void Aim(AnalogState stickState, Player player)
214    {
215
216    }
217
218    protected override void Draw(Microsoft.Xna.Framework.GameTime gameTime)
219    {
220        //shader.Draw(gameTime, base.Draw);
221
222        shader.Draw(gameTime);
223        base.Draw(gameTime);
224        shader.DrawEnd(gameTime);
225    }
226}
Note: See TracBrowser for help on using the repository browser.