@@ -39,7 +39,7 @@ pub struct GameInput {
39
39
pub MouseX : i32 ,
40
40
pub MouseY : i32 ,
41
41
pub MouseZ : i32 ,
42
- pub SecondsToAdvanceOverUpdate : f32 ,
42
+ pub dtForFrame : f32 ,
43
43
pub controllers : [ GameControllerInput ; 5 ] ,
44
44
}
45
45
#[ derive( Default ) ]
@@ -104,7 +104,10 @@ pub struct GameButtonState {
104
104
pub ended_down : i32 ,
105
105
}
106
106
#[ derive( Default ) ]
107
- pub struct GameState { }
107
+ pub struct GameState {
108
+ pub PlayerX : f32 ,
109
+ pub PlayerY : f32 ,
110
+ }
108
111
pub struct GameMemory {
109
112
pub is_initalized : i32 ,
110
113
pub permanent_storage_size : u64 ,
@@ -144,8 +147,47 @@ pub extern "C" fn game_update_and_render(
144
147
let controller = & mut input. controllers [ controller_index] ;
145
148
if controller. is_analog != 0 {
146
149
} else {
150
+ // NOTE(casey): Use digital movement tuning
151
+ let mut dPlayerX = 0.0 ; // pixels/second
152
+ let mut dPlayerY = 0.0 ; // pixels/second
153
+
154
+ if controller. move_up ( ) . ended_down != 0 {
155
+ dPlayerY = -1.0 ;
156
+ }
157
+ if controller. move_down ( ) . ended_down != 0 {
158
+ dPlayerY = 1.0 ;
159
+ }
160
+ if controller. move_left ( ) . ended_down != 0 {
161
+ dPlayerX = -1.0 ;
162
+ }
163
+ if controller. move_right ( ) . ended_down != 0 {
164
+ dPlayerX = 1.0 ;
165
+ }
166
+ dPlayerX *= 64.0 ;
167
+ dPlayerY *= 64.0 ;
168
+
169
+ // TODO(casey): Diagonal will be faster! Fix once we have vectors :)
170
+ ( * game_state) . PlayerX += input. dtForFrame * dPlayerX as f32 ;
171
+ ( * game_state) . PlayerY += input. dtForFrame * dPlayerY as f32 ;
147
172
} ;
148
173
}
174
+ //[9][17]
175
+ let TileMap = [
176
+ [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] ,
177
+ [ 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ] ,
178
+ [ 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ] ,
179
+ [ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ] ,
180
+ [ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ,
181
+ [ 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ] ,
182
+ [ 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 ] ,
183
+ [ 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 ] ,
184
+ [ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] ,
185
+ ] ;
186
+
187
+ let UpperLeftX : f32 = -30.0 ;
188
+ let UpperLeftY : f32 = 0.0 ;
189
+ let TileWidth : f32 = 60.0 ;
190
+ let TileHeight : f32 = 60.0 ;
149
191
150
192
let width = buffer. width ;
151
193
let height = buffer. height ;
@@ -156,9 +198,43 @@ pub extern "C" fn game_update_and_render(
156
198
0.0 ,
157
199
width as f32 ,
158
200
height as f32 ,
159
- 0x00FF00FF ,
201
+ 1.0 ,
202
+ 0.0 ,
203
+ 0.1 ,
204
+ ) ;
205
+
206
+ for ( row_index, row) in TileMap . iter ( ) . enumerate ( ) {
207
+ for ( column_index, column) in row. iter ( ) . enumerate ( ) {
208
+ let tileID = column;
209
+ let mut Gray = 0.5 ;
210
+ match tileID {
211
+ 1 => Gray = 1.0 ,
212
+ _ => { }
213
+ }
214
+ let mut MinX = UpperLeftX + ( column_index as f32 ) * TileWidth ;
215
+ let mut MinY = UpperLeftY + ( row_index as f32 ) * TileHeight ;
216
+ let mut MaxX = MinX + TileWidth ;
217
+ let mut MaxY = MinY + TileHeight ;
218
+ DrawRectangle ( buffer, MinX , MinY , MaxX , MaxY , Gray , Gray , Gray ) ;
219
+ }
220
+ }
221
+ let PlayerR = 1.0 ;
222
+ let PlayerG = 1.0 ;
223
+ let mut PlayerB = 0.0 ;
224
+ let mut PlayerWidth = 0.75 * TileWidth as f32 ;
225
+ let mut PlayerHeight = TileHeight ;
226
+ let mut PlayerLeft = ( * game_state) . PlayerX - 0.5 * PlayerWidth ;
227
+ let mut PlayerTop = ( * game_state) . PlayerY - PlayerHeight as f32 ;
228
+ DrawRectangle (
229
+ buffer,
230
+ PlayerLeft ,
231
+ PlayerTop ,
232
+ PlayerLeft + PlayerWidth ,
233
+ PlayerTop + PlayerHeight as f32 ,
234
+ PlayerR ,
235
+ PlayerG ,
236
+ PlayerB ,
160
237
) ;
161
- DrawRectangle ( & mut buffer, 10.0 , 10.0 , 40.0 , 40.0 , 0x0000FFFF ) ;
162
238
}
163
239
}
164
240
@@ -168,7 +244,9 @@ unsafe fn DrawRectangle(
168
244
RealMinY : f32 ,
169
245
RealMaxX : f32 ,
170
246
RealMaxY : f32 ,
171
- Color : u32 ,
247
+ R : f32 ,
248
+ G : f32 ,
249
+ B : f32 ,
172
250
) {
173
251
// TODO(casey): Floating point color tomorrow!!!!!!
174
252
@@ -193,6 +271,9 @@ unsafe fn DrawRectangle(
193
271
MaxY = Buffer . height ;
194
272
}
195
273
274
+ let Color = ( ( R * 255.0 ) . round ( ) as u32 ) << 16
275
+ | ( ( G * 255.0 ) . round ( ) as u32 ) << 8
276
+ | ( ( B * 255.0 ) . round ( ) as u32 ) << 0 ;
196
277
let mut Row = Buffer
197
278
. memory
198
279
. offset ( ( MinX * Buffer . bytes_per_pixel + MinY * Buffer . pitch ) as isize )
0 commit comments