diff options
| -rw-r--r-- | res/lucas.png | bin | 10009 -> 90846 bytes | |||
| -rw-r--r-- | res/lucas_anim.txt | 66 | ||||
| -rw-r--r-- | res/lucas_frames.txt | 403 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/renderer.cpp | 5 | ||||
| -rw-r--r-- | src/sprite.cpp | 45 | ||||
| -rw-r--r-- | src/sprite.h | 14 |
7 files changed, 491 insertions, 44 deletions
| diff --git a/res/lucas.png b/res/lucas.png index c059f96..dd053e5 100644 --- a/res/lucas.png +++ b/res/lucas.png | |||
| Binary files differ | |||
| diff --git a/res/lucas_anim.txt b/res/lucas_anim.txt index 19b1d67..daef503 100644 --- a/res/lucas_anim.txt +++ b/res/lucas_anim.txt | |||
| @@ -1,34 +1,34 @@ | |||
| 1 | ../res/lucas.png | 1 | ../res/lucas.png |
| 2 | 17,26 | 2 | ../res/lucas_frames.txt |
| 3 | still[down]: 1 | 3 | still[down]: 0 |
| 4 | still[left]: 4 | 4 | still[down_left]: 1 |
| 5 | still[down_left]: 7 | 5 | still[left]: 2 |
| 6 | still[down_right]: 10 | 6 | still[up_left]: 3 |
| 7 | still[up]: 13 | 7 | still[up]: 4 |
| 8 | still[right]: 16 | 8 | still[up_right]: 5 |
| 9 | still[up_left]: 19 | 9 | still[right]: 6 |
| 10 | still[up_right]: 22 | 10 | still[down_right]: 7 |
| 11 | walk[down]: 0,1,2 | 11 | walk[down]: 40,0,48 |
| 12 | walk[left]: 3,4,5 | 12 | walk[down_left]: 41,1,49 |
| 13 | walk[down_left]: 6,7,8 | 13 | walk[left]: 42,2,50 |
| 14 | walk[down_right]: 9,10,11 | 14 | walk[up_left]: 43,3,51 |
| 15 | walk[up]: 12,13,14 | 15 | walk[up]: 44,4,52 |
| 16 | walk[right]: 15,16,17 | 16 | walk[up_right]: 45,5,53 |
| 17 | walk[up_left]: 18,19,20 | 17 | walk[right]: 46,6,54 |
| 18 | walk[up_right]: 21,22,23 | 18 | walk[down_right]: 47,7,55 |
| 19 | crouch[down]: 24 | 19 | crouch[down]: 107 |
| 20 | crouch[down_left]: 25 | 20 | crouch[down_left]: 108 |
| 21 | crouch[left]: 26 | 21 | crouch[left]: 109 |
| 22 | crouch[up_left]: 27 | 22 | crouch[up_left]: 110 |
| 23 | crouch[up]: 28 | 23 | crouch[up]: 111 |
| 24 | crouch[up_right]: 29 | 24 | crouch[up_right]: 112 |
| 25 | crouch[right]: 30 | 25 | crouch[right]: 113 |
| 26 | crouch[down_right]: 31 | 26 | crouch[down_right]: 114 |
| 27 | run[down]: 32,33,34,35 | 27 | run[down]: 67,75,83,91 |
| 28 | run[right]: 36,37,38,39 | 28 | run[down_left]: 68,76,84,92 |
| 29 | run[down_right]: 40,41,42,43 | 29 | run[left]: 69,77,85,93 |
| 30 | run[up_right]: 44,45,46,47 | 30 | run[up_left]: 70,78,86,94 |
| 31 | run[up]: 48,49,50,51 | 31 | run[up]: 71,79,87,95 |
| 32 | run[left]: 52,53,54,55 | 32 | run[up_right]: 72,80,88,96 |
| 33 | run[up_left]: 56,57,58,59 | 33 | run[right]: 73,81,89,97 |
| 34 | run[down_left]: 60,61,62,63 \ No newline at end of file | 34 | run[down_right]: 74,82,90,98 \ No newline at end of file |
| diff --git a/res/lucas_frames.txt b/res/lucas_frames.txt new file mode 100644 index 0000000..e64d1e1 --- /dev/null +++ b/res/lucas_frames.txt | |||
| @@ -0,0 +1,403 @@ | |||
| 1 | 32,64 cell size | ||
| 2 | 10 frames per row | ||
| 3 | 399 frames | ||
| 4 | |||
| 5 | 16,32,8,32 | ||
| 6 | 16,32,8,32 | ||
| 7 | 16,32,8,32 | ||
| 8 | 16,32,8,32 | ||
| 9 | 16,32,9,32 | ||
| 10 | 16,32,9,32 | ||
| 11 | 16,32,9,32 | ||
| 12 | 16,32,9,32 | ||
| 13 | 16,32,8,32 | ||
| 14 | 16,32,8,32 | ||
| 15 | 16,32,8,32 | ||
| 16 | 16,32,8,32 | ||
| 17 | 16,32,9,32 | ||
| 18 | 16,32,9,32 | ||
| 19 | 16,32,9,32 | ||
| 20 | 16,32,9,32 | ||
| 21 | 16,24,8,24 | ||
| 22 | 16,24,9,24 | ||
| 23 | 17,32,10,32 | ||
| 24 | 16,24,8,24 | ||
| 25 | 16,24,8,24 | ||
| 26 | 16,24,9,24 | ||
| 27 | 17,32,7,32 | ||
| 28 | 16,24,8,24 | ||
| 29 | 16,24,8,24 | ||
| 30 | 16,24,9,24 | ||
| 31 | 17,24,10,24 | ||
| 32 | 16,24,8,24 | ||
| 33 | 16,24,9,24 | ||
| 34 | 16,24,9,24 | ||
| 35 | 17,24,7,24 | ||
| 36 | 16,24,8,24 | ||
| 37 | 17,24,9,24 | ||
| 38 | 16,24,9,24 | ||
| 39 | 17,24,10,24 | ||
| 40 | 16,24,8,24 | ||
| 41 | 17,24,9,24 | ||
| 42 | 16,24,9,24 | ||
| 43 | 17,24,7,24 | ||
| 44 | 16,24,8,24 | ||
| 45 | 16,24,8,24 | ||
| 46 | 16,24,8,24 | ||
| 47 | 16,24,8,24 | ||
| 48 | 16,24,8,24 | ||
| 49 | 16,24,9,24 | ||
| 50 | 16,24,9,24 | ||
| 51 | 16,24,9,24 | ||
| 52 | 16,24,9,24 | ||
| 53 | 17,24,9,24 | ||
| 54 | 16,24,8,24 | ||
| 55 | 16,24,8,24 | ||
| 56 | 16,24,8,24 | ||
| 57 | 17,24,9,24 | ||
| 58 | 16,24,9,24 | ||
| 59 | 16,24,9,24 | ||
| 60 | 16,24,9,24 | ||
| 61 | 16,32,8,32 | ||
| 62 | 16,32,8,32 | ||
| 63 | 16,32,8,32 | ||
| 64 | 16,32,8,32 | ||
| 65 | 17,32,9,32 | ||
| 66 | 16,32,9,32 | ||
| 67 | 16,32,9,32 | ||
| 68 | 16,32,9,32 | ||
| 69 | 16,24,8,24 | ||
| 70 | 16,24,8,24 | ||
| 71 | 16,24,7,24 | ||
| 72 | 16,32,8,32 | ||
| 73 | 16,32,8,32 | ||
| 74 | 16,32,8,32 | ||
| 75 | 16,32,8,32 | ||
| 76 | 16,32,8,32 | ||
| 77 | 16,32,8,32 | ||
| 78 | 16,32,8,32 | ||
| 79 | 16,32,8,32 | ||
| 80 | 16,24,8,24 | ||
| 81 | 16,24,8,24 | ||
| 82 | 16,24,8,24 | ||
| 83 | 16,24,8,24 | ||
| 84 | 16,24,8,24 | ||
| 85 | 16,24,8,24 | ||
| 86 | 16,24,8,24 | ||
| 87 | 16,24,8,24 | ||
| 88 | 17,32,9,32 | ||
| 89 | 16,32,8,32 | ||
| 90 | 16,32,8,32 | ||
| 91 | 16,32,8,32 | ||
| 92 | 17,32,8,32 | ||
| 93 | 16,32,8,32 | ||
| 94 | 16,32,8,32 | ||
| 95 | 16,32,8,32 | ||
| 96 | 17,24,9,24 | ||
| 97 | 16,24,8,24 | ||
| 98 | 16,24,8,24 | ||
| 99 | 16,24,8,24 | ||
| 100 | 17,24,8,24 | ||
| 101 | 16,24,8,24 | ||
| 102 | 16,24,8,24 | ||
| 103 | 16,24,8,24 | ||
| 104 | 16,24,8,24 | ||
| 105 | 16,24,8,24 | ||
| 106 | 16,24,8,24 | ||
| 107 | 16,24,8,24 | ||
| 108 | 16,24,8,24 | ||
| 109 | 16,24,8,24 | ||
| 110 | 16,24,8,24 | ||
| 111 | 16,24,8,24 | ||
| 112 | 16,24,8,24 | ||
| 113 | 16,24,8,24 | ||
| 114 | 16,24,8,24 | ||
| 115 | 16,24,8,24 | ||
| 116 | 16,24,8,24 | ||
| 117 | 16,24,8,24 | ||
| 118 | 16,24,8,24 | ||
| 119 | 16,24,8,24 | ||
| 120 | 16,24,8,24 | ||
| 121 | 32,32,16,32 | ||
| 122 | 32,32,16,32 | ||
| 123 | 32,32,16,32 | ||
| 124 | 32,32,16,32 | ||
| 125 | 32,24,16,24 | ||
| 126 | 32,24,16,24 | ||
| 127 | 16,24,8,24 | ||
| 128 | 16,32,8,33 | ||
| 129 | 16,32,8,32 | ||
| 130 | 16,32,8,31 | ||
| 131 | 16,32,8,33 | ||
| 132 | 16,32,8,32 | ||
| 133 | 16,32,8,31 | ||
| 134 | 17,32,9,33 | ||
| 135 | 17,32,9,32 | ||
| 136 | 17,32,9,31 | ||
| 137 | 17,32,12,14 | ||
| 138 | 17,32,12,14 | ||
| 139 | 16,32,9,15 | ||
| 140 | 16,32,9,15 | ||
| 141 | 16,32,5,15 | ||
| 142 | 16,32,5,15 | ||
| 143 | 16,32,5,15 | ||
| 144 | 16,32,5,15 | ||
| 145 | 16,32,3,16 | ||
| 146 | 16,32,3,16 | ||
| 147 | 16,32,4,16 | ||
| 148 | 16,32,4,16 | ||
| 149 | 16,32,6,18 | ||
| 150 | 16,32,6,18 | ||
| 151 | 16,32,8,18 | ||
| 152 | 16,32,8,18 | ||
| 153 | 16,32,8,20 | ||
| 154 | 16,32,8,20 | ||
| 155 | 16,32,10,16 | ||
| 156 | 16,32,10,16 | ||
| 157 | 32,24,16,6 | ||
| 158 | 32,24,20,10 | ||
| 159 | 32,16,26,8 | ||
| 160 | 32,24,22,21 | ||
| 161 | 16,32,8,25 | ||
| 162 | 32,24,10,21 | ||
| 163 | 32,16,6,10 | ||
| 164 | 32,24,12,10 | ||
| 165 | 16,32,9,32 | ||
| 166 | 32,32,17,32 | ||
| 167 | 32,24,17,24 | ||
| 168 | 16,24,9,24 | ||
| 169 | 32,32,17,32 | ||
| 170 | 17,32,9,32 | ||
| 171 | 32,32,17,32 | ||
| 172 | 16,32,8,29 | ||
| 173 | 16,32,8,29 | ||
| 174 | 16,32,8,29 | ||
| 175 | 16,32,8,29 | ||
| 176 | 16,24,8,21 | ||
| 177 | 16,24,8,21 | ||
| 178 | 16,32,8,29 | ||
| 179 | 16,32,8,29 | ||
| 180 | 16,32,8,29 | ||
| 181 | 16,32,8,29 | ||
| 182 | 16,32,8,29 | ||
| 183 | 16,32,8,29 | ||
| 184 | 16,32,8,29 | ||
| 185 | 16,32,8,29 | ||
| 186 | 16,32,8,29 | ||
| 187 | 32,32,16,32 | ||
| 188 | 32,32,16,29 | ||
| 189 | 32,32,16,29 | ||
| 190 | 32,32,16,29 | ||
| 191 | 32,32,16,29 | ||
| 192 | 32,32,16,32 | ||
| 193 | 32,32,16,32 | ||
| 194 | 16,32,8,32 | ||
| 195 | 16,32,8,32 | ||
| 196 | 16,32,8,32 | ||
| 197 | 16,32,9,32 | ||
| 198 | 16,32,9,32 | ||
| 199 | 16,32,9,35 | ||
| 200 | 16,32,9,35 | ||
| 201 | 16,32,6,36 | ||
| 202 | 16,32,6,36 | ||
| 203 | 16,32,2,36 | ||
| 204 | 16,32,2,36 | ||
| 205 | 16,32,2,36 | ||
| 206 | 16,32,2,36 | ||
| 207 | 16,32,0,37 | ||
| 208 | 16,32,0,37 | ||
| 209 | 16,32,1,37 | ||
| 210 | 16,32,1,37 | ||
| 211 | 16,32,3,39 | ||
| 212 | 16,32,3,39 | ||
| 213 | 16,32,5,39 | ||
| 214 | 16,32,5,39 | ||
| 215 | 16,32,5,41 | ||
| 216 | 16,32,5,41 | ||
| 217 | 16,32,7,37 | ||
| 218 | 16,32,7,37 | ||
| 219 | 16,32,4,14 | ||
| 220 | 16,32,4,14 | ||
| 221 | 16,32,7,15 | ||
| 222 | 16,32,7,15 | ||
| 223 | 16,32,11,15 | ||
| 224 | 16,32,11,15 | ||
| 225 | 16,32,11,15 | ||
| 226 | 16,32,11,15 | ||
| 227 | 16,32,13,16 | ||
| 228 | 16,32,13,16 | ||
| 229 | 16,32,12,16 | ||
| 230 | 16,32,12,16 | ||
| 231 | 16,32,10,18 | ||
| 232 | 16,32,10,18 | ||
| 233 | 16,32,8,18 | ||
| 234 | 16,32,8,18 | ||
| 235 | 16,32,8,20 | ||
| 236 | 16,32,8,20 | ||
| 237 | 16,32,6,16 | ||
| 238 | 16,32,6,16 | ||
| 239 | 16,32,9,32 | ||
| 240 | 16,32,8,32 | ||
| 241 | 16,32,8,32 | ||
| 242 | 16,32,8,32 | ||
| 243 | 16,32,8,32 | ||
| 244 | 32,16,16,16 | ||
| 245 | 16,32,10,28 | ||
| 246 | 16,32,7,32 | ||
| 247 | 16,32,8,32 | ||
| 248 | 32,32,16,32 | ||
| 249 | 32,32,16,32 | ||
| 250 | 16,32,9,32 | ||
| 251 | 32,32,9,32 | ||
| 252 | 32,32,17,32 | ||
| 253 | 32,32,17,32 | ||
| 254 | 32,32,17,32 | ||
| 255 | 16,32,8,32 | ||
| 256 | 16,32,8,32 | ||
| 257 | 16,32,9,32 | ||
| 258 | 16,32,9,32 | ||
| 259 | 16,32,8,32 | ||
| 260 | 16,32,8,32 | ||
| 261 | 16,32,8,32 | ||
| 262 | 16,32,8,31 | ||
| 263 | 16,32,8,32 | ||
| 264 | 17,39,9,40 | ||
| 265 | 17,54,9,56 | ||
| 266 | 17,53,9,55 | ||
| 267 | 17,64,9,70 | ||
| 268 | 18,63,6,69 | ||
| 269 | 17,64,7,70 | ||
| 270 | 18,64,7,70 | ||
| 271 | 17,64,9,70 | ||
| 272 | 16,64,8,70 | ||
| 273 | 17,63,9,69 | ||
| 274 | 18,64,11,70 | ||
| 275 | 16,63,9,68 | ||
| 276 | 17,64,11,70 | ||
| 277 | 16,63,12,69 | ||
| 278 | 17,39,9,40 | ||
| 279 | 17,38,9,39 | ||
| 280 | 17,37,9,37 | ||
| 281 | 16,40,8,40 | ||
| 282 | 16,37,8,37 | ||
| 283 | 17,53,9,77 | ||
| 284 | 17,45,9,83 | ||
| 285 | 17,36,9,86 | ||
| 286 | 16,32,9,87 | ||
| 287 | 16,23,8,86 | ||
| 288 | 32,24,16,89 | ||
| 289 | 17,24,8,94 | ||
| 290 | 32,32,16,101 | ||
| 291 | 17,24,8,95 | ||
| 292 | 32,32,16,100 | ||
| 293 | 32,24,17,89 | ||
| 294 | 32,24,17,85 | ||
| 295 | 32,24,17,79 | ||
| 296 | 32,18,19,65 | ||
| 297 | 32,16,19,60 | ||
| 298 | 32,16,18,60 | ||
| 299 | 32,16,18,15 | ||
| 300 | 32,24,14,22 | ||
| 301 | 16,24,8,24 | ||
| 302 | 16,24,9,23 | ||
| 303 | 16,24,10,24 | ||
| 304 | 16,32,8,32 | ||
| 305 | 16,32,8,32 | ||
| 306 | 16,32,8,32 | ||
| 307 | 16,24,8,24 | ||
| 308 | 16,24,8,24 | ||
| 309 | 18,32,11,32 | ||
| 310 | 17,24,10,24 | ||
| 311 | 18,32,11,32 | ||
| 312 | 17,24,10,24 | ||
| 313 | 16,32,11,32 | ||
| 314 | 17,24,11,24 | ||
| 315 | 16,32,11,32 | ||
| 316 | 17,24,11,24 | ||
| 317 | 16,32,13,32 | ||
| 318 | 16,32,15,32 | ||
| 319 | 16,32,17,33 | ||
| 320 | 16,32,19,33 | ||
| 321 | 17,24,21,26 | ||
| 322 | 17,24,23,26 | ||
| 323 | 17,24,25,27 | ||
| 324 | 17,24,27,28 | ||
| 325 | 16,32,29,36 | ||
| 326 | 16,32,31,37 | ||
| 327 | 16,32,33,38 | ||
| 328 | 16,32,35,39 | ||
| 329 | 16,32,37,39 | ||
| 330 | 16,32,39,38 | ||
| 331 | 16,32,41,37 | ||
| 332 | 16,32,43,36 | ||
| 333 | 16,32,43,35 | ||
| 334 | 16,32,45,34 | ||
| 335 | 16,32,46,33 | ||
| 336 | 16,32,48,32 | ||
| 337 | 16,32,50,30 | ||
| 338 | 16,32,52,28 | ||
| 339 | 16,32,53,25 | ||
| 340 | 16,32,54,22 | ||
| 341 | 16,32,55,20 | ||
| 342 | 16,32,56,17 | ||
| 343 | 17,32,57,11 | ||
| 344 | 17,32,57,6 | ||
| 345 | 17,32,59,1 | ||
| 346 | 16,32,8,32 | ||
| 347 | 16,32,8,32 | ||
| 348 | 16,32,8,32 | ||
| 349 | 16,32,8,32 | ||
| 350 | 16,32,8,32 | ||
| 351 | 16,32,8,32 | ||
| 352 | 16,32,8,32 | ||
| 353 | 16,32,8,32 | ||
| 354 | 16,24,8,24 | ||
| 355 | 16,32,8,32 | ||
| 356 | 32,32,16,32 | ||
| 357 | 32,32,16,32 | ||
| 358 | 32,32,16,32 | ||
| 359 | 32,32,16,32 | ||
| 360 | 32,32,16,32 | ||
| 361 | 8,8,4,8 | ||
| 362 | 8,8,4,8 | ||
| 363 | 8,8,3,8 | ||
| 364 | 16,32,8,32 | ||
| 365 | 32,32,16,32 | ||
| 366 | 32,32,16,32 | ||
| 367 | 32,32,16,32 | ||
| 368 | 16,24,8,18 | ||
| 369 | 16,24,8,18 | ||
| 370 | 16,24,8,18 | ||
| 371 | 16,24,8,18 | ||
| 372 | 16,24,8,18 | ||
| 373 | 16,32,8,26 | ||
| 374 | 16,32,8,26 | ||
| 375 | 16,32,8,26 | ||
| 376 | 16,32,8,26 | ||
| 377 | 16,32,8,26 | ||
| 378 | 16,32,8,26 | ||
| 379 | 16,32,8,26 | ||
| 380 | 16,32,8,26 | ||
| 381 | 16,32,8,26 | ||
| 382 | 32,32,16,26 | ||
| 383 | 32,32,16,26 | ||
| 384 | 32,32,16,26 | ||
| 385 | 32,32,16,26 | ||
| 386 | 32,32,16,26 | ||
| 387 | 32,32,16,26 | ||
| 388 | 32,32,16,26 | ||
| 389 | 16,32,8,26 | ||
| 390 | 32,16,16,12 | ||
| 391 | 16,32,8,32 | ||
| 392 | 16,32,9,32 | ||
| 393 | 17,32,8,32 | ||
| 394 | 16,24,10,26 | ||
| 395 | 16,24,10,26 | ||
| 396 | 16,24,11,26 | ||
| 397 | 16,24,11,26 | ||
| 398 | 16,31,10,33 | ||
| 399 | 16,32,9,34 | ||
| 400 | 16,32,8,34 | ||
| 401 | 16,24,9,25 | ||
| 402 | 16,24,9,24 | ||
| 403 | 16,32,8,32 | ||
| diff --git a/src/main.cpp b/src/main.cpp index f9db18d..65b322e 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
| @@ -12,6 +12,8 @@ void loop(Renderer& renderer) { | |||
| 12 | int lucasSprite = game.addSprite(Sprite("../res/lucas_anim.txt", renderer)); | 12 | int lucasSprite = game.addSprite(Sprite("../res/lucas_anim.txt", renderer)); |
| 13 | int lucasSprite2 = game.addSprite(Sprite("../res/lucas_anim.txt", renderer)); | 13 | int lucasSprite2 = game.addSprite(Sprite("../res/lucas_anim.txt", renderer)); |
| 14 | 14 | ||
| 15 | game.moveSprite(lucasSprite, {32,32}); | ||
| 16 | |||
| 15 | Party party; | 17 | Party party; |
| 16 | party.addMember(game, lucasSprite); | 18 | party.addMember(game, lucasSprite); |
| 17 | party.addMember(game, lucasSprite2); | 19 | party.addMember(game, lucasSprite2); |
| diff --git a/src/renderer.cpp b/src/renderer.cpp index 18b8ed8..931e699 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
| @@ -49,8 +49,9 @@ void Renderer::render(Game& game) { | |||
| 49 | SDL_RenderClear(ren_.get()); | 49 | SDL_RenderClear(ren_.get()); |
| 50 | 50 | ||
| 51 | for (const Sprite& sprite : game.getSpritesByY() | game.spriteView()) { | 51 | for (const Sprite& sprite : game.getSpritesByY() | game.spriteView()) { |
| 52 | SDL_Rect src { sprite.getFrame() * sprite.size().w(), 0, sprite.size().w(), sprite.size().h() }; | 52 | const SpriteFrame& frame = sprite.getFrame(); |
| 53 | SDL_Rect dest { sprite.loc().x(), sprite.loc().y(), sprite.size().w(), sprite.size().h() }; | 53 | const SDL_Rect& src = frame.srcRect; |
| 54 | SDL_Rect dest { sprite.loc().x() - frame.center.x(), sprite.loc().y() - frame.center.y(), frame.size.w(), frame.size.h() }; | ||
| 54 | SDL_RenderCopy(ren_.get(), textures_.at(sprite.getTextureId()).get(), &src, &dest); | 55 | SDL_RenderCopy(ren_.get(), textures_.at(sprite.getTextureId()).get(), &src, &dest); |
| 55 | } | 56 | } |
| 56 | 57 | ||
| diff --git a/src/sprite.cpp b/src/sprite.cpp index c52807a..b84f4ce 100644 --- a/src/sprite.cpp +++ b/src/sprite.cpp | |||
| @@ -12,14 +12,53 @@ Sprite::Sprite(std::string_view filename, Renderer& renderer) { | |||
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | char ch; | 14 | char ch; |
| 15 | std::string line; | ||
| 15 | 16 | ||
| 16 | std::string imagename; | 17 | std::string imagename; |
| 17 | datafile >> imagename; | 18 | datafile >> imagename; |
| 18 | textureId_ = renderer.loadImageFromFile(imagename); | 19 | textureId_ = renderer.loadImageFromFile(imagename); |
| 19 | 20 | ||
| 20 | datafile >> size_.w(); | 21 | std::string framefilename; |
| 21 | datafile >> ch; //, | 22 | datafile >> framefilename; |
| 22 | datafile >> size_.h(); | 23 | |
| 24 | std::ifstream framefile(framefilename); | ||
| 25 | if (!framefile.is_open()) { | ||
| 26 | throw std::invalid_argument("Could not find frame datafile: " + framefilename); | ||
| 27 | } | ||
| 28 | |||
| 29 | vec2i cellSize; | ||
| 30 | framefile >> cellSize.w(); | ||
| 31 | framefile >> ch; //, | ||
| 32 | framefile >> cellSize.h(); | ||
| 33 | std::getline(framefile, line); // cell size | ||
| 34 | |||
| 35 | int framesPerRow; | ||
| 36 | framefile >> framesPerRow; | ||
| 37 | std::getline(framefile, line); // frames per row | ||
| 38 | |||
| 39 | int numFrames; | ||
| 40 | framefile >> numFrames; | ||
| 41 | std::getline(framefile, line); // frames | ||
| 42 | std::getline(framefile, line); // blank | ||
| 43 | |||
| 44 | for (int i=0; i<numFrames; i++) { | ||
| 45 | SpriteFrame f; | ||
| 46 | framefile >> f.size.w(); | ||
| 47 | framefile >> ch; //, | ||
| 48 | framefile >> f.size.h(); | ||
| 49 | framefile >> ch; //, | ||
| 50 | framefile >> f.center.x(); | ||
| 51 | framefile >> ch; //, | ||
| 52 | framefile >> f.center.y(); | ||
| 53 | std::getline(framefile, line); // blank | ||
| 54 | |||
| 55 | f.srcRect.x = (i % framesPerRow) * cellSize.w(); | ||
| 56 | f.srcRect.y = (i / framesPerRow) * cellSize.h(); | ||
| 57 | f.srcRect.w = f.size.w(); | ||
| 58 | f.srcRect.h = f.size.h(); | ||
| 59 | |||
| 60 | frames_.push_back(std::move(f)); | ||
| 61 | } | ||
| 23 | 62 | ||
| 24 | std::string animLine; | 63 | std::string animLine; |
| 25 | std::getline(datafile, animLine); // blank | 64 | std::getline(datafile, animLine); // blank |
| diff --git a/src/sprite.h b/src/sprite.h index 82ea90c..dc26fad 100644 --- a/src/sprite.h +++ b/src/sprite.h | |||
| @@ -8,6 +8,12 @@ | |||
| 8 | #include "renderer.h" | 8 | #include "renderer.h" |
| 9 | #include "vector.h" | 9 | #include "vector.h" |
| 10 | 10 | ||
| 11 | struct SpriteFrame { | ||
| 12 | SDL_Rect srcRect; | ||
| 13 | vec2i center; | ||
| 14 | vec2i size; | ||
| 15 | }; | ||
| 16 | |||
| 11 | class Sprite { | 17 | class Sprite { |
| 12 | public: | 18 | public: |
| 13 | 19 | ||
| @@ -21,11 +27,7 @@ public: | |||
| 21 | 27 | ||
| 22 | vec2i& loc() { return loc_; } | 28 | vec2i& loc() { return loc_; } |
| 23 | 29 | ||
| 24 | const vec2i& size() const { return size_; } | 30 | const SpriteFrame& getFrame() const { return frames_.at(animations_[curAnim_][curFrame_]); } |
| 25 | |||
| 26 | vec2i& size() { return size_; } | ||
| 27 | |||
| 28 | int getFrame() const { return animations_[curAnim_][curFrame_]; } | ||
| 29 | 31 | ||
| 30 | void setDirection(Direction dir); | 32 | void setDirection(Direction dir); |
| 31 | 33 | ||
| @@ -41,11 +43,11 @@ private: | |||
| 41 | 43 | ||
| 42 | int textureId_; | 44 | int textureId_; |
| 43 | vec2i loc_ { 0, 0 }; | 45 | vec2i loc_ { 0, 0 }; |
| 44 | vec2i size_; | ||
| 45 | Direction curDir_ = Direction::down; | 46 | Direction curDir_ = Direction::down; |
| 46 | std::string state_; | 47 | std::string state_; |
| 47 | int curAnim_ = 0; | 48 | int curAnim_ = 0; |
| 48 | int curFrame_ = 0; | 49 | int curFrame_ = 0; |
| 50 | std::vector<SpriteFrame> frames_; | ||
| 49 | std::vector<std::vector<int>> animations_; | 51 | std::vector<std::vector<int>> animations_; |
| 50 | std::map<std::string, std::map<Direction, int>> stateDirToAnim_; | 52 | std::map<std::string, std::map<Direction, int>> stateDirToAnim_; |
| 51 | }; | 53 | }; |
