source: 2015/26/MikkoL/JRPG/JRPG/JRPG/MainGame.cs @ 6401

Revision 6401, 15.0 KB checked in by mijoliim, 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;
8using Microsoft.Xna.Framework;
9using Microsoft.Xna.Framework.Graphics;
10
11public class JRPG : PhysicsGame
12{
13    public static JRPG Game { get; set; }
14
15    public static BattleView BattleView { get; set; }
16
17    public Player Player { get; set; }
18
19    public SpriteFont MainFont { get; set; }
20
21    public bool UseShaders = false;
22    bool RandomEncounterAnim = false;
23    float WarpAmount = 0.0f;
24    double FadeSpeed = 0.5;
25    Effect Shader;
26    Effect Twirl;
27    public Effect Wave;
28    SpriteBatch spriteBatch;
29    RenderTarget2D renderTarget;
30
31    Widget Fade { get; set; }
32
33    public override void Begin()
34    {
35        SoundEffect.MasterVolume = 0.4;
36        MediaPlayer.Volume = 0.3;
37
38        MainFont = Content.Load<SpriteFont>("MainFont");
39
40        spriteBatch = new SpriteBatch(GraphicsDevice);
41        Shader = Content.Load<Effect>("Shader");
42        Twirl = Content.Load<Effect>("Twirl");
43        Wave = Content.Load<Effect>("Wave");
44
45        Game = this;
46
47        Window.Width = GameValues.SCREEN_WIDTH;
48        Window.Height = GameValues.SCREEN_HEIGHT;
49
50        SmoothTextures = false;
51        IsMouseVisible = true;
52
53        OverworldView.LoadOverworldView("Test");
54        Level.Size = OverworldView.CurrentMap.Size;
55        Level.Background.Color = Jypeli.Color.FromHexCode("000000");
56
57        LoadOWPlayer(new Vector(14,14));
58        LoadOWControlsKeyboard();
59        LoadOWControlsXboxController();
60
61        CheckWhereCanMove();
62       
63        Camera.Follow(Player);
64        Camera.ZoomFactor = 1.0f;
65        Camera.StayInLevel = true;
66
67        /*
68        DialogBox DB = new DialogBox();
69        DB.SetTextBase(MainFont, TextAlignment.Left);
70        DB.WriteRow("what");
71        DB.WriteRow(" ");
72        DB.WriteRow("XDDDDDDDDDDD w0ah 20mui9809809809");
73        DB.WriteRow(" ");
74        DB.DrawDialogBox();*/
75    }
76
77    public void LoadOWPlayer(Vector PositionInTiles)
78    {
79        Player = new Player(new Vector(28, 40));
80        Player.Position = PositionInTiles * 40 + new Vector(20, 30);
81        Player.PositionInTiles = PositionInTiles;
82        Player.Color = Jypeli.Color.Blue;
83        Add(Player);
84    }
85
86    #region Controls/Movement
87
88    public void LoadOWControlsKeyboard()
89    {
90        Keyboard.Listen(Key.Delete, ButtonState.Pressed, delegate
91        {
92            renderTarget = new RenderTarget2D(GraphicsDevice,
93                    GraphicsDevice.PresentationParameters.BackBufferWidth,
94                    GraphicsDevice.PresentationParameters.BackBufferHeight);
95        }, null);
96        Keyboard.Listen(Key.Insert, ButtonState.Pressed, delegate {
97            UseShaders = !UseShaders;
98        }, null);
99        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
100
101        Keyboard.Listen(Key.Left, ButtonState.Down, delegate { if(Keyboard.GetKeyState(Key.LeftShift) != ButtonState.Down) MoveLeft(GameValues.TILE_SIZE); }, null);
102        Keyboard.Listen(Key.Right, ButtonState.Down, delegate { if (Keyboard.GetKeyState(Key.LeftShift) != ButtonState.Down) MoveRight(GameValues.TILE_SIZE); }, null);
103        Keyboard.Listen(Key.Up, ButtonState.Down, delegate { if (Keyboard.GetKeyState(Key.LeftShift) != ButtonState.Down) MoveUp(GameValues.TILE_SIZE); }, null);
104        Keyboard.Listen(Key.Down, ButtonState.Down, delegate { if (Keyboard.GetKeyState(Key.LeftShift) != ButtonState.Down) MoveDown(GameValues.TILE_SIZE); }, null);
105
106        Keyboard.Listen(Key.Left, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Left; }, null);
107        Keyboard.Listen(Key.Right, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Right; }, null);
108        Keyboard.Listen(Key.Up, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Up; }, null);
109        Keyboard.Listen(Key.Down, ButtonState.Pressed, delegate {Movement.FacingDir = Movement.Direction.Down; }, null);
110
111
112        Keyboard.Listen(Key.PageDown, ButtonState.Pressed, FadeOut, null);
113        Keyboard.Listen(Key.PageUp, ButtonState.Pressed, FadeIn, null);
114    }
115    public void LoadOWControlsXboxController()
116    {
117        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, delegate { if (ControllerOne.GetButtonState(Button.LeftShoulder) != ButtonState.Down && ControllerOne.GetButtonState(Button.RightShoulder) != ButtonState.Down) MoveLeft(GameValues.TILE_SIZE); }, null);
118        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, delegate { if (ControllerOne.GetButtonState(Button.LeftShoulder) != ButtonState.Down && ControllerOne.GetButtonState(Button.RightShoulder) != ButtonState.Down) MoveRight(GameValues.TILE_SIZE); }, null);
119        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, delegate { if (ControllerOne.GetButtonState(Button.LeftShoulder) != ButtonState.Down && ControllerOne.GetButtonState(Button.RightShoulder) != ButtonState.Down) MoveUp(GameValues.TILE_SIZE); }, null);
120        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, delegate { if (ControllerOne.GetButtonState(Button.LeftShoulder) != ButtonState.Down && ControllerOne.GetButtonState(Button.RightShoulder) != ButtonState.Down) MoveDown(GameValues.TILE_SIZE); }, null);
121
122        ControllerOne.Listen(Button.DPadLeft, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Left; }, null);
123        ControllerOne.Listen(Button.DPadRight, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Right; }, null);
124        ControllerOne.Listen(Button.DPadUp, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Up; }, null);
125        ControllerOne.Listen(Button.DPadDown, ButtonState.Pressed, delegate { Movement.FacingDir = Movement.Direction.Down; }, null);
126    }
127
128    void MoveLeft(double Distance)
129    {
130       
131        if (Keyboard.GetKeyState(Key.Right) != ButtonState.Down && Movement.FacingDir == Movement.Direction.Left
132            || CheckIfAnotherArrowKeyIsDown(Key.Left, Key.Right) && Movement.FacingDir == Movement.Direction.Left
133            || !CheckIfAnotherArrowKeyIsDown(Key.Left) && Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
134        {
135            if (Movement.CanMoveLeft && Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
136            {
137                Player.Move(new Vector(-Distance, 0), GameValues.MOVE_SPEED);
138            }
139        }
140    }
141    void MoveRight(double Distance)
142    {
143        if (Keyboard.GetKeyState(Key.Left) != ButtonState.Down && Movement.FacingDir == Movement.Direction.Right
144            || CheckIfAnotherArrowKeyIsDown(Key.Right, Key.Left) && Movement.FacingDir == Movement.Direction.Right
145            || !CheckIfAnotherArrowKeyIsDown(Key.Right) && Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
146        {
147            if (Movement.CanMoveRight)
148            {
149                Player.Move(new Vector(Distance, 0), GameValues.MOVE_SPEED);
150            }
151        }
152    }
153    void MoveUp(double Distance)
154    {
155        if (Keyboard.GetKeyState(Key.Down) != ButtonState.Down && Movement.FacingDir == Movement.Direction.Up
156            || CheckIfAnotherArrowKeyIsDown(Key.Up, Key.Down) && Movement.FacingDir == Movement.Direction.Up
157            || !CheckIfAnotherArrowKeyIsDown(Key.Up) && Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
158        {
159            if (Movement.CanMoveUp)
160            {
161                Player.Move(new Vector(0, Distance), GameValues.MOVE_SPEED);
162            }
163        }
164    }
165    void MoveDown(double Distance)
166    {
167        if (Keyboard.GetKeyState(Key.Up) != ButtonState.Down && Movement.FacingDir == Movement.Direction.Down
168            || CheckIfAnotherArrowKeyIsDown(Key.Down, Key.Up) && Movement.FacingDir == Movement.Direction.Down
169            || !CheckIfAnotherArrowKeyIsDown(Key.Down) && Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
170        {
171            if (Movement.CanMoveDown)
172            {
173                Player.Move(new Vector(0, -Distance), GameValues.MOVE_SPEED);
174            }
175        }
176    }
177
178    public void CheckWhereCanMove()
179    {
180        Tile LeftTile = (Tile)OverworldView.CurrentCollisionMap.CollisionMapArray.GetValue((int)Math.Max(Player.PositionInTiles.X - 1,0),(int)(Player.PositionInTiles.Y));
181        Tile RightTile = (Tile)OverworldView.CurrentCollisionMap.CollisionMapArray.GetValue((int)Math.Min(Player.PositionInTiles.X + 1, OverworldView.CurrentCollisionMap.CollisionMapArray.GetLength(0) - 1) , (int)Player.PositionInTiles.Y);
182        Tile TopTile = (Tile)OverworldView.CurrentCollisionMap.CollisionMapArray.GetValue((int)Player.PositionInTiles.X, (int)Math.Min(Player.PositionInTiles.Y + 1, OverworldView.CurrentCollisionMap.CollisionMapArray.GetLength(1) - 1));     
183        Tile BottomTile = (Tile)OverworldView.CurrentCollisionMap.CollisionMapArray.GetValue((int)Player.PositionInTiles.X, (int)Math.Max(Player.PositionInTiles.Y - 1, 0));
184
185        if (LeftTile.IsWalkable) Movement.CanMoveLeft = true;
186        else Movement.CanMoveLeft = false;
187        if (RightTile.IsWalkable) Movement.CanMoveRight = true;
188        else Movement.CanMoveRight = false;
189        if (TopTile.IsWalkable) Movement.CanMoveUp = true;
190        else Movement.CanMoveUp = false;
191        if (BottomTile.IsWalkable) Movement.CanMoveDown = true;
192        else Movement.CanMoveDown = false;
193    }
194
195    bool CheckIfAnotherArrowKeyIsDown(Key Key)
196    {
197        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
198        {
199            if (Key != Key.Left) return true;
200        }
201        if (Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
202        {
203            if (Key != Key.Right) return true;
204        }
205        if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
206        {
207            if (Key != Key.Up) return true;
208        }
209        if (Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
210        {
211            if (Key != Key.Down) return true;
212        }
213
214        return false;
215    }
216    bool CheckIfAnotherArrowKeyIsDown(Key Key, Key Key2)
217    {
218        if (Keyboard.GetKeyState(Key.Left) == ButtonState.Down)
219        {
220            if (Key != Key.Left && Key2 != Key.Left) return true;
221        }
222        if (Keyboard.GetKeyState(Key.Right) == ButtonState.Down)
223        {
224            if (Key != Key.Right && Key2 != Key.Right) return true;
225        }
226        if (Keyboard.GetKeyState(Key.Up) == ButtonState.Down)
227        {
228            if (Key != Key.Up && Key2 != Key.Up) return true;
229        }
230        if (Keyboard.GetKeyState(Key.Down) == ButtonState.Down)
231        {
232            if (Key != Key.Down && Key2 != Key.Down) return true;
233        }
234
235        return false;
236    }
237
238    #endregion
239
240    public void FadeOut()
241    {
242        if (Fade != null && Fade.IsAddedToGame) Fade.Destroy();
243
244        Fade = new Widget(Screen.WidthSafe, Screen.HeightSafe);
245        Fade.Color = Jypeli.Color.Transparent;
246        Add(Fade);
247        Fade.FadeColorTo(Jypeli.Color.Black, FadeSpeed);
248    }
249    public void FadeIn()
250    {
251        if (Fade != null && Fade.IsAddedToGame) Fade.Destroy();
252
253        Fade = new Widget(Screen.WidthSafe, Screen.HeightSafe);
254        Fade.Color = Jypeli.Color.Black;
255        Add(Fade);
256        Fade.FadeColorTo(Jypeli.Color.Transparent, FadeSpeed);
257    }
258
259    public void FadeMusicOut()
260    {
261        double CurrentVolume = MediaPlayer.Volume;
262
263        Timer Fade = new Timer();
264        Fade.Interval = 0.001;
265        Fade.Timeout += delegate
266        {
267            MediaPlayer.Volume -= CurrentVolume / 500;
268
269            if (MediaPlayer.Volume <= 0)
270            {
271                MediaPlayer.Stop();
272                MediaPlayer.Volume = CurrentVolume;
273                Fade.Stop();
274            }
275        };
276        Fade.Start();
277    }
278    public void FadeMusicIn(string Music)
279    {
280        MediaPlayer.Play(Music);
281        double TargetVolume = MediaPlayer.Volume;
282
283        Timer Fade = new Timer();
284        Fade.Interval = 0.001;
285        Fade.Timeout += delegate
286        {
287            MediaPlayer.Volume += TargetVolume / 500;
288
289            if (MediaPlayer.Volume >= TargetVolume)
290            {
291                MediaPlayer.Volume = TargetVolume;
292                Fade.Stop();
293            }
294        };
295        Fade.Start();
296    }
297
298    public void RandomEncounterAnimation(Action AfterAnimation, Action OnFadingOut)
299    {
300        if (!RandomEncounterAnim)
301        {
302            renderTarget = new RenderTarget2D(GraphicsDevice,
303                    GraphicsDevice.PresentationParameters.BackBufferWidth,
304                    GraphicsDevice.PresentationParameters.BackBufferHeight);
305
306            RandomEncounterAnim = true;
307            SoundEffects.Battle.Encounter.Play();
308
309            Timer.SingleShot(1, delegate
310            {
311                FadeOut();
312                if (OnFadingOut != null) OnFadingOut.Invoke();
313                Timer.SingleShot(FadeSpeed + 1, delegate
314                {
315                    RandomEncounterAnim = false;
316
317                    Camera.ZoomFactor = 1.0f;
318                    UseShaders = false;
319                    WarpAmount = 0.0f;
320
321                    FadeIn();
322
323                    Camera.StayInLevel = false;
324                    Camera.Position = Player.Position;
325                   
326                    if (AfterAnimation != null) AfterAnimation.Invoke();
327                });
328            });
329        }
330       
331    }
332
333    protected override void Update(Time time)
334    {
335        base.Update(time);
336
337        if (Flags.InBattle)
338        {
339            BattleView.Update(time);
340        }
341
342        if (RandomEncounterAnim)
343        {
344            float deltaTime = (float)Time.SinceLastUpdate.TotalSeconds;
345            WarpAmount += deltaTime * 3;
346
347            Camera.ZoomFactor += deltaTime * 3;
348        }
349    }
350
351    protected override void Draw(GameTime gameTime)
352    {
353        GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Black);
354
355        if (UseShaders) GraphicsDevice.SetRenderTarget(renderTarget);
356
357        base.Draw(gameTime);
358        if (UseShaders) GraphicsDevice.SetRenderTarget(null);
359
360        if (UseShaders)
361        {
362            GraphicsDevice.Clear(Microsoft.Xna.Framework.Color.Black);
363           
364            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
365            if (Twirl == Content.Load<Effect>("Twirl"))
366            {
367                Twirl.Parameters["Rotation"].SetValue(new Vector2(WarpAmount, WarpAmount));
368                Twirl.Parameters["CenterRadius"].SetValue(new Vector4(0.5f, 0.5f, 0.5f, 0.5f));
369                Twirl.CurrentTechnique.Passes[0].Apply();
370            }
371            else if (Shader == Content.Load<Effect>("Shader") || Shader == Content.Load<Effect>("Wave"))
372            {
373                Shader.Parameters["parameter1"].SetValue((float)Time.SinceStartOfGame.TotalMilliseconds);
374                Shader.CurrentTechnique.Passes[0].Apply();
375            }
376            spriteBatch.Draw(renderTarget, new Vector2(0, 0), Microsoft.Xna.Framework.Color.White);
377            spriteBatch.End();
378        }
379    }
380}
Note: See TracBrowser for help on using the repository browser.