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

Revision 7204, 7.5 KB checked in by sieerinn, 3 years ago (diff)

Hohtoefekti tehty ilman varjostinohjelmia

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            images[i-1] = LoadImage($"{prefix}{numberOfImages.ToString().PadLeft(4, '0')}");
50        }
51        return images;
52    }
53
54    void CreateLevel()
55    {
56        Gravity = new Vector(0, -1000);
57
58        ColorTileMap map = ColorTileMap.FromLevelAsset("dungeon1");
59        map.SetTileMethod(Color.Black, LisaaTaso);
60        map.SetTileMethod(Color.FromHexCode("#FF0026FF"), delegate(Vector paikka, double leveys, double korkeus) { blue = CreatePlayer(paikka, leveys, korkeus, bluepic, Color.Blue);});
61        map.SetTileMethod(Color.FromHexCode("FFD800"), CreateWeaponCrate);
62        map.SetTileMethod(Color.Red, delegate(Vector paikka, double leveys, double korkeus) { red = CreatePlayer(paikka, leveys, korkeus, redpic, Color.Red); });
63        map.Execute(TILE_SIZE, TILE_SIZE);
64
65        Camera.ZoomToAllObjects();
66
67        Level.Background.Color = Color.Black;
68
69        percentageTracker = new DoubleMeter(0, 0, 100);
70
71        ProgressBar percentageBar = new ProgressBar(Level.Width / 2, 20) { Y = Screen.Top - 20, BarColor = red.Color, Color = blue.Color };
72        percentageBar.Y = Screen.Top - 20;
73        percentageBar.BindTo(percentageTracker);
74        Add(percentageBar);
75    }
76
77    void CreateWeaponCrate(Vector place, double width, double height)
78    {
79        WeaponCrate crate = new WeaponCrate(width, height);
80        crate.Position = place;
81        crate.Color = Color.DarkGray;
82        Add(crate);
83    }
84
85    void LisaaTaso(Vector paikka, double leveys, double korkeus)
86    {
87        PhysicsObject platform = PhysicsObject.CreateStaticObject(leveys, korkeus);
88        platform.Position = paikka;
89        platform.Color = Color.Black;
90        platform.Tag = "platform";
91        Add(platform);
92    }
93
94    Player CreatePlayer(Vector paikka, double leveys, double korkeus, Image playerspic, Color playersColor)
95    {
96        Player player = new Player(leveys, korkeus, playerspic, playersColor);
97        player.Position = paikka;
98        Add(player);
99
100        AddCollisionHandler(player, "platform", delegate(PhysicsObject a, PhysicsObject b)
101        {
102            ColorTile(a, b);
103        });
104        AddCollisionHandler(player, "crate", delegate(PhysicsObject a, PhysicsObject b)
105        {
106            //((Player)a).Weapon = ((WeaponCrate)b).GiveWeapon();
107            ((Player)a).Weapon = GunLottery();
108            ((Player)a).Weapon.ProjectileCollision = BulletHitsSomething;
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(50, 50);
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
154    void ColorTile(PhysicsObject player, PhysicsObject platform)
155    {
156        GameObject glow = platform.Objects.FirstOrDefault();
157        if (glow == null)
158        {
159            glow = new GameObject(TILE_SIZE * 7, TILE_SIZE * 7);
160            platform.Add(glow);
161        }
162        glow.Image = player.Color == Color.Blue? blueGlow : orangeGlow;
163        platform.Color = player.Color;
164
165        List<GameObject> colored = GetObjects(o => (o.Color == red.Color || o.Color == blue.Color) && (String)o.Tag == "platform");
166        percentageTracker.Value = (double)colored.FindAll(o => o.Color == red.Color).Count/colored.Count * 100;
167    }
168
169    void AddControls()
170    {
171        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
172
173        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, Move, "Liikuta pelaajaa", red);
174        ControllerOne.Listen(Button.A, ButtonState.Pressed, Jump, "Pelaaja hyppää", red, JUMPSPEED);
175        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Aim, "Tähtää", red);
176        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 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
183        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Ohjeet");
184        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Lopeta");
185
186        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => shader.NewWave(Mouse.PositionOnWorld), null);
187    }
188
189    void Move(AnalogState stick, Player player)
190    {
191        if (stick.StateVector.Magnitude > 0.15)
192            player.Walk(stick.StateVector.X > 0 ? Direction.Right : Direction.Left);
193    }
194
195    void Shoot(AnalogState trigger, Player player)
196    {
197        if (player.Weapon != null)
198        {
199            PhysicsObject bullet = player.Weapon.Shoot();
200            if (bullet != null)
201            {
202                bullet.Color = player.Color; 
203            }
204        }
205    }
206
207    void Jump(Player player, double speed)
208    {
209        player.Jump(speed);
210    }
211
212    void Aim(AnalogState tatinTila, Player player)
213    {
214
215    }
216
217    protected override void Draw(Microsoft.Xna.Framework.GameTime gameTime)
218    {
219        //shader.Draw(gameTime, base.Draw);
220
221        shader.Draw(gameTime);
222        base.Draw(gameTime);
223        shader.DrawEnd(gameTime);
224    }
225}
Note: See TracBrowser for help on using the repository browser.