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

Revision 7209, 8.2 KB checked in by sieerinn, 5 years ago (diff)

Pelaajille laitettu animaatiot

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