forked from chris-hydon/ox-g1-surface
-
Notifications
You must be signed in to change notification settings - Fork 0
/
App.cs
147 lines (118 loc) · 3.48 KB
/
App.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
using System;
using Microsoft.Surface.Core;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using SurfaceTower.Model;
using SurfaceTower.VideoEngine;
using SurfaceTower.Controller;
using SurfaceTower.TowerAudio;
namespace SurfaceTower
{
public interface IApp
{
BaseModel Model { get; }
ContactParser Controller { get; }
bool ApplicationActivated { get; }
GraphicsDevice GraphicsDevice { get; }
ContentManager Content { get; }
bool onScreen(Vector2 pos);
void Restart();
}
public class App : SurfaceApp, IApp
{
//For static access - should not be changed.
public static IApp Instance;
//Holds the game state and logic
protected BaseModel gameModel;
//Plays the sounds.
protected TowerAudioEngine towerAudioEngine;
//Used to display the game, implements the draw method
protected View gameView;
//Used to handle input
protected ContactParser contactParser;
#region Properties
public BaseModel Model
{
get { return gameModel; }
}
public ContactParser Controller
{
get { return contactParser; }
}
public bool ApplicationActivated
{
get { return isApplicationActivated; }
}
#endregion
protected override void Initialize()
{
base.Initialize();
App.Instance = this;
//Initialize the game model
gameModel = new GameModel();
//Initialize AudioEngine
towerAudioEngine = new TowerAudioEngine(gameModel);
//Initialize the UI component
gameView = new SimpleView(gameModel, graphics, Content);
contactParser = new ContactParser();
}
public void Restart()
{
Model.Restart();
gameView.Restart();
towerAudioEngine.Restart();
Controller.Restart();
}
public bool onScreen(Vector2 pos)
{
//width and height are set to the width and height of the screen
int width = App.Instance.GraphicsDevice.Viewport.Width;
int height = App.Instance.GraphicsDevice.Viewport.Height;
return (pos.X >= 0 && pos.X <= width && pos.Y >= 0 && pos.Y <= height);
}
#region Game Events
protected override void DoDraw(GameTime gameTime)
{
if (ApplicationActivated)
{
gameView.draw(gameTime);
}
}
protected override void DoRotate(GameTime gameTime, bool inverted)
{
}
protected override void DoUpdate(GameTime gameTime, bool activated)
{
if (ApplicationActivated)
{
gameModel.OnUpdate(gameTime);
}
}
protected override void ProcessContacts(GameTime gameTime, ReadOnlyContactCollection contacts)
{
contactParser.ProcessContacts(gameTime, contacts);
}
#endregion
#region Event Handlers
protected override void OnApplicationActivated(object sender, EventArgs e)
{
base.OnApplicationActivated(sender, e);
//TODO: Enable audio, animations here
//TODO: Optionally enable raw image here
}
protected override void OnApplicationPreviewed(object sender, EventArgs e)
{
base.OnApplicationPreviewed(sender, e);
//TODO: Disable audio here if it is enabled
//TODO: Optionally enable animations here
}
protected override void OnApplicationDeactivated(object sender, EventArgs e)
{
base.OnApplicationDeactivated(sender, e);
//TODO: Disable audio, animations here
//TODO: Disable raw image if it's enabled
}
#endregion
}
}