38 Commits

Author SHA1 Message Date
Stiffly 512f4db1c2 Merge remote-tracking branch 'origin/master' into Sound 2015-10-22 17:02:26 +02:00
Stiffly fb3022e394 current level fix 2015-10-22 17:01:00 +02:00
PlatinumSkink 1d8de95315 Merge branch 'LevelSystemAndSuch' 2015-10-22 16:58:16 +02:00
PlatinumSkink fd569f7a52 Fixed PadSystem 2015-10-22 16:57:10 +02:00
Stiffly e1f628be06 Merge branch 'master' into Sound
Conflicts:
	src/game/Game/BallSystem.cpp
2015-10-22 16:45:25 +02:00
Stiffly 33e5ab9a22 Merge remote-tracking branch 'origin/LevelSystemAndSuch' into water 2015-10-22 16:27:42 +02:00
Stiffly 7c2782fe2c Fixed scale issue for power up textures. Added a defaultscale flag. Also removed ugly particleeffect for projectiles. 2015-10-22 16:27:23 +02:00
PlatinumSkink f54af2a240 Merge branch 'LevelSystemAndSuch' 2015-10-22 15:51:45 +02:00
PlatinumSkink fd0618350a Merge remote-tracking branch 'origin/master' into LevelSystemAndSuch 2015-10-22 15:51:05 +02:00
viktorljung d75e481e0f life fix 2015-10-22 15:44:09 +02:00
PlatinumSkink 49c80c1c5a Fixed so generated bricks fo not collide with anything. 2015-10-22 15:42:28 +02:00
Jace c7bef473d9 Merge remote-tracking branch 'origin/master' 2015-10-22 15:40:21 +02:00
Jace 86f823b52f fixup! Moved registering ShaderProgram resources to Renderer 2015-10-22 15:39:55 +02:00
viktorljung 0900172bf2 Merge branch 'Physics' 2015-10-22 15:36:53 +02:00
Jace 3fb85cd049 Moved registering ShaderProgram resources to Renderer 2015-10-22 15:35:32 +02:00
viktorljung 80ba2a0c32 Merge remote-tracking branch 'origin/master' into Physics 2015-10-22 15:32:59 +02:00
viktorljung 5b5f5b6a62 New kraken boss model 2015-10-22 15:32:36 +02:00
Jace 61801f23d1 fixup! Loading screen that preloads the entire game based on what's in the "PreloadResources" file. The file is filled automatically with resources that are hot-loaded to make the next launch load more complete. 2015-10-22 15:23:29 +02:00
Jace 3f8a6d2f68 Fixed resource preloading when format is invalid 2015-10-22 15:19:32 +02:00
Jace bdb5a76e24 Merge remote-tracking branch 'origin/master' 2015-10-22 14:52:27 +02:00
Jace d0ee438c4c Loading screen that preloads the entire game based on what's in the "PreloadResources" file. The file is filled automatically with resources that are hot-loaded to make the next launch load more complete. 2015-10-22 14:51:34 +02:00
viktorljung e49a150f55 Merge remote-tracking branch 'origin/master' into Physics
Conflicts:
	src/game/Game/BallSystem.cpp
	src/game/Game/LevelSystem.cpp
2015-10-22 14:40:09 +02:00
viktorljung 2051c8186c Background fixes 2015-10-22 14:13:38 +02:00
PlatinumSkink eedcc76e92 Merge remote-tracking branch 'origin/master' into LevelSystemAndSuch 2015-10-22 14:07:32 +02:00
PlatinumSkink fde2ddeafb Failed to stage it all. 2015-10-22 14:05:23 +02:00
PlatinumSkink 54f8fcd185 RaiseWater implemented. Set Debug RaiseWater to true to activate it. And fixed second stage crashing. 2015-10-22 14:04:36 +02:00
viktorljung f59f123340 Small fixes 2015-10-22 11:55:02 +02:00
viktorljung 9b9f959602 Merge remote-tracking branch 'origin/master' into Physics 2015-10-22 11:49:34 +02:00
viktorljung c6071e95c3 Kraken brick and ink brick done 2015-10-22 11:49:08 +02:00
Stiffly 0f687a4ba5 Merge remote-tracking branch 'origin/master' into water
Conflicts:
	src/game/Game/ProjectileSystem.cpp
2015-10-22 11:18:35 +02:00
Stiffly 01ff8763b8 WIP added msnu bgm again 2015-10-22 11:12:35 +02:00
Stiffly 16560a86b3 Kraken power down sound. Added Zap sound to story 2015-10-22 10:54:53 +02:00
Stiffly bee4a05670 Merge remote-tracking branch 'origin/master' into Sound 2015-10-21 15:52:29 +02:00
Stiffly 784b2e1d58 life lost sound 2015-10-21 15:52:10 +02:00
Stiffly 59dbe97191 Boss fight sounds. bgm, boss-hit, init roar 2015-10-21 15:42:11 +02:00
viktorljung f41e126bd6 Merge remote-tracking branch 'origin/master' into Physics 2015-10-21 15:40:43 +02:00
viktorljung f4ffead4f2 Animations and stuff 2015-10-21 15:40:19 +02:00
Stiffly 091895cc85 broken ass shit after projectiles 2015-10-20 11:14:53 +02:00
63 changed files with 25242 additions and 2249 deletions
+1 -1
View File
@@ -9,4 +9,4 @@ BGMVolume=0.5
[Video] [Video]
Fullscreen=false Fullscreen=false
Width=675 Width=675
Height=1080[Water]Radius=0.3[Cheat]GodMode=false[Water]Radius=0.3[Cheat]GodMode=false Height=1080[Water]Radius=0.3[Cheat]GodMode=false
+12
View File
@@ -0,0 +1,12 @@
# Blender MTL File: 'Bricks.blend'
# Material Count: 1
newmtl Material.004
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
map_Kd InkBrickTexture.png
+513
View File
@@ -0,0 +1,513 @@
# Blender v2.75 (sub 0) OBJ File: 'Bricks.blend'
# www.blender.org
mtllib InkBrick.mtl
o OriginalBrick.015_Cube.028
v 0.416882 0.151013 0.189181
v 0.383459 0.157800 0.197587
v 0.427922 0.161606 0.161784
v 0.383459 0.180000 0.161784
v 0.432779 0.125616 0.202365
v 0.383459 0.126000 0.215784
v 0.450000 0.126000 0.161784
v -0.416882 0.151013 0.189181
v 0.000000 0.157800 0.197587
v -0.383459 0.157800 0.197587
v -0.427922 0.161606 0.161784
v 0.000000 0.180000 0.161784
v -0.383459 0.180000 0.161784
v -0.432779 0.125616 0.202365
v 0.000000 0.126000 0.215784
v -0.383459 0.126000 0.215784
v -0.450000 0.126000 0.161784
v 0.427922 0.161606 0.000000
v 0.416882 0.151013 -0.189181
v 0.383459 0.180000 0.000000
v 0.383459 0.157800 -0.197587
v 0.427922 0.161606 -0.161784
v 0.383459 0.180000 -0.161784
v 0.450000 0.126000 0.000000
v 0.432779 0.125616 -0.202365
v 0.383459 0.126000 -0.215784
v 0.450000 0.126000 -0.161784
v 0.000000 0.180000 0.000000
v -0.427922 0.161606 0.000000
v -0.416882 0.151013 -0.189181
v 0.000000 0.157800 -0.197587
v -0.383459 0.180000 0.000000
v -0.383459 0.157800 -0.197587
v -0.427922 0.161606 -0.161784
v 0.000000 0.180000 -0.161784
v -0.383459 0.180000 -0.161784
v -0.450000 0.126000 0.000000
v -0.432779 0.125616 -0.202365
v 0.000000 0.126000 -0.215784
v -0.383459 0.126000 -0.215784
v -0.450000 0.126000 -0.161784
v 0.416882 -0.151013 0.189181
v 0.383459 -0.157800 0.197587
v 0.427922 -0.161606 0.161784
v 0.383459 -0.180000 0.161784
v 0.432779 -0.125616 0.202365
v 0.383459 -0.126000 0.215784
v 0.450000 -0.126000 0.161784
v 0.432723 0.000000 0.202132
v 0.383459 0.000000 0.215784
v 0.450000 0.000000 0.161784
v -0.416882 -0.151013 0.189181
v 0.000000 -0.157800 0.197587
v -0.383459 -0.157800 0.197587
v -0.427922 -0.161606 0.161784
v 0.000000 -0.180000 0.161784
v -0.383459 -0.180000 0.161784
v -0.432779 -0.125616 0.202365
v 0.000000 -0.126000 0.215784
v -0.383459 -0.126000 0.215784
v -0.450000 -0.126000 0.161784
v -0.432723 0.000000 0.202132
v 0.000000 0.000000 0.215784
v -0.383459 0.000000 0.215784
v -0.450000 0.000000 0.161784
v 0.427922 -0.161606 0.000000
v 0.416882 -0.151013 -0.189181
v 0.383459 -0.180000 0.000000
v 0.383459 -0.157800 -0.197587
v 0.427922 -0.161606 -0.161784
v 0.383459 -0.180000 -0.161784
v 0.450000 -0.126000 0.000000
v 0.432779 -0.125616 -0.202365
v 0.383459 -0.126000 -0.215784
v 0.450000 -0.126000 -0.161784
v 0.450000 0.000000 0.000000
v 0.432723 0.000000 -0.202132
v 0.383459 0.000000 -0.215784
v 0.450000 0.000000 -0.161784
v 0.000000 -0.180000 0.000000
v -0.427922 -0.161606 0.000000
v -0.416882 -0.151013 -0.189181
v 0.000000 -0.157800 -0.197587
v -0.383459 -0.180000 0.000000
v -0.383459 -0.157800 -0.197587
v -0.427922 -0.161606 -0.161784
v 0.000000 -0.180000 -0.161784
v -0.383459 -0.180000 -0.161784
v -0.450000 -0.126000 0.000000
v -0.432779 -0.125616 -0.202365
v 0.000000 -0.126000 -0.215784
v -0.383459 -0.126000 -0.215784
v -0.450000 -0.126000 -0.161784
v -0.450000 0.000000 0.000000
v -0.432723 0.000000 -0.202132
v 0.000000 0.000000 -0.215784
v -0.383459 0.000000 -0.215784
v -0.450000 0.000000 -0.161784
vt 0.736296 0.734058
vt 0.500643 0.743520
vt 0.500362 0.637947
vt 0.837408 0.612007
vt 0.834584 0.645864
vt 0.730556 0.620368
vt 0.734629 0.582637
vt 0.749262 0.590630
vt 0.500288 0.610193
vt 0.755018 0.568012
vt 0.839541 0.583855
vt 0.717484 0.591376
vt 0.712524 0.570102
vt 0.500224 0.586196
vt 0.735447 0.565260
vt 0.734762 0.501989
vt 0.756709 0.501913
vt 0.500002 0.502775
vt 0.708830 0.502077
vt 0.842604 0.501613
vt 0.264945 0.735621
vt 0.270081 0.621896
vt 0.166203 0.648090
vt 0.163195 0.614255
vt 0.265807 0.584195
vt 0.282998 0.592819
vt 0.160910 0.586119
vt 0.245341 0.569708
vt 0.251218 0.592286
vt 0.264896 0.566824
vt 0.287844 0.571513
vt 0.243294 0.503622
vt 0.265242 0.503551
vt 0.291174 0.503466
vt 0.157399 0.503902
vt 0.500934 0.853308
vt 0.941713 0.642142
vt 0.951578 0.604167
vt 0.968122 0.623010
vt 0.501012 0.882459
vt 0.738745 0.848046
vt 0.931097 0.581575
vt 0.932938 0.607778
vt 0.955207 0.583085
vt 0.985107 0.598851
vt 0.739681 0.902895
vt 0.501079 0.907860
vt 0.935388 0.501282
vt 0.963040 0.501182
vt 0.741078 0.990924
vt 0.501311 0.995378
vt 0.999949 0.501047
vt 0.059065 0.645100
vt 0.048991 0.607196
vt 0.067650 0.610678
vt 0.263101 0.849623
vt 0.069348 0.584464
vt 0.032552 0.626152
vt 0.015434 0.602112
vt 0.262456 0.904477
vt 0.045246 0.586140
vt 0.036960 0.504291
vt 0.064611 0.504202
vt 0.261526 0.992513
vt 0.000049 0.504410
vt 0.499642 0.367606
vt 0.499361 0.262038
vt 0.735045 0.269934
vt 0.729910 0.383652
vt 0.833769 0.357438
vt 0.836784 0.391268
vt 0.734188 0.421348
vt 0.716998 0.412727
vt 0.499716 0.395359
vt 0.839075 0.419400
vt 0.754653 0.435831
vt 0.748775 0.413256
vt 0.735100 0.438717
vt 0.712155 0.434032
vt 0.499780 0.419355
vt 0.263722 0.271498
vt 0.162621 0.393515
vt 0.165454 0.359662
vt 0.269461 0.385180
vt 0.265384 0.422906
vt 0.250754 0.414912
vt 0.244996 0.437526
vt 0.160482 0.421664
vt 0.282529 0.414171
vt 0.287486 0.435443
vt 0.264565 0.440282
vt 0.499070 0.152257
vt 0.940896 0.360393
vt 0.950979 0.398289
vt 0.932321 0.394814
vt 0.736888 0.155940
vt 0.498993 0.123107
vt 0.930630 0.421027
vt 0.967411 0.379329
vt 0.984535 0.403359
vt 0.498925 0.097707
vt 0.737533 0.101089
vt 0.954730 0.419342
vt 0.498693 0.010195
vt 0.738463 0.013059
vt 0.058336 0.363344
vt 0.048459 0.401312
vt 0.031922 0.382463
vt 0.261274 0.157517
vt 0.068933 0.423912
vt 0.067099 0.397709
vt 0.044823 0.422391
vt 0.014928 0.406612
vt 0.260338 0.102671
vt 0.258941 0.014648
vt 0.739249 0.877387
vt 0.262753 0.878967
vt 0.737237 0.126597
vt 0.260770 0.128177
vn 0.194900 0.980800 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.961700 0.273900
vn 0.647300 0.762200 0.000000
vn 0.178700 0.949500 0.257800
vn 0.457300 0.661600 0.594300
vn 0.631200 0.737600 0.239800
vn 0.000000 0.694500 0.719500
vn 0.939500 0.276000 0.202600
vn 0.961700 0.274000 0.000000
vn 0.151600 0.685100 0.712500
vn 0.135500 0.258500 0.956400
vn 0.000000 0.256900 0.966400
vn 0.632300 0.305000 0.712100
vn 0.658300 0.000000 0.752800
vn 0.979700 0.000000 0.200600
vn 0.000000 0.000000 1.000000
vn 0.134200 0.000000 0.990900
vn 1.000000 0.000000 0.000000
vn -0.194900 0.980800 0.000000
vn -0.178700 0.949500 0.257800
vn -0.647300 0.762200 0.000000
vn -0.457300 0.661600 0.594300
vn -0.151600 0.685100 0.712500
vn -0.961700 0.274000 0.000000
vn -0.939500 0.276000 0.202600
vn -0.631200 0.737600 0.239800
vn -0.632300 0.305000 0.712100
vn -0.135500 0.258500 0.956400
vn -0.979700 0.000000 0.200600
vn -0.658300 0.000000 0.752800
vn -0.134200 0.000000 0.990900
vn -1.000000 0.000000 0.000000
vn 0.000000 0.961700 -0.273900
vn 0.178700 0.949500 -0.257800
vn 0.457300 0.661600 -0.594300
vn 0.151600 0.685100 -0.712500
vn 0.000000 0.694500 -0.719500
vn 0.939500 0.276000 -0.202600
vn 0.631200 0.737600 -0.239800
vn 0.632300 0.305000 -0.712100
vn 0.135500 0.258500 -0.956400
vn 0.000000 0.256900 -0.966400
vn 0.979700 0.000000 -0.200600
vn 0.658300 0.000000 -0.752800
vn 0.134200 0.000000 -0.990900
vn 0.000000 0.000000 -1.000000
vn -0.178700 0.949500 -0.257800
vn -0.457300 0.661600 -0.594300
vn -0.631200 0.737600 -0.239800
vn -0.939500 0.276000 -0.202600
vn -0.151600 0.685100 -0.712500
vn -0.135500 0.258500 -0.956400
vn -0.632300 0.305000 -0.712100
vn -0.658300 0.000000 -0.752800
vn -0.979700 0.000000 -0.200600
vn -0.134200 0.000000 -0.990900
vn 0.000000 -0.961700 0.273900
vn 0.000000 -1.000000 0.000000
vn 0.194900 -0.980800 0.000000
vn 0.178700 -0.949500 0.257800
vn 0.647300 -0.762200 0.000000
vn 0.457300 -0.661600 0.594300
vn 0.151600 -0.685100 0.712500
vn 0.000000 -0.694500 0.719500
vn 0.961700 -0.274000 0.000000
vn 0.939500 -0.276000 0.202600
vn 0.631200 -0.737600 0.239800
vn 0.632300 -0.305000 0.712100
vn 0.135500 -0.258500 0.956400
vn 0.000000 -0.256900 0.966400
vn -0.194900 -0.980800 0.000000
vn -0.647300 -0.762200 0.000000
vn -0.178700 -0.949500 0.257800
vn -0.457300 -0.661600 0.594300
vn -0.631200 -0.737600 0.239800
vn -0.939500 -0.276000 0.202600
vn -0.961700 -0.274000 0.000000
vn -0.151600 -0.685100 0.712500
vn -0.135500 -0.258500 0.956400
vn -0.632300 -0.305000 0.712100
vn 0.000000 -0.961700 -0.273900
vn 0.178700 -0.949500 -0.257800
vn 0.457300 -0.661600 -0.594300
vn 0.631200 -0.737600 -0.239800
vn 0.000000 -0.694500 -0.719500
vn 0.939500 -0.276000 -0.202600
vn 0.151600 -0.685100 -0.712500
vn 0.135500 -0.258500 -0.956400
vn 0.000000 -0.256900 -0.966400
vn 0.632300 -0.305000 -0.712100
vn -0.178700 -0.949500 -0.257800
vn -0.457300 -0.661600 -0.594300
vn -0.151600 -0.685100 -0.712500
vn -0.939500 -0.276000 -0.202600
vn -0.631200 -0.737600 -0.239800
vn -0.632300 -0.305000 -0.712100
vn -0.135500 -0.258500 -0.956400
usemtl Material.004
s 1
f 20/1/1 28/2/2 12/3/3
f 18/4/4 20/5/1 4/6/5
f 1/7/6 3/8/7 4/6/5
f 4/6/5 12/3/3 9/9/8
f 3/8/7 7/10/9 24/11/10
f 1/7/6 2/12/11 6/13/12
f 9/9/8 15/14/13 6/13/12
f 1/7/6 5/15/14 7/10/9
f 5/15/14 49/16/15 51/17/16
f 15/14/13 63/18/17 50/19/18
f 5/15/14 6/13/12 50/19/18
f 7/10/9 51/17/16 76/20/19
f 12/3/3 28/2/2 32/21/20
f 13/22/21 32/23/20 29/24/22
f 8/25/23 10/26/24 13/22/21
f 9/9/8 12/3/3 13/22/21
f 37/27/25 17/28/26 11/29/27
f 8/25/23 14/30/28 16/31/29
f 16/31/29 15/14/13 9/9/8
f 17/28/26 14/30/28 8/25/23
f 65/32/30 62/33/31 14/30/28
f 64/34/32 63/18/17 15/14/13
f 14/30/28 62/33/31 64/34/32
f 94/35/33 65/32/30 17/28/26
f 35/36/34 28/2/2 20/1/1
f 23/37/35 20/5/1 18/4/4
f 19/38/36 21/39/37 23/37/35
f 31/40/38 35/36/34 23/41/35
f 24/11/10 27/42/39 22/43/40
f 19/38/36 25/44/41 26/45/42
f 26/46/42 39/47/43 31/40/38
f 27/42/39 25/44/41 19/38/36
f 79/48/44 77/49/45 25/44/41
f 78/50/46 96/51/47 39/47/43
f 25/44/41 77/49/45 78/52/46
f 76/20/19 79/48/44 27/42/39
f 32/21/20 28/2/2 35/36/34
f 29/24/22 32/23/20 36/53/48
f 30/54/49 34/55/50 36/53/48
f 36/56/48 35/36/34 31/40/38
f 34/55/50 41/57/51 37/27/25
f 30/54/49 33/58/52 40/59/53
f 31/40/38 39/47/43 40/60/53
f 30/54/49 38/61/54 41/57/51
f 38/61/54 95/62/55 98/63/56
f 39/47/43 96/51/47 97/64/57
f 38/61/54 40/59/53 97/65/57
f 41/57/51 98/63/56 94/35/33
f 56/66/58 80/67/59 68/68/60
f 45/69/61 68/70/60 66/71/62
f 42/72/63 43/73/64 45/69/61
f 53/74/65 56/66/58 45/69/61
f 72/75/66 48/76/67 44/77/68
f 42/72/63 46/78/69 47/79/70
f 47/79/70 59/80/71 53/74/65
f 48/76/67 46/78/69 42/72/63
f 51/17/16 49/16/15 46/78/69
f 50/19/18 63/18/17 59/80/71
f 46/78/69 49/16/15 50/19/18
f 76/20/19 51/17/16 48/76/67
f 84/81/72 80/67/59 56/66/58
f 81/82/73 84/83/72 57/84/74
f 52/85/75 55/86/76 57/84/74
f 57/84/74 56/66/58 53/74/65
f 55/86/76 61/87/77 89/88/78
f 52/85/75 54/89/79 60/90/80
f 53/74/65 59/80/71 60/90/80
f 52/85/75 58/91/81 61/87/77
f 58/91/81 62/33/31 65/32/30
f 59/80/71 63/18/17 64/34/32
f 58/91/81 60/90/80 64/34/32
f 61/87/77 65/32/30 94/35/33
f 68/68/60 80/67/59 87/92/82
f 66/71/62 68/70/60 71/93/83
f 67/94/84 70/95/85 71/93/83
f 71/96/83 87/92/82 83/97/86
f 70/95/85 75/98/87 72/75/66
f 67/94/84 69/99/88 74/100/89
f 83/97/86 91/101/90 74/102/89
f 67/94/84 73/103/91 75/98/87
f 73/103/91 77/49/45 79/48/44
f 91/101/90 96/104/47 78/105/46
f 73/103/91 74/100/89 78/52/46
f 75/98/87 79/48/44 76/20/19
f 87/92/82 80/67/59 84/81/72
f 88/106/92 84/83/72 81/82/73
f 82/107/93 85/108/94 88/106/92
f 83/97/86 87/92/82 88/109/92
f 89/88/78 93/110/95 86/111/96
f 82/107/93 90/112/97 92/113/98
f 92/114/98 91/101/90 83/97/86
f 93/110/95 90/112/97 82/107/93
f 98/63/56 95/62/55 90/112/97
f 97/115/57 96/104/47 91/101/90
f 90/112/97 95/62/55 97/65/57
f 94/35/33 98/63/56 93/110/95
f 4/6/5 20/1/1 12/3/3
f 3/8/7 18/4/4 4/6/5
f 2/12/11 1/7/6 4/6/5
f 2/12/11 4/6/5 9/9/8
f 18/4/4 3/8/7 24/11/10
f 5/15/14 1/7/6 6/13/12
f 2/12/11 9/9/8 6/13/12
f 3/8/7 1/7/6 7/10/9
f 7/10/9 5/15/14 51/17/16
f 6/13/12 15/14/13 50/19/18
f 49/16/15 5/15/14 50/19/18
f 24/11/10 7/10/9 76/20/19
f 13/22/21 12/3/3 32/21/20
f 11/29/27 13/22/21 29/24/22
f 11/29/27 8/25/23 13/22/21
f 10/26/24 9/9/8 13/22/21
f 29/24/22 37/27/25 11/29/27
f 10/26/24 8/25/23 16/31/29
f 10/26/24 16/31/29 9/9/8
f 11/29/27 17/28/26 8/25/23
f 17/28/26 65/32/30 14/30/28
f 16/31/29 64/34/32 15/14/13
f 16/31/29 14/30/28 64/34/32
f 37/27/25 94/35/33 17/28/26
f 23/41/35 35/36/34 20/1/1
f 22/43/40 23/37/35 18/4/4
f 22/43/40 19/38/36 23/37/35
f 21/116/37 31/40/38 23/41/35
f 18/4/4 24/11/10 22/43/40
f 21/39/37 19/38/36 26/45/42
f 21/116/37 26/46/42 31/40/38
f 22/43/40 27/42/39 19/38/36
f 27/42/39 79/48/44 25/44/41
f 26/46/42 78/50/46 39/47/43
f 26/45/42 25/44/41 78/52/46
f 24/11/10 76/20/19 27/42/39
f 36/56/48 32/21/20 35/36/34
f 34/55/50 29/24/22 36/53/48
f 33/58/52 30/54/49 36/53/48
f 33/117/52 36/56/48 31/40/38
f 29/24/22 34/55/50 37/27/25
f 38/61/54 30/54/49 40/59/53
f 33/117/52 31/40/38 40/60/53
f 34/55/50 30/54/49 41/57/51
f 41/57/51 38/61/54 98/63/56
f 40/60/53 39/47/43 97/64/57
f 95/62/55 38/61/54 97/65/57
f 37/27/25 41/57/51 94/35/33
f 45/69/61 56/66/58 68/68/60
f 44/77/68 45/69/61 66/71/62
f 44/77/68 42/72/63 45/69/61
f 43/73/64 53/74/65 45/69/61
f 66/71/62 72/75/66 44/77/68
f 43/73/64 42/72/63 47/79/70
f 43/73/64 47/79/70 53/74/65
f 44/77/68 48/76/67 42/72/63
f 48/76/67 51/17/16 46/78/69
f 47/79/70 50/19/18 59/80/71
f 47/79/70 46/78/69 50/19/18
f 72/75/66 76/20/19 48/76/67
f 57/84/74 84/81/72 56/66/58
f 55/86/76 81/82/73 57/84/74
f 54/89/79 52/85/75 57/84/74
f 54/89/79 57/84/74 53/74/65
f 81/82/73 55/86/76 89/88/78
f 58/91/81 52/85/75 60/90/80
f 54/89/79 53/74/65 60/90/80
f 55/86/76 52/85/75 61/87/77
f 61/87/77 58/91/81 65/32/30
f 60/90/80 59/80/71 64/34/32
f 62/33/31 58/91/81 64/34/32
f 89/88/78 61/87/77 94/35/33
f 71/96/83 68/68/60 87/92/82
f 70/95/85 66/71/62 71/93/83
f 69/99/88 67/94/84 71/93/83
f 69/118/88 71/96/83 83/97/86
f 66/71/62 70/95/85 72/75/66
f 73/103/91 67/94/84 74/100/89
f 69/118/88 83/97/86 74/102/89
f 70/95/85 67/94/84 75/98/87
f 75/98/87 73/103/91 79/48/44
f 74/102/89 91/101/90 78/105/46
f 77/49/45 73/103/91 78/52/46
f 72/75/66 75/98/87 76/20/19
f 88/109/92 87/92/82 84/81/72
f 86/111/96 88/106/92 81/82/73
f 86/111/96 82/107/93 88/106/92
f 85/119/94 83/97/86 88/109/92
f 81/82/73 89/88/78 86/111/96
f 85/108/94 82/107/93 92/113/98
f 85/119/94 92/114/98 83/97/86
f 86/111/96 93/110/95 82/107/93
f 93/110/95 98/63/56 90/112/97
f 92/114/98 97/115/57 91/101/90
f 92/113/98 90/112/97 97/65/57
f 89/88/78 94/35/33 93/110/95
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

+22
View File
@@ -0,0 +1,22 @@
# Blender MTL File: 'Bricks.blend'
# Material Count: 2
newmtl Arm
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.250000 0.250000 0.250000
Ni 1.000000
d 1.000000
illum 2
map_Kd texture.png
newmtl Brick
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
map_Kd White.png
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 839 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 926 KiB

+6 -6
View File
@@ -1,14 +1,14 @@
# Blender MTL File: 'None' # Blender MTL File: 'Background.blend'
# Material Count: 1 # Material Count: 1
newmtl Material.001 newmtl Material.001
Ns 96.078431 Ns 92.156863
Ka 0.000000 0.000000 0.000000 Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000 Kd 0.512000 0.512000 0.512000
Ks 0.500000 0.500000 0.500000 Ks 0.500000 0.500000 0.500000
Ni 1.000000 Ni 1.000000
d 1.000000 d 1.000000
illum 2 illum 2
map_Kd Test/Brick_Diffuse.png map_Kd Brunn_Diffuse.png
map_Bump Test/Brick_Normal.png map_Bump Brunn_Normals.png
map_Ks Test/Brick_Specular.png map_Ks Brunn_Specular.png
+90 -92
View File
@@ -1,11 +1,10 @@
# Blender v2.75 (sub 0) OBJ File: '' # Blender v2.75 (sub 0) OBJ File: 'Background.blend'
# www.blender.org # www.blender.org
mtllib Halfpipe.mtl mtllib Halfpipe.mtl
o Cylinder o Cylinder
v 0.000000 -2.908792 -1.000000
v 0.000000 2.908792 -1.000000
v 0.195090 -2.908792 -0.980785 v 0.195090 -2.908792 -0.980785
v 0.195090 2.908792 -0.980785 v 0.195090 2.908792 -0.980785
v 0.000000 2.908792 -1.000000
v 0.382683 -2.908792 -0.923880 v 0.382683 -2.908792 -0.923880
v 0.382683 2.908792 -0.923880 v 0.382683 2.908792 -0.923880
v 0.555570 -2.908792 -0.831470 v 0.555570 -2.908792 -0.831470
@@ -19,11 +18,10 @@ v 0.923880 2.908792 -0.382683
v 0.980785 -2.908792 -0.195090 v 0.980785 -2.908792 -0.195090
v 0.980785 2.908792 -0.195090 v 0.980785 2.908792 -0.195090
v 1.000000 -2.908792 -0.000000 v 1.000000 -2.908792 -0.000000
v 1.000000 2.908792 -0.000000 v 1.000000 2.908792 0.000000
v -1.000000 -2.908792 -0.000001
v -1.000000 2.908792 -0.000001
v -0.980785 -2.908792 -0.195091 v -0.980785 -2.908792 -0.195091
v -0.980785 2.908792 -0.195091 v -0.980785 2.908792 -0.195091
v -1.000000 2.908792 -0.000001
v -0.923879 -2.908792 -0.382684 v -0.923879 -2.908792 -0.382684
v -0.923879 2.908792 -0.382684 v -0.923879 2.908792 -0.382684
v -0.831469 -2.908792 -0.555571 v -0.831469 -2.908792 -0.555571
@@ -34,91 +32,91 @@ v -0.555569 -2.908792 -0.831470
v -0.555569 2.908792 -0.831470 v -0.555569 2.908792 -0.831470
v -0.382682 -2.908792 -0.923880 v -0.382682 -2.908792 -0.923880
v -0.382682 2.908792 -0.923880 v -0.382682 2.908792 -0.923880
v -0.195089 -2.908792 -0.980786 v 0.000000 -2.908792 -1.000000
v -0.195089 2.908792 -0.980786 v -0.195089 2.908792 -0.980786
vt -1.156714 -1.419990 v -0.195089 -2.908792 -0.980787
vt -1.158346 2.336063 v -1.000000 -2.908792 -0.000001
vt -1.031779 2.336118 vt 0.572383 0.000045
vt -1.283288 -1.420045 vt 0.572387 1.000008
vt -1.284913 2.336008 vt 0.515062 1.000008
vt -1.409862 -1.420100 vt 0.629704 0.000045
vt -1.411480 2.335954 vt 0.629712 1.000008
vt -1.536436 -1.420155 vt 0.687026 0.000045
vt -1.538048 2.335899 vt 0.687036 1.000008
vt 2.387354 -1.418355 vt 0.744348 0.000044
vt 2.385534 2.337692 vt 0.744361 1.000008
vt 2.512101 2.337753 vt 0.801670 0.000044
vt 2.260782 -1.418416 vt 0.801686 1.000007
vt 2.258967 2.337631 vt 0.858992 0.000044
vt 2.134208 -1.418478 vt 0.859011 1.000007
vt 2.132400 2.337570 vt 0.916314 0.000043
vt 2.007634 -1.418538 vt 0.916335 1.000006
vt 2.005832 2.337510 vt 0.973636 0.000043
vt -0.144122 -1.419541 vt 0.973661 1.000006
vt -0.145809 2.336510 vt 0.113808 0.000043
vt -0.019241 2.336567 vt 0.113788 1.000007
vt -0.270696 -1.419598 vt 0.056463 1.000007
vt -0.272376 2.336454 vt 0.171130 0.000044
vt -0.397270 -1.419654 vt 0.171113 1.000008
vt -0.398943 2.336397 vt 0.228452 0.000044
vt -0.523844 -1.419711 vt 0.228437 1.000008
vt -0.525511 2.336341 vt 0.285774 0.000044
vt -0.650418 -1.419767 vt 0.285762 1.000008
vt -0.652078 2.336285 vt 0.343096 0.000045
vt -0.776992 -1.419823 vt 0.343087 1.000008
vt -0.778645 2.336229 vt 0.400418 0.000045
vt -1.030140 -1.419935 vt 0.400412 1.000008
vt -0.905212 2.336174 vt 0.515061 0.000045
vt -0.903566 -1.419879 vt 0.457737 1.000008
vt 2.513929 -1.418293 vt 0.457739 0.000045
vt -0.017548 -1.419484 vt 0.056486 0.000043
vn -0.098000 0.000000 0.995200 vn -0.098000 -0.000000 0.995200
vn -0.290300 0.000000 0.956900 vn -0.290300 -0.000000 0.956900
vn -0.471400 0.000000 0.881900 vn -0.471400 -0.000000 0.881900
vn -0.634400 0.000000 0.773000 vn -0.634400 -0.000000 0.773000
vn -0.773000 0.000000 0.634400 vn -0.773000 -0.000000 0.634400
vn -0.881900 0.000000 0.471400 vn -0.881900 -0.000000 0.471400
vn -0.956900 0.000000 0.290300 vn -0.956900 -0.000000 0.290300
vn -0.995200 0.000000 0.098000 vn -0.995200 -0.000000 0.098000
vn 0.995200 0.000000 0.098000 vn 0.995200 -0.000000 0.098000
vn 0.956900 0.000000 0.290300 vn 0.956900 -0.000000 0.290300
vn 0.881900 0.000000 0.471400 vn 0.881900 -0.000000 0.471400
vn 0.773000 0.000000 0.634400 vn 0.773000 -0.000000 0.634400
vn 0.634400 0.000000 0.773000 vn 0.634400 -0.000000 0.773000
vn 0.471400 0.000000 0.881900 vn 0.471400 -0.000000 0.881900
vn 0.098000 0.000000 0.995200 vn 0.098000 -0.000000 0.995200
vn 0.290300 0.000000 0.956900 vn 0.290300 -0.000000 0.956900
usemtl Material.001 usemtl Material.001
s off s 1
f 3/1/1 4/2/1 2/3/1 f 1/1/1 2/2/1 3/3/1
f 5/4/2 6/5/2 4/2/2 f 4/4/2 5/5/2 2/2/2
f 7/6/3 8/7/3 6/5/3 f 6/6/3 7/7/3 5/5/3
f 9/8/4 10/9/4 8/7/4 f 8/8/4 9/9/4 7/7/4
f 11/10/5 12/11/5 10/12/5 f 10/10/5 11/11/5 9/9/5
f 13/13/6 14/14/6 12/11/6 f 12/12/6 13/13/6 11/11/6
f 15/15/7 16/16/7 14/14/7 f 14/14/7 15/15/7 13/13/7
f 17/17/8 18/18/8 16/16/8 f 16/16/8 17/17/8 15/15/8
f 21/19/9 22/20/9 20/21/9 f 18/18/9 19/19/9 20/20/9
f 23/22/10 24/23/10 22/20/10 f 21/21/10 22/22/10 19/19/10
f 25/24/11 26/25/11 24/23/11 f 23/23/11 24/24/11 22/22/11
f 27/26/12 28/27/12 26/25/12 f 25/25/12 26/26/12 24/24/12
f 29/28/13 30/29/13 28/27/13 f 27/27/13 28/28/13 26/26/13
f 31/30/14 32/31/14 30/29/14 f 29/29/14 30/30/14 28/28/14
f 1/32/15 2/3/15 34/33/15 f 31/31/15 3/3/15 32/32/15
f 33/34/16 34/33/16 32/31/16 f 33/33/16 32/32/16 30/30/16
f 1/32/1 3/1/1 2/3/1 f 31/31/1 1/1/1 3/3/1
f 3/1/2 5/4/2 4/2/2 f 1/1/2 4/4/2 2/2/2
f 5/4/3 7/6/3 6/5/3 f 4/4/3 6/6/3 5/5/3
f 7/6/4 9/8/4 8/7/4 f 6/6/4 8/8/4 7/7/4
f 9/35/5 11/10/5 10/12/5 f 8/8/5 10/10/5 9/9/5
f 11/10/6 13/13/6 12/11/6 f 10/10/6 12/12/6 11/11/6
f 13/13/7 15/15/7 14/14/7 f 12/12/7 14/14/7 13/13/7
f 15/15/8 17/17/8 16/16/8 f 14/14/8 16/16/8 15/15/8
f 19/36/9 21/19/9 20/21/9 f 34/34/9 18/18/9 20/20/9
f 21/19/10 23/22/10 22/20/10 f 18/18/10 21/21/10 19/19/10
f 23/22/11 25/24/11 24/23/11 f 21/21/11 23/23/11 22/22/11
f 25/24/12 27/26/12 26/25/12 f 23/23/12 25/25/12 24/24/12
f 27/26/13 29/28/13 28/27/13 f 25/25/13 27/27/13 26/26/13
f 29/28/14 31/30/14 30/29/14 f 27/27/14 29/29/14 28/28/14
f 33/34/15 1/32/15 34/33/15 f 33/33/15 31/31/15 32/32/15
f 31/30/16 33/34/16 32/31/16 f 29/29/16 33/33/16 30/30/16
File diff suppressed because one or more lines are too long
+12
View File
@@ -0,0 +1,12 @@
# Blender MTL File: 'Sid.blend'
# Material Count: 1
newmtl Derp
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
map_Kd SquidTexture.png
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+46 -14
View File
@@ -51,6 +51,7 @@
#include "Game/CBrickPart.h" #include "Game/CBrickPart.h"
#include "Game/CWall.h" #include "Game/CWall.h"
#include "Game/CKraken.h" #include "Game/CKraken.h"
#include "Game/CNewWaterVolume.h"
#include "Game/CBackground.h" #include "Game/CBackground.h"
#include "Game/CTravels.h" #include "Game/CTravels.h"
#include "Game/CStickyAim.h" #include "Game/CStickyAim.h"
@@ -85,6 +86,8 @@
#include "GUI/Button.h" #include "GUI/Button.h"
#include "Game/GUI/MainMenu.h" #include "Game/GUI/MainMenu.h"
#include "Game/GUI/HUD.h" #include "Game/GUI/HUD.h"
#include "Game/GUI/ELoadingFrameComplete.h"
#include "Game/GUI/LoadingFrame.h"
namespace dd namespace dd
{ {
@@ -93,9 +96,15 @@ class Engine
{ {
public: public:
Engine(int argc, char* argv[]) { Engine(int argc, char* argv[])
auto config = ResourceManager::Load<ConfigFile>("Config.ini"); {
ResourceManager::RegisterType<Texture>("Texture");
ResourceManager::RegisterType<Model>("Model");
ResourceManager::RegisterType<Sound>("Sound");
ResourceManager::RegisterType<ConfigFile>("ConfigFile");
ResourceManager::LoadPreloadsFromFile();
auto config = ResourceManager::Load<ConfigFile>("Config.ini");
LOG_LEVEL = static_cast<_LOG_LEVEL>(config->GetValue<int>("Debug.LogLevel", 1)); LOG_LEVEL = static_cast<_LOG_LEVEL>(config->GetValue<int>("Debug.LogLevel", 1));
m_EventBroker = std::make_shared<EventBroker>(); m_EventBroker = std::make_shared<EventBroker>();
@@ -113,15 +122,11 @@ public:
m_FrameStack = new GUI::Frame(m_EventBroker.get()); m_FrameStack = new GUI::Frame(m_EventBroker.get());
m_FrameStack->Width = 675; m_FrameStack->Width = 675;
m_FrameStack->Height = 1080; m_FrameStack->Height = 1080;
m_MainMenu = new GUI::MainMenu(m_FrameStack, "MainMenu");
if (config->GetValue<bool>("Debug.SkipStory", false)) { m_MainMenu->Hide();
Events::GameStart e; m_LoadingFrame = new GUI::LoadingFrame(m_FrameStack, "Loading");
m_EventBroker->Publish(e); m_LoadingFrame->SetTexture("Textures/GUI/Loading.png");
auto hud = new GUI::HUD(m_FrameStack, "HUD"); PreloadAllTheShit();
}
else {
auto menu = new GUI::MainMenu(m_FrameStack, "MainMenu");
}
m_InputManager = std::make_shared<InputManager>(m_Renderer->Window(), m_EventBroker); m_InputManager = std::make_shared<InputManager>(m_Renderer->Window(), m_EventBroker);
@@ -149,6 +154,7 @@ public:
m_World->ComponentFactory.Register<Components::BrickPart>(); m_World->ComponentFactory.Register<Components::BrickPart>();
m_World->ComponentFactory.Register<Components::Pad>(); m_World->ComponentFactory.Register<Components::Pad>();
m_World->ComponentFactory.Register<Components::Wall>(); m_World->ComponentFactory.Register<Components::Wall>();
m_World->ComponentFactory.Register<Components::NewWaterVolume>();
m_World->ComponentFactory.Register<Components::Background>(); m_World->ComponentFactory.Register<Components::Background>();
m_World->ComponentFactory.Register<Components::Life>(); m_World->ComponentFactory.Register<Components::Life>();
m_World->ComponentFactory.Register<Components::Lifebuoy>(); m_World->ComponentFactory.Register<Components::Lifebuoy>();
@@ -214,15 +220,28 @@ public:
//auto particleEmitter= m_World->AddComponent<Components::Emitter>(Pe); //auto particleEmitter= m_World->AddComponent<Components::Emitter>(Pe);
//EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &Engine::OnGameStart);
m_EGameStart = decltype(m_EGameStart)(std::bind(&Engine::OnGameStart, this, std::placeholders::_1)); m_EGameStart = decltype(m_EGameStart)(std::bind(&Engine::OnGameStart, this, std::placeholders::_1));
m_EventBroker->Subscribe(m_EGameStart); m_EventBroker->Subscribe(m_EGameStart);
m_ELoadingFrameComplete = decltype(m_ELoadingFrameComplete)(std::bind(&Engine::OnLoadingFrameComplete, this, std::placeholders::_1));
m_EventBroker->Subscribe(m_ELoadingFrameComplete);
m_LastTime = glfwGetTime(); m_LastTime = glfwGetTime();
} }
void PreloadAllTheShit()
{
if (ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Debug.SkipPreload", false)) {
m_LoadingFrame->Hide();
m_MainMenu->Show();
return;
}
for (auto& pair : ResourceManager::GetPreloads()) {
m_LoadingFrame->AddResource(pair.first, pair.second);
}
m_LoadingFrame->Preload();
}
bool Running() const { return !glfwWindowShouldClose(m_Renderer->Window()); } bool Running() const { return !glfwWindowShouldClose(m_Renderer->Window()); }
void Tick() void Tick()
@@ -422,6 +441,8 @@ public:
private: private:
std::shared_ptr<EventBroker> m_EventBroker; std::shared_ptr<EventBroker> m_EventBroker;
GUI::Frame* m_FrameStack = nullptr; GUI::Frame* m_FrameStack = nullptr;
GUI::MainMenu* m_MainMenu = nullptr;
GUI::LoadingFrame* m_LoadingFrame = nullptr;
std::shared_ptr<Renderer> m_Renderer; std::shared_ptr<Renderer> m_Renderer;
RenderQueueCollection m_RendererQueue; RenderQueueCollection m_RendererQueue;
std::shared_ptr<InputManager> m_InputManager; std::shared_ptr<InputManager> m_InputManager;
@@ -451,6 +472,17 @@ private:
return true; return true;
}; };
EventRelay<Engine, Events::LoadingFrameComplete> m_ELoadingFrameComplete;
bool OnLoadingFrameComplete(const Events::LoadingFrameComplete& event)
{
if (event.FrameName == "Loading") {
event.Frame->Hide();
m_MainMenu->Show();
}
return true;
}
double m_LastTime; double m_LastTime;
}; };
+25 -82
View File
@@ -22,7 +22,9 @@
#include <string> #include <string>
#include <functional> #include <functional>
#include <vector> #include <vector>
#include <set>
#include <unordered_map> #include <unordered_map>
#include <fstream>
#include "Util/UnorderedMapPair.h" #include "Util/UnorderedMapPair.h"
#include "Util/Factory.h" #include "Util/Factory.h"
@@ -70,13 +72,8 @@ public:
return s; return s;
}*/ }*/
/** Registers the factory function of a resource type
@tparam T Resource type.
@param factoryFunction Lambda function that creates a new instance of the resource.
*/
template <typename T> template <typename T>
static void RegisterType(std::function<Resource*(std::string)> factoryFunction); static void RegisterType(std::string typeName);
/** Preloads a resource and caches it for future use /** Preloads a resource and caches it for future use
@@ -85,6 +82,7 @@ public:
*/ */
template <typename T> template <typename T>
static void Preload(std::string resourceName); static void Preload(std::string resourceName);
static void Preload(std::string resourceType, std::string resourceName);
/** Checks if a resource is in cache /** Checks if a resource is in cache
@@ -101,14 +99,7 @@ public:
*/ */
template <typename T> template <typename T>
static T* Load(std::string resourceName, Resource* parent = nullptr); static T* Load(std::string resourceName, Resource* parent = nullptr);
static Resource* Load(std::string resourceType, std::string resourceName, Resource* parent = nullptr);
/** Fetches a loaded resource
@tparam T Resource type.
@param resourceName Fully qualified name of the resource to fetch.
*/
template <typename T>
static T* Fetch(std::string resourceName);
/** Reloads an already loaded resource, keeping its resource ID intact. /** Reloads an already loaded resource, keeping its resource ID intact.
@@ -116,14 +107,19 @@ public:
@param resourceName Fully qualified name of the resource to reload. @param resourceName Fully qualified name of the resource to reload.
*/ */
static void Reload(std::string resourceName); static void Reload(std::string resourceName);
static void LoadPreloadsFromFile();
static const std::set<std::pair<std::string, std::string>>& GetPreloads() { return m_Preloads; }
static void Update(); static void Update();
private: private:
static std::unordered_map<std::string, std::string> m_CompilerTypenameToResourceType;
static std::unordered_map<std::string, std::function<Resource*(std::string)>> m_FactoryFunctions; // type -> factory function static std::unordered_map<std::string, std::function<Resource*(std::string)>> m_FactoryFunctions; // type -> factory function
static std::unordered_map<std::pair<std::string, std::string>, Resource*> m_ResourceCache; // (type, name) -> resource static std::unordered_map<std::pair<std::string, std::string>, Resource*> m_ResourceCache; // (type, name) -> resource
static std::unordered_map<std::string, Resource*> m_ResourceFromName; // name -> resource static std::unordered_map<std::string, Resource*> m_ResourceFromName; // name -> resource
static std::unordered_map<Resource*, Resource*> m_ResourceParents; // resource -> parent resource static std::unordered_map<Resource*, Resource*> m_ResourceParents; // resource -> parent resource
static std::set<std::pair<std::string, std::string>> m_Preloads; // (type, name)
// TODO: Getters for IDs // TODO: Getters for IDs
static unsigned int m_CurrentResourceTypeID; static unsigned int m_CurrentResourceTypeID;
@@ -140,93 +136,40 @@ private:
static unsigned int GetNewResourceID(unsigned int typeID); static unsigned int GetNewResourceID(unsigned int typeID);
// Internal: Create a resource and cache it // Internal: Create a resource and cache it
template <typename T> static Resource* CreateResource(std::string resourceType, std::string resourceName, Resource* parent);
static T* CreateResource(std::string resourceName, Resource* parent);
}; };
template <typename T> template <typename T>
T* ResourceManager::Load(std::string resourceName, Resource* parent /* = nullptr */) T* ResourceManager::Load(std::string resourceName, Resource* parent /* = nullptr */)
{ {
auto resourceType = typeid(T).name(); auto resourceTypename = typeid(T).name();
auto it = m_ResourceCache.find(std::make_pair(resourceType, resourceName)); auto it = m_CompilerTypenameToResourceType.find(resourceTypename);
if (it != m_ResourceCache.end()) if (it == m_CompilerTypenameToResourceType.end()) {
return static_cast<T*>(it->second); LOG_ERROR("Failed to load resource \"%s\" of type \"%s\": type not registered", resourceName.c_str(), resourceTypename);
if (m_Preloading) {
LOG_INFO("Preloading resource \"%s\"", resourceName.c_str());
} else {
LOG_WARNING("Hot-loading resource \"%s\"", resourceName.c_str());
}
return CreateResource<T>(resourceName, parent);
}
template <typename T>
T* ResourceManager::Fetch(std::string resourceName)
{
auto resourceType = typeid(T).name();
auto it = m_ResourceCache.find(std::make_pair(resourceType, resourceName));
if (it == m_ResourceCache.end())
{
LOG_ERROR("Failed to fetch resource \"%s\": Resource not loaded!", resourceName.c_str());
return nullptr; return nullptr;
} else
{
return static_cast<T*>(it->second);
} }
return static_cast<T*>(Load(it->second, resourceName, parent));
} }
template <typename T> template <typename T>
void ResourceManager::RegisterType(std::function<Resource*(std::string)> factoryFunction) void ResourceManager::RegisterType(std::string typeName)
{ {
m_FactoryFunctions[typeid(T).name()] = factoryFunction; m_CompilerTypenameToResourceType[typeid(T).name()] = typeName;
m_FactoryFunctions[typeName] = [](std::string resourceName) { return new T(resourceName); };
} }
template <typename T> template <typename T>
void ResourceManager::Preload(std::string resourceName) void ResourceManager::Preload(std::string resourceName)
{ {
auto resourceType = typeid(T).name(); auto resourceTypename = typeid(T).name();
if (IsResourceLoaded(resourceType, resourceName)) auto it = m_CompilerTypenameToResourceType.find(resourceTypename);
{ if (it == m_CompilerTypenameToResourceType.end()) {
LOG_WARNING("Attempted to preload resource \"%s\" multiple times!", resourceName.c_str()); LOG_ERROR("Failed to load resource \"%s\" of type \"%s\": type not registered", resourceName.c_str(), resourceTypename);
return; return;
} }
m_Preloading = true; Preload(it->second, resourceName);
LOG_INFO("Preloading resource \"%s\"", resourceName.c_str());
CreateResource<T>(resourceName, nullptr);
m_Preloading = false;
}
template <typename T>
T* ResourceManager::CreateResource(std::string resourceName, Resource* parent)
{
const char* resourceType = typeid(T).name();
/*auto facIt = m_FactoryFunctions.find(resourceType);
if (facIt == m_FactoryFunctions.end())
{
LOG_ERROR("Failed to load resource \"%s\" of type \"%s\": Type not registered", resourceName.c_str(), resourceType);
return nullptr;
}*/
// Call the factory function
T* resource = new T(resourceName);
// Store IDs
resource->TypeID = GetTypeID(resourceType);
resource->ResourceID = GetNewResourceID(resource->TypeID);
// Cache
m_ResourceCache[std::make_pair(resourceType, resourceName)] = resource;
m_ResourceFromName[resourceName] = resource;
if (parent != nullptr)
{
m_ResourceParents[resource] = parent;
}
if (!boost::filesystem::is_directory(resourceName))
{
LOG_DEBUG("Adding watch for %s", resourceName.c_str());
m_FileWatcher.AddWatch(resourceName, fileWatcherCallback);
}
return resource;
} }
} }
+1
View File
@@ -49,6 +49,7 @@
#include "Physics/ECreateParticleSequence.h" #include "Physics/ECreateParticleSequence.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
#include "Sound/EPlaySound.h"
namespace dd namespace dd
{ {
+3 -1
View File
@@ -23,7 +23,9 @@ struct Ball : Component
bool InkBlaster = false; bool InkBlaster = false;
bool Sticky = false; bool Sticky = false;
glm::vec3 StickyPlacement = glm::vec3(0, 0, 0); glm::vec3 StickyPlacement = glm::vec3(0, 0, 0);
glm::vec3 SavedSpeed = glm::vec3(0, 0, 0); glm::vec3 SavedSpeed = glm::vec3(0, 1, 0);
int PosterBoy = 0;
}; };
} }
+2
View File
@@ -20,6 +20,8 @@ struct Brick : Component
int Type = 0; int Type = 0;
bool Removed = false; bool Removed = false;
int Number = 100; // For the Kraken to keep track of which bricks needs replacing. int Number = 100; // For the Kraken to keep track of which bricks needs replacing.
bool BeingGenerated = false;
glm::vec3 GenerationGoal;
//What number of types each is. //What number of types each is.
const int EmptyBrickSpace = 0; const int EmptyBrickSpace = 0;
+2 -1
View File
@@ -15,7 +15,8 @@ namespace Components
struct BrickPart : Component struct BrickPart : Component
{ {
bool Submerged = false;
int NumberOfPartsInBrick;
}; };
} }
+4 -3
View File
@@ -13,10 +13,11 @@ namespace dd
namespace Components namespace Components
{ {
struct Life : Component { struct Life : Component
{
int Number = 0; int Number = 0;
float SinusAltitude = 1;
bool Left = false;
}; };
} }
+25
View File
@@ -0,0 +1,25 @@
//
// Created by Adniklastrator on 2015-10-22.
//
#ifndef CNEWWATERVOLUME_H
#define CNEWWATERVOLUME_H
#include "Core/Component.h"
namespace dd
{
namespace Components
{
struct NewWaterVolume : public Component
{
};
}
}
#endif //DAYDREAM_NEWWATERVOLUME_H
+6 -10
View File
@@ -5,7 +5,6 @@
#include "GUI/Slider.h" #include "GUI/Slider.h"
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
#include "Game/GUI/ELoadingFrameComplete.h" #include "Game/GUI/ELoadingFrameComplete.h"
#include "Sound/EPlaySound.h"
namespace dd namespace dd
{ {
@@ -29,9 +28,9 @@ public:
m_Slider->X = Width / 2.f - m_Slider->Width / 2.f; m_Slider->X = Width / 2.f - m_Slider->Width / 2.f;
} }
void AddTexturePreload(std::string resourceName) void AddResource(std::string resourceType, std::string resourceName)
{ {
m_Items.push_back(resourceName); m_Preload.push_back(std::make_pair(resourceType, resourceName));
} }
void Preload() void Preload()
@@ -48,18 +47,15 @@ public:
void Update(double dt) override void Update(double dt) override
{ {
if (m_Preloading) { if (m_Preloading) {
ResourceManager::Preload<dd::Texture>(m_Items[m_CurrentItem]); ResourceManager::Preload(m_Preload[m_CurrentItem].first, m_Preload[m_CurrentItem].second);
m_Slider->SetPercentage((m_CurrentItem + 1) / (float)m_Items.size()); m_Slider->SetPercentage((m_CurrentItem + 1) / (float)m_Preload.size());
m_CurrentItem++; m_CurrentItem++;
if (m_CurrentItem >= m_Items.size()) { if (m_CurrentItem >= m_Preload.size()) {
m_Preloading = false; m_Preloading = false;
dd::Events::LoadingFrameComplete e; dd::Events::LoadingFrameComplete e;
e.FrameName = Name(); e.FrameName = Name();
e.Frame = this; e.Frame = this;
EventBroker->Publish(e); EventBroker->Publish(e);
Events::PlaySound se;
se.FilePath = "Sounds/jap-story.wav";
EventBroker->Publish(se);
} }
} }
} }
@@ -67,7 +63,7 @@ public:
private: private:
bool m_Preloading = false; bool m_Preloading = false;
int m_CurrentItem = 0; int m_CurrentItem = 0;
std::vector<std::string> m_Items; std::vector<std::pair<std::string, std::string>> m_Preload;
GUI::Slider* m_Slider = nullptr; GUI::Slider* m_Slider = nullptr;
}; };
+14
View File
@@ -2,9 +2,11 @@
#define GUI_MAINMENU_H__ #define GUI_MAINMENU_H__
#include "GUI/TextureFrame.h" #include "GUI/TextureFrame.h"
#include "Game/GUI/LoadingFrame.h"
#include "Game/GUI/MainMenuMain.h" #include "Game/GUI/MainMenuMain.h"
#include "Game/GUI/MainMenuOptions.h" #include "Game/GUI/MainMenuOptions.h"
#include "Core/EKeyUp.h" #include "Core/EKeyUp.h"
#include "Game/EGameStart.h"
namespace dd namespace dd
{ {
@@ -37,6 +39,18 @@ public:
//EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &MainMenu::OnKeyUp); //EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &MainMenu::OnKeyUp);
} }
void Show() override
{
if (ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Debug.SkipMenu", false)) {
Events::GameStart e;
EventBroker->Publish(e);
Hide();
auto hud = new GUI::HUD(BaseFrame, "HUD");
} else {
TextureFrame::Show();
}
}
private: private:
TextureFrame* m_LeftBanner; TextureFrame* m_LeftBanner;
MainMenuMain* m_MainMenuMain; MainMenuMain* m_MainMenuMain;
+1
View File
@@ -58,6 +58,7 @@ private:
if (event.Button == m_SquidoutButton) { if (event.Button == m_SquidoutButton) {
m_Parent->Hide(); m_Parent->Hide();
auto story = new GUI::Story1(BaseFrame, "Story1"); auto story = new GUI::Story1(BaseFrame, "Story1");
story->Play();
} }
return true; return true;
+13 -43
View File
@@ -3,11 +3,11 @@
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
#include "Game/GUI/StoryboardFrame.h" #include "Game/GUI/StoryboardFrame.h"
#include "Game/GUI/ELoadingFrameComplete.h"
#include "Game/GUI/LoadingFrame.h"
#include "Game/EGameStart.h" #include "Game/EGameStart.h"
#include "Core/EKeyDown.h" #include "Core/EKeyDown.h"
#include "Game/GUI/HUD.h" #include "Game/GUI/HUD.h"
#include "Sound/EPlaySound.h"
#include "Sound/EStopSound.h"
namespace dd namespace dd
{ {
@@ -20,37 +20,8 @@ public:
Story1(Frame* parent, std::string name) Story1(Frame* parent, std::string name)
: StoryboardFrame(parent, name) : StoryboardFrame(parent, name)
{ {
EVENT_SUBSCRIBE_MEMBER(m_ELoadingFrameComplete, &Story1::OnLoadingFrameComplete);
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &Story1::OnKeyDown); EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &Story1::OnKeyDown);
m_LoadingFrame = new GUI::LoadingFrame(this, "Story1LoadingFrame");
m_LoadingFrame->SetTexture("Textures/GUI/Loading.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/Brunn1.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/Brunn2.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/Brunn3.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/Brunn4.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/Brunn5.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene1.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene2.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene3.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene4.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene5.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene6.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene7.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene8.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene9.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene10.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene11.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene12.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene13.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene14.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene15.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene16.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene17.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene18.png");
m_LoadingFrame->AddTexturePreload("Textures/Story/SubScene19.png");
m_LoadingFrame->Preload();
m_Spacebar = new TextureFrame(this, "ZZZSpacebar"); m_Spacebar = new TextureFrame(this, "ZZZSpacebar");
m_Spacebar->SetTexture("Textures/GUI/SpacebarSkip.png"); m_Spacebar->SetTexture("Textures/GUI/SpacebarSkip.png");
m_Spacebar->SetRight(Right() - 10); m_Spacebar->SetRight(Right() - 10);
@@ -196,6 +167,14 @@ public:
AddTransition(t); AddTransition(t);
} }
virtual void Play() override
{
StoryboardFrame::Play();
Events::PlaySound se;
se.FilePath = "Sounds/jap-story.wav";
EventBroker->Publish(se);
}
void Update(double dt) override void Update(double dt) override
{ {
StoryboardFrame::Update(dt); StoryboardFrame::Update(dt);
@@ -209,7 +188,6 @@ public:
} }
private: private:
GUI::LoadingFrame* m_LoadingFrame = nullptr;
TextureFrame* m_Spacebar = nullptr; TextureFrame* m_Spacebar = nullptr;
EventRelay<Frame, Events::KeyDown> m_EKeyDown; EventRelay<Frame, Events::KeyDown> m_EKeyDown;
@@ -220,25 +198,17 @@ private:
} }
if (event.KeyCode == GLFW_KEY_SPACE) { if (event.KeyCode == GLFW_KEY_SPACE) {
m_LoadingFrame->CancelPreload();
Events::GameStart e; Events::GameStart e;
EventBroker->Publish(e); EventBroker->Publish(e);
Events::StopSound se;
se.FilePath = "Sounds/jap-story.wav";
EventBroker->Publish(se);
Hide(); Hide();
auto hud = new GUI::HUD(BaseFrame, "HUD"); auto hud = new GUI::HUD(BaseFrame, "HUD");
} }
return true; return true;
} }
EventRelay<Frame, Events::LoadingFrameComplete> m_ELoadingFrameComplete;
bool OnLoadingFrameComplete(const Events::LoadingFrameComplete& event)
{
if (event.FrameName == "Story1LoadingFrame") {
event.Frame->Hide();
m_Spacebar->Hide();
Play();
}
return true;
}
}; };
} }
+2 -2
View File
@@ -33,12 +33,12 @@ public:
m_Timeline.push_back(transition); m_Timeline.push_back(transition);
} }
void Play() virtual void Play()
{ {
m_Playing = true; m_Playing = true;
} }
void Skip() virtual void Skip()
{ {
m_Playing = false; m_Playing = false;
OnComplete(); OnComplete();
+2
View File
@@ -33,6 +33,8 @@
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Game/CProjectile.h" #include "Game/CProjectile.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
#include "Rendering/CAnimation.h"
#include "Rendering/CSprite.h"
//#include "Core/Camera.h" Camera Component //#include "Core/Camera.h" Camera Component
+1 -1
View File
@@ -212,7 +212,7 @@ private:
void GetNextLevel(); void GetNextLevel();
void SetBrokenModel(EntityID entity); void SetBrokenModel(EntityID entity);
void CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox); void CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox, int NumberOfParts);
}; };
} }
+3
View File
@@ -24,6 +24,8 @@
#include "Game/EGameOver.h" #include "Game/EGameOver.h"
#include "Game/EKrakenAttackEnd.h" #include "Game/EKrakenAttackEnd.h"
#include "Rendering/CAnimation.h"
namespace dd namespace dd
{ {
@@ -54,6 +56,7 @@ private:
bool m_Pause = false; bool m_Pause = false;
int m_Lives = 3; int m_Lives = 3;
int m_PastLives = 3; int m_PastLives = 3;
float m_LifeSpeed = 0.8;
bool m_GodMode = false; bool m_GodMode = false;
+7 -21
View File
@@ -72,29 +72,12 @@ public:
void Update(double dt) override; void Update(double dt) override;
void UpdateEntity(double dt, EntityID entity, EntityID parent) override; void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
EntityID& Entity() { return m_Entity; }
void SetEntity(const EntityID& ent) { m_Entity = ent; }
glm::vec3 Acceleration() const { return m_Acceleration; }
void SetAcceleration(const glm::vec3& acceleration) { m_Acceleration = acceleration; }
bool Left() const { return m_Left; }
void SetLeft(const bool& left) { m_Left = left; }
bool Right() const { return m_Right; }
void SetRight(const bool& right) { m_Right = right; }
float Edge() const { return m_Edge; }
void SetEdge(const float& edge) { m_Edge = edge; }
Components::Transform* Transform() const { return m_Transform; }
void SetTransform(Components::Transform* transform) { m_Transform = transform; }
Components::Pad* Pad() const { return m_Pad; }
void SetPad(Components::Pad* pad) { m_Pad = pad; }
bool IsPaused() const { return m_Pause; } bool IsPaused() const { return m_Pause; }
void SetPause(const bool& pause) { m_Pause = pause; } void SetPause(const bool& pause) { m_Pause = pause; }
private: private:
EntityID m_Entity = 0; EntityID m_PadEntity = 0;
glm::vec3 m_Acceleration = glm::vec3(0.f, 0.f, 0.f); glm::vec3 m_PadAcceleration = glm::vec3(0.f, 0.f, 0.f);
bool m_Left = false; bool m_Left = false;
bool m_Right = false; bool m_Right = false;
bool m_ReplaceBall = false; bool m_ReplaceBall = false;
@@ -105,10 +88,13 @@ private:
double m_KrakenStrength = 0; double m_KrakenStrength = 0;
double m_PlayerStrength = 0; double m_PlayerStrength = 0;
float m_Edge = 2.8f; float m_Edge = 2.8f;
float m_PadOriginalHeight = -4.8;
float m_PadHeight = m_PadOriginalHeight;
EntityID m_KrakenArm = NULL; EntityID m_KrakenArm = NULL;
EntityID m_KrakenArmHitbox = NULL; EntityID m_KrakenArmHitbox = NULL;
Components::Transform* m_Transform = nullptr; float m_PadRiseSpeed = 0.2;
Components::Pad* m_Pad = nullptr; Components::Transform* m_PadTransform = nullptr;
Components::Pad* m_PadComponent = nullptr;
std::shared_ptr<Components::Transform> m_StickTransform; std::shared_ptr<Components::Transform> m_StickTransform;
std::shared_ptr<Components::StickyAim> m_StickyAim; std::shared_ptr<Components::StickyAim> m_StickyAim;
+4 -2
View File
@@ -5,6 +5,10 @@
#ifndef DAYDREAM_PROJECTILESYSTEM_H #ifndef DAYDREAM_PROJECTILESYSTEM_H
#define DAYDREAM_PROJECTILESYSTEM_H #define DAYDREAM_PROJECTILESYSTEM_H
#include <fstream>
#include <iostream>
#include "Core/System.h" #include "Core/System.h"
#include "Core/CTransform.h" #include "Core/CTransform.h"
#include "Core/CTemplate.h" #include "Core/CTemplate.h"
@@ -26,8 +30,6 @@
#include "Game/CProjectile.h" #include "Game/CProjectile.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
#include <fstream>
#include <iostream>
namespace dd namespace dd
{ {
+1
View File
@@ -18,6 +18,7 @@
#include "Game/EStageCleared.h" #include "Game/EStageCleared.h"
#include "Game/CTravels.h" #include "Game/CTravels.h"
#include "Game/CBackground.h" #include "Game/CBackground.h"
#include "Game/CNewWaterVolume.h"
namespace dd namespace dd
+11
View File
@@ -11,9 +11,13 @@
#include "Core/CTemplate.h" #include "Core/CTemplate.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Core/World.h" #include "Core/World.h"
#include "Core/ConfigFile.h"
#include "Transform/EMove.h" #include "Transform/EMove.h"
#include "Physics/CPhysics.h"
#include "Physics/CWaterVolume.h" #include "Physics/CWaterVolume.h"
#include "Physics/CRectangleShape.h" #include "Physics/CRectangleShape.h"
#include "Game/CBrickPart.h"
#include "Game/CNewWaterVolume.h"
#include "Game/EPause.h" #include "Game/EPause.h"
#include "Game/EResume.h" #include "Game/EResume.h"
#include "Game/ERelevantObjectCreated.h" #include "Game/ERelevantObjectCreated.h"
@@ -47,6 +51,13 @@ public:
private: private:
bool m_Pause = false; bool m_Pause = false;
EntityID m_BottomWall = 0; EntityID m_BottomWall = 0;
float m_SubmergedOriginalHeight = -4.5;
float m_SubmergedHeight = m_SubmergedOriginalHeight;
bool m_RaiseWater = false;
bool m_RemoveWater = false;
std::array<int, 10> m_BrickPartCounters;
dd::EventRelay<WaterSystem, dd::Events::Pause> m_EPause; dd::EventRelay<WaterSystem, dd::Events::Pause> m_EPause;
dd::EventRelay<WaterSystem, dd::Events::Resume> m_EResume; dd::EventRelay<WaterSystem, dd::Events::Resume> m_EResume;
+1 -1
View File
@@ -22,7 +22,7 @@ struct ParticleEmitter : public Component
float Speed = 2.f; float Speed = 2.f;
double LifeTime = 100; double LifeTime = 100;
float RadiusDistribution = 0; float RadiusDistribution = 0;
bool DefaultScale = false;
//values to interpolate between. //values to interpolate between.
std::vector<glm::vec3> ScaleValues; std::vector<glm::vec3> ScaleValues;
std::vector<float> AlphaValues; std::vector<float> AlphaValues;
@@ -26,6 +26,7 @@ struct CreateParticleSequence : public Event
glm::vec4 Color = glm::vec4(0); glm::vec4 Color = glm::vec4(0);
EntityID parent = 0; EntityID parent = 0;
// values to interpolate between. // values to interpolate between.
bool DefaultScale = false;
std::vector<glm::vec3> ScaleValues; std::vector<glm::vec3> ScaleValues;
std::vector<float> AlphaValues; std::vector<float> AlphaValues;
+1
View File
@@ -14,6 +14,7 @@
#include "Core/CTemplate.h" #include "Core/CTemplate.h"
#include "Core/CTransform.h" #include "Core/CTransform.h"
#include "Core/CTemplate.h" #include "Core/CTemplate.h"
#include "Rendering/Texture.h"
#include "Physics/EContact.h" #include "Physics/EContact.h"
#include "Physics/ESetImpulse.h" #include "Physics/ESetImpulse.h"
+4
View File
@@ -20,6 +20,7 @@
#include "Physics/ECreateParticleSequence.h" #include "Physics/ECreateParticleSequence.h"
#include "Physics/EContact.h" #include "Physics/EContact.h"
#include "Game/EGameStart.h" #include "Game/EGameStart.h"
#include "Game/EKrakenAppear.h"
namespace dd namespace dd
@@ -42,6 +43,7 @@ private:
const std::string GAME_BGM = "Sounds/BGM/under-the-sea-n.wav"; const std::string GAME_BGM = "Sounds/BGM/under-the-sea-n.wav";
const std::string WATER_BGM = "Sounds/BGM/water-flowing.wav"; const std::string WATER_BGM = "Sounds/BGM/water-flowing.wav";
const std::string STORY_VOICE = "Sounds/jap-story.wav"; const std::string STORY_VOICE = "Sounds/jap-story.wav";
const std::string BOSS_BGM = "Sounds/BGM/boss-fight.wav";
float m_BGMMasterVolume = 1.f; float m_BGMMasterVolume = 1.f;
float m_SFXMasterVolume = 1.f; float m_SFXMasterVolume = 1.f;
@@ -62,6 +64,8 @@ private:
bool OnMasterVolume(const dd::Events::MasterVolume &event); bool OnMasterVolume(const dd::Events::MasterVolume &event);
dd::EventRelay<SoundSystem, dd::Events::GameStart> m_EGameStart; dd::EventRelay<SoundSystem, dd::Events::GameStart> m_EGameStart;
bool OnGameStart(const dd::Events::GameStart &event); bool OnGameStart(const dd::Events::GameStart &event);
dd::EventRelay <SoundSystem, dd::Events::KrakenAppear> m_EKrakenAppear;
bool OnKrakenAppear(const dd::Events::KrakenAppear &event);
ALuint CreateSource(); ALuint CreateSource();
+84
View File
@@ -19,10 +19,12 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
std::unordered_map<std::string, std::string> dd::ResourceManager::m_CompilerTypenameToResourceType;
std::unordered_map<std::string, std::function<dd::Resource*(std::string)>> dd::ResourceManager::m_FactoryFunctions; std::unordered_map<std::string, std::function<dd::Resource*(std::string)>> dd::ResourceManager::m_FactoryFunctions;
std::unordered_map<std::pair<std::string, std::string>, dd::Resource*> dd::ResourceManager::m_ResourceCache; std::unordered_map<std::pair<std::string, std::string>, dd::Resource*> dd::ResourceManager::m_ResourceCache;
std::unordered_map<std::string, dd::Resource*> dd::ResourceManager::m_ResourceFromName; std::unordered_map<std::string, dd::Resource*> dd::ResourceManager::m_ResourceFromName;
std::unordered_map<dd::Resource*, dd::Resource*> dd::ResourceManager::m_ResourceParents; std::unordered_map<dd::Resource*, dd::Resource*> dd::ResourceManager::m_ResourceParents;
std::set<std::pair<std::string, std::string>> dd::ResourceManager::m_Preloads; // (type, name)
unsigned int dd::ResourceManager::m_CurrentResourceTypeID = 0; unsigned int dd::ResourceManager::m_CurrentResourceTypeID = 0;
std::unordered_map<std::string, unsigned int> dd::ResourceManager::m_ResourceTypeIDs; std::unordered_map<std::string, unsigned int> dd::ResourceManager::m_ResourceTypeIDs;
std::unordered_map<unsigned int, unsigned int> dd::ResourceManager::m_ResourceCount; std::unordered_map<unsigned int, unsigned int> dd::ResourceManager::m_ResourceCount;
@@ -82,4 +84,86 @@ void dd::ResourceManager::fileWatcherCallback(std::string path, FileWatcher::Fil
void dd::ResourceManager::Update() void dd::ResourceManager::Update()
{ {
m_FileWatcher.Check(); m_FileWatcher.Check();
}
void dd::ResourceManager::LoadPreloadsFromFile()
{
std::ifstream f("PreloadResources");
while (f.good()) {
std::string resourceType;
std::string resourceName;
f >> resourceType >> resourceName;
if (!resourceType.empty() && !resourceType.empty()) {
m_Preloads.insert(std::make_pair(resourceType, resourceName));
}
}
f.close();
}
void dd::ResourceManager::Preload(std::string resourceType, std::string resourceName)
{
if (IsResourceLoaded(resourceType, resourceName))
{
//LOG_WARNING("Attempted to preload resource \"%s\" multiple times!", resourceName.c_str());
return;
}
m_Preloading = true;
LOG_INFO("Preloading resource \"%s\"", resourceName.c_str());
CreateResource(resourceType, resourceName, nullptr);
m_Preloading = false;
}
dd::Resource* dd::ResourceManager::Load(std::string resourceType, std::string resourceName, dd::Resource* parent /*= nullptr*/)
{
auto it = m_ResourceCache.find(std::make_pair(resourceType, resourceName));
if (it != m_ResourceCache.end())
return it->second;
if (m_Preloading) {
LOG_INFO("Preloading resource \"%s\"", resourceName.c_str());
} else {
LOG_WARNING("Hot-loading resource \"%s\"", resourceName.c_str());
if (!resourceType.empty() && !resourceName.empty()) {
std::replace(resourceName.begin(), resourceName.end(), '\\', '/');
if (m_Preloads.find(std::make_pair(resourceType, resourceName)) == m_Preloads.end()) {
std::ofstream f("PreloadResources", std::ofstream::app);
f << resourceType << " " << resourceName << std::endl;
f.close();
m_Preloads.insert(std::make_pair(resourceType, resourceName));
}
}
}
return CreateResource(resourceType, resourceName, parent);
}
dd::Resource* dd::ResourceManager::CreateResource(std::string resourceType, std::string resourceName, dd::Resource* parent)
{
auto facIt = m_FactoryFunctions.find(resourceType);
if (facIt == m_FactoryFunctions.end())
{
LOG_ERROR("Failed to load resource \"%s\" of type \"%s\": type not registered", resourceName.c_str(), resourceType.c_str());
return nullptr;
}
// Call the factory function
Resource* resource = facIt->second(resourceName);
// Store IDs
resource->TypeID = GetTypeID(resourceType);
resource->ResourceID = GetNewResourceID(resource->TypeID);
// Cache
m_ResourceCache[std::make_pair(resourceType, resourceName)] = resource;
m_ResourceFromName[resourceName] = resource;
if (parent != nullptr)
{
m_ResourceParents[resource] = parent;
}
if (!boost::filesystem::is_directory(resourceName))
{
LOG_DEBUG("Adding watch for %s", resourceName.c_str());
m_FileWatcher.AddWatch(resourceName, fileWatcherCallback);
}
return resource;
} }
File diff suppressed because it is too large Load Diff
+24 -18
View File
@@ -20,31 +20,36 @@ void dd::Systems::KrakenSystem::Initialize()
EntityID ent = m_World->CreateEntity(); EntityID ent = m_World->CreateEntity();
auto transform = m_World->AddComponent<Components::Transform>(ent); auto transform = m_World->AddComponent<Components::Transform>(ent);
transform->Position = glm::vec3(50, 50, -10);
auto model = m_World->AddComponent<Components::Model>(ent); auto model = m_World->AddComponent<Components::Model>(ent);
model->ModelFile = "Models/Kraken/Body.dae";
auto animationComponent = m_World->AddComponent<Components::Animation>(ent);
animationComponent->Speed = 0.6f;
auto kraken = m_World->AddComponent<Components::Kraken>(ent); auto kraken = m_World->AddComponent<Components::Kraken>(ent);
std::shared_ptr<Components::RectangleShape> cCircle = m_World->AddComponent<Components::RectangleShape>(ent);
cCircle->Dimensions = glm::vec2(2, 4); std::shared_ptr<Components::RectangleShape> cRect = m_World->AddComponent<Components::RectangleShape>(ent);
cRect->Dimensions = glm::vec2(10.f, 4.f);
//cCircle->Radius = 2; //cCircle->Radius = 2;
std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(ent); std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(ent);
std::shared_ptr<Components::Template> cTemplate = m_World->AddComponent<Components::Template>(ent);
auto travels = m_World->AddComponent<Components::Travels>(ent);
travels->CurrentlyTraveling = false;
cPhys->CollisionType = CollisionType::Type::Static; cPhys->CollisionType = CollisionType::Type::Static;
cPhys->GravityScale = 0.f; cPhys->GravityScale = 0.f;
cPhys->Category = CollisionLayer::Type::Brick; cPhys->Category = CollisionLayer::Type::Brick;
cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Ball | CollisionLayer::Type::Projectile | CollisionLayer::Type::Wall | CollisionLayer::LifeBuoy); cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Ball | CollisionLayer::Type::Projectile | CollisionLayer::Type::Wall | CollisionLayer::LifeBuoy);
model->ModelFile = "Models/Test/Ball/Sid.obj"; std::shared_ptr<Components::Template> cTemplate = m_World->AddComponent<Components::Template>(ent);
transform->Position = glm::vec3(50, 50, -10);
auto travels = m_World->AddComponent<Components::Travels>(ent);
travels->CurrentlyTraveling = false;
//sound //sound
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(ent); auto collisionSound = m_World->AddComponent<Components::CollisionSound>(ent);
collisionSound->FilePath = "Sounds/Brick/LTTP_Boss_Hit.wav"; collisionSound->FilePath = "Sounds/Boss/boss-hit.wav";
m_World->CommitEntity(ent); m_World->CommitEntity(ent);
m_KrakenTemplate = ent; m_KrakenTemplate = ent;
InitializeObjects(); InitializeObjects();
} }
@@ -82,16 +87,16 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
case 1: // Idle case 1: // Idle
m_KrakenTimer += dt; m_KrakenTimer += dt;
if (m_KrakenTimer > m_KrakenSecondsToAction) { if (m_KrakenTimer > m_KrakenSecondsToAction) {
m_KrakenTimer = 0;
if (m_NumberOfActions == 0) { if (m_NumberOfActions == 0) {
kraken->CurrentAction = 3; kraken->CurrentAction = 3;
break; } else {
std::uniform_real_distribution<float> dist(1, 4.999f);
float random = dist(m_RandomGenerator);
//std::cout << random << std::endl;
kraken->CurrentAction = random;
//std::cout << kraken->CurrentAction << std::endl;
} }
m_KrakenTimer = 0;
std::uniform_real_distribution<float> dist(1, 4.999f);
float random = dist(m_RandomGenerator);
//std::cout << random << std::endl;
kraken->CurrentAction = random;
//std::cout << kraken->CurrentAction << std::endl;
} }
break; break;
case 2: // Grabbing case 2: // Grabbing
@@ -227,6 +232,7 @@ bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &e
m_World->RemoveComponent<Components::Template>(ent); m_World->RemoveComponent<Components::Template>(ent);
auto transform = m_World->GetComponent<Components::Transform>(ent); auto transform = m_World->GetComponent<Components::Transform>(ent);
transform->Position = event.Position; transform->Position = event.Position;
transform->Position.y += 3.f;
m_KrakenBattle = true; m_KrakenBattle = true;
return true; return true;
} }
+52 -35
View File
@@ -25,7 +25,7 @@ void dd::Systems::LevelSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating); EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating);
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated); EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated);
m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue("Cheat.GodMode", false); m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false);
//PointLightTest //PointLightTest
{ {
@@ -61,8 +61,8 @@ void dd::Systems::LevelSystem::Initialize()
auto travels = m_World->AddComponent<Components::Travels>(t_halfPipe); auto travels = m_World->AddComponent<Components::Travels>(t_halfPipe);
travels->CurrentlyTraveling = false; travels->CurrentlyTraveling = false;
auto model = m_World->AddComponent<Components::Model>(t_halfPipe); auto model = m_World->AddComponent<Components::Model>(t_halfPipe);
model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj"; model->ModelFile = "Models/Halfpipe.obj";
model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 1.f); //model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 1.f);
m_World->CommitEntity(t_halfPipe); m_World->CommitEntity(t_halfPipe);
auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe); auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe);
@@ -238,8 +238,9 @@ void dd::Systems::LevelSystem::Initialize()
transform->Position = glm::vec3(50, 50, -10); transform->Position = glm::vec3(50, 50, -10);
//sound //sound
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(m_BrickTemplate); auto collisionSound = m_World->AddComponent<Components::CollisionSound>(m_BrickTemplate);
collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav"; collisionSound->FilePath = "Sounds/Brick/brick-hit.wav";
m_World->CommitEntity(m_BrickTemplate); m_World->CommitEntity(m_BrickTemplate);
return; return;
} }
@@ -278,18 +279,21 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
} }
} }
auto brickPart = m_World->GetComponent<Components::BrickPart>(entity);
if (brickPart != nullptr) {
auto transform = m_World->GetComponent<Components::Transform>(entity);
if (transform->Position.y < -10) {
m_World->RemoveEntity(entity);
return;
}
}
auto brick = m_World->GetComponent<Components::Brick>(entity); auto brick = m_World->GetComponent<Components::Brick>(entity);
if (brick != nullptr) { if (brick != nullptr) {
auto transform = m_World->GetComponent<Components::Transform>(entity);
auto transform = m_World->GetComponent<Components::Transform>(entity);
if (brick->BeingGenerated) {
if (transform->Position == brick->GenerationGoal) {
brick->BeingGenerated = false;
auto cPhys = m_World->AddComponent<Components::Physics>(entity);
cPhys->CollisionType = CollisionType::Type::Static;
cPhys->GravityScale = 0.f;
cPhys->Category = CollisionLayer::Type::Brick;
cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Ball | CollisionLayer::Type::Projectile | CollisionLayer::Type::Wall | CollisionLayer::LifeBuoy);
}
}
//Removes bricks that falls out of the stage. //Removes bricks that falls out of the stage.
if (transform->Position.y < -10) { if (transform->Position.y < -10) {
if (brick->Type == StandardBrick) { if (brick->Type == StandardBrick) {
@@ -325,7 +329,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
auto ball = m_World->GetComponent<Components::Ball>(entity); auto ball = m_World->GetComponent<Components::Ball>(entity);
if (NumberOfBricks() <= 0 && m_LooseBricks <= 0 && !Restarting()) { if (NumberOfBricks() <= 0 && m_LooseBricks <= 0 && !Restarting() && !m_Cleared) {
if (MultiBalls() <= 0 && PowerUps() <= 0) { if (MultiBalls() <= 0 && PowerUps() <= 0) {
Events::StageCleared ec; Events::StageCleared ec;
ec.ClearedStage = m_CurrentLevel; ec.ClearedStage = m_CurrentLevel;
@@ -449,12 +453,13 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac
} else if (typeInt == InkBlasterBrick) { } else if (typeInt == InkBlasterBrick) {
cBrick->Type = InkBlasterBrick; cBrick->Type = InkBlasterBrick;
auto type = m_World->AddComponent<Components::InkBlasterBrick>(brick); auto type = m_World->AddComponent<Components::InkBlasterBrick>(brick);
//model->ModelFile = "Models/Brick/InkBrick.obj"; model->ModelFile = "Models/Brick/InkBrick.obj";
model->Color = glm::vec4(0.1f, 0.1f, 0.1f, 1.0f); model->Color = glm::vec4(0.7f, 0.7f, 0.7f, 1.f);
} else if (typeInt == KrakenAttackBrick) { } else if (typeInt == KrakenAttackBrick) {
cBrick->Type = KrakenAttackBrick; cBrick->Type = KrakenAttackBrick;
auto type = m_World->AddComponent<Components::KrakenAttackBrick>(brick); auto type = m_World->AddComponent<Components::KrakenAttackBrick>(brick);
model->Color = glm::vec4(0.f, 0.5f, 1.0f, 1.0f); model->ModelFile = "Models/Brick/KrakenBrick.obj";
} else if (typeInt == Kraken) { } else if (typeInt == Kraken) {
Events::KrakenAppear e; Events::KrakenAppear e;
e.Position = transform->Position; e.Position = transform->Position;
@@ -488,6 +493,8 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -3.2, 1, m_BrickSet[getter], m_ColorSet[getter]); auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -3.2, 1, m_BrickSet[getter], m_ColorSet[getter]);
if (ent != NULL) { if (ent != NULL) {
auto brick = m_World->GetComponent<Components::Brick>(ent); auto brick = m_World->GetComponent<Components::Brick>(ent);
brick->BeingGenerated = true;
m_World->RemoveComponent<Components::Physics>(ent);
brick->Number = getter; brick->Number = getter;
m_KrakenBricks[getter] = true; m_KrakenBricks[getter] = true;
auto transform = m_World->GetComponent<Components::Transform>(ent); auto transform = m_World->GetComponent<Components::Transform>(ent);
@@ -498,6 +505,7 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
} else { } else {
transform->Position = event.Origin2; transform->Position = event.Origin2;
} }
brick->GenerationGoal = e.GoalPosition;
e.Entity = ent; e.Entity = ent;
e.Speed = 6; e.Speed = 6;
e.Queue = false; e.Queue = false;
@@ -697,7 +705,11 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
brick = m_World->GetComponent<Components::Brick>(entityBrick); brick = m_World->GetComponent<Components::Brick>(entityBrick);
if (brick == nullptr) { if (brick == nullptr) {
return false; return false;
} }
if (brick->BeingGenerated) {
return false;
}
if (entityShot != 0) { if (entityShot != 0) {
// For when a brick gets shot. // For when a brick gets shot.
@@ -1009,7 +1021,6 @@ void dd::Systems::LevelSystem::GetNextLevel()
glm::vec4 p3 = glm::vec4(189.f / 255.f, 0.f / 255.f, 187.f / 255.f, 1.f); glm::vec4 p3 = glm::vec4(189.f / 255.f, 0.f / 255.f, 187.f / 255.f, 1.f);
glm::vec4 p4 = glm::vec4(125.f / 255.f, 0.f / 255.f, 147.f / 255.f, 1.f); glm::vec4 p4 = glm::vec4(125.f / 255.f, 0.f / 255.f, 147.f / 255.f, 1.f);
if (m_CurrentCluster == 0) { if (m_CurrentCluster == 0) {
if (m_CurrentLevel == 1) { if (m_CurrentLevel == 1) {
level = level =
@@ -1109,7 +1120,7 @@ void dd::Systems::LevelSystem::GetNextLevel()
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 1, 2, 1, 0, 1, 1, 0, 1, 2, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0}; 0, 0, 0, 0, 0, 0, 0};
color = color =
{w, w, w, w, w, w, w, {w, w, w, w, w, w, w,
@@ -1182,11 +1193,11 @@ void dd::Systems::LevelSystem::GetNextLevel()
else if (m_CurrentLevel == 6) { else if (m_CurrentLevel == 6) {
level = level =
{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 100, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0}; 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 100, 0, 0, 0 };
color = color =
{w, w, w, w, w, w, w, {w, w, w, w, w, w, w,
w, w, w, w, w, w, w, w, w, w, w, w, w, w,
@@ -1218,40 +1229,45 @@ void dd::Systems::LevelSystem::SetBrokenModel(EntityID entity)
std::uniform_int_distribution<int> dist(0, 2); std::uniform_int_distribution<int> dist(0, 2);
int index = dist(m_RandomGenerator); int index = dist(m_RandomGenerator);
int parts = 0;
switch (index) switch (index)
{ {
case 0: case 0:
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak1.obj", glm::vec3(-0.29912f, 0.0082f, 0.f), glm::vec2(0.281f, 0.351f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak1.obj", glm::vec3(-0.29912f, 0.0082f, 0.f), glm::vec2(0.281f, 0.351f), 3);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak2.obj", glm::vec3(0.07597f, -0.02899f, 0.f), glm::vec2(0.559f, 0.351f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak2.obj", glm::vec3(0.07597f, -0.02899f, 0.f), glm::vec2(0.559f, 0.351f), 3);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak3.obj", glm::vec3(0.3227f, 0.05632, 0.f), glm::vec2(0.25f, 0.25f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak3.obj", glm::vec3(0.3227f, 0.05632, 0.f), glm::vec2(0.25f, 0.25f), 3);
break; break;
case 1: case 1:
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak1.obj", glm::vec3(-0.3236f, 0.0159f, 0.f), glm::vec2(0.237f, 0.327f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak1.obj", glm::vec3(-0.3236f, 0.0159f, 0.f), glm::vec2(0.237f, 0.327f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak2.obj", glm::vec3(0.07645f, 0.03131f, 0.f), glm::vec2(0.594f, 0.211f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak2.obj", glm::vec3(0.07645f, 0.03131f, 0.f), glm::vec2(0.594f, 0.211f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak3.obj", glm::vec3(0.09468f, -0.11792f, 0.f), glm::vec2(0.692f, 0.112f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak3.obj", glm::vec3(0.09468f, -0.11792f, 0.f), glm::vec2(0.692f, 0.112f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak4.obj", glm::vec3(0.33957f, 0.13079f, 0.f), glm::vec2(0.208f, 0.085f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak4.obj", glm::vec3(0.33957f, 0.13079f, 0.f), glm::vec2(0.208f, 0.085f), 4);
break; break;
case 2: case 2:
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak1.obj", glm::vec3(-0.34882f, 0.0564f, 0.f), glm::vec2(0.175f, 0.228f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak1.obj", glm::vec3(-0.34882f, 0.0564f, 0.f), glm::vec2(0.175f, 0.228f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak2.obj", glm::vec3(0.0678f, 0.07679f, 0.f), glm::vec2(0.699f, 0.183f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak2.obj", glm::vec3(0.0678f, 0.07679f, 0.f), glm::vec2(0.699f, 0.183f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak3.obj", glm::vec3(-0.11862f, -0.10342, 0.f), glm::vec2(0.563f, 0.164f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak3.obj", glm::vec3(-0.11862f, -0.10342, 0.f), glm::vec2(0.563f, 0.164f), 4);
CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak4.obj", glm::vec3(0.31479f, -0.06351f, 0.f), glm::vec2(0.261f, 0.21f)); CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak4.obj", glm::vec3(0.31479f, -0.06351f, 0.f), glm::vec2(0.261f, 0.21f), 4);
break; break;
default: default:
LOG_INFO("Something went wrong with the random generator in SetBrokenModel"); LOG_INFO("Something went wrong with the random generator in SetBrokenModel");
break; break;
} }
return;
} }
void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox) void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox, int NumberOfParts)
{ {
auto ent = m_World->CreateEntity(Parent); auto ent = m_World->CreateEntity(Parent);
auto cTemplate = m_World->AddComponent<Components::Template>(ent); auto cTemplate = m_World->AddComponent<Components::Template>(ent);
auto cTransform = m_World->AddComponent<Components::Transform>(ent); auto cTransform = m_World->AddComponent<Components::Transform>(ent);
auto cBrickPart = m_World->AddComponent<Components::BrickPart>(ent); auto cBrickPart = m_World->AddComponent<Components::BrickPart>(ent);
cBrickPart->NumberOfPartsInBrick = NumberOfParts;
cTransform->Position = RelativePosition; cTransform->Position = RelativePosition;
@@ -1264,6 +1280,7 @@ void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::strin
auto cPhys = m_World->AddComponent<Components::Physics>(ent); auto cPhys = m_World->AddComponent<Components::Physics>(ent);
cPhys->CollisionType = CollisionType::Type::Dynamic; cPhys->CollisionType = CollisionType::Type::Dynamic;
cPhys->GravityScale = 1.f; cPhys->GravityScale = 1.f;
cPhys->Density = 30;
cPhys->Category = CollisionLayer::Type::Brick; cPhys->Category = CollisionLayer::Type::Brick;
cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Wall); cPhys->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Wall);
} }
File diff suppressed because it is too large Load Diff
+28 -3
View File
@@ -47,10 +47,29 @@ void dd::Systems::LifeSystem::UpdateEntity(double dt, EntityID entity, EntityID
auto templateCheck = m_World->GetComponent<Components::Template>(entity); auto templateCheck = m_World->GetComponent<Components::Template>(entity);
if (templateCheck != nullptr){ return; } if (templateCheck != nullptr){ return; }
auto life = m_World->GetComponent<Components::Life>(entity);
if (Lives() != PastLives()) {
auto life = m_World->GetComponent<Components::Life>(entity); if (life != nullptr) {
if (life != nullptr) { auto transform = m_World->GetComponent<Components::Transform>(entity);
if (life->Left) {
if (transform->Position.x > 3) {
life->Left = false;
transform->Velocity.x = m_LifeSpeed;
}
} else {
if (transform->Position.x < -3) {
life->Left = true;
transform->Velocity.x = -m_LifeSpeed;
}
}
transform->Position.x += transform->Velocity.x * dt;
/*glm::vec2 dir = glm::normalize(glm::vec2(transform->Velocity.x, transform->Velocity.y));
glm::vec2 up = glm::vec2(0.f, 1.f);
float angle = glm::acos(glm::dot<float>(dir, up)) * glm::sign(dir.x);
transform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, -1.f));*/
if (Lives() != PastLives()) {
if (life->Number + 1 == PastLives()) { if (life->Number + 1 == PastLives()) {
m_World->RemoveEntity(entity); m_World->RemoveEntity(entity);
SetPastLives(Lives()); SetPastLives(Lives());
@@ -64,7 +83,10 @@ void dd::Systems::LifeSystem::CreateLife(int number)
auto life = m_World->CreateEntity(); auto life = m_World->CreateEntity();
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life); std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life);
transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f); transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f);
//transform->Position = glm::vec3(-1.5f + number * 1.5f, -3.f, -10.f);
transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f); transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f);
/*transform->Scale = glm::vec3(0.2f, 0.2f, 0.2f);
transform->Velocity.x = m_LifeSpeed;*/
std::shared_ptr<Components::Life> lifeNr = m_World->AddComponent<Components::Life>(life); std::shared_ptr<Components::Life> lifeNr = m_World->AddComponent<Components::Life>(life);
lifeNr->Number = number; lifeNr->Number = number;
@@ -72,6 +94,8 @@ void dd::Systems::LifeSystem::CreateLife(int number)
auto model = m_World->AddComponent<Components::Model>(life); auto model = m_World->AddComponent<Components::Model>(life);
model->ModelFile = "Models/Sid/Sid.dae"; model->ModelFile = "Models/Sid/Sid.dae";
auto anim = m_World->AddComponent<Components::Animation>(life);
anim->Speed = 0.f;
m_World->CommitEntity(life); m_World->CommitEntity(life);
} }
@@ -79,6 +103,7 @@ bool dd::Systems::LifeSystem::OnLifeLost(const dd::Events::LifeLost &event)
{ {
if (!m_GodMode){ if (!m_GodMode){
SetLives(Lives() - 1); SetLives(Lives() - 1);
return true;
} }
return true; return true;
} }
+44 -42
View File
@@ -44,7 +44,7 @@ void dd::Systems::PadSystem::Initialize()
auto ent = m_World->CreateEntity(); auto ent = m_World->CreateEntity();
m_World->SetProperty(ent, "Name", "Pad"); m_World->SetProperty(ent, "Name", "Pad");
auto ctransform = m_World->AddComponent<Components::Transform>(ent); auto ctransform = m_World->AddComponent<Components::Transform>(ent);
ctransform->Position = glm::vec3(0.f, -4.8f, -10.f); ctransform->Position = glm::vec3(0.f, m_PadHeight, -10.f);
auto rectangleShape = m_World->AddComponent<Components::RectangleShape>(ent); auto rectangleShape = m_World->AddComponent<Components::RectangleShape>(ent);
rectangleShape->Dimensions = glm::vec2(1.f, 0.1f); rectangleShape->Dimensions = glm::vec2(1.f, 0.1f);
auto physics = m_World->AddComponent<Components::Physics>(ent); auto physics = m_World->AddComponent<Components::Physics>(ent);
@@ -58,7 +58,7 @@ void dd::Systems::PadSystem::Initialize()
auto pad = m_World->AddComponent<Components::Pad>(ent); auto pad = m_World->AddComponent<Components::Pad>(ent);
m_World->CommitEntity(ent); m_World->CommitEntity(ent);
SetEdge(3.2 - (ctransform->Scale.x / 2)); m_Edge = 3.2 - (ctransform->Scale.x / 2);
} }
//Stick //Stick
@@ -110,7 +110,7 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p
m_ResetBall = false; m_ResetBall = false;
} }
auto ballTransform = m_World->GetComponent<Components::Transform>(entity); auto ballTransform = m_World->GetComponent<Components::Transform>(entity);
ballTransform->Position = Transform()->Position; ballTransform->Position = m_PadTransform->Position;
ballTransform->Position += ball->StickyPlacement; ballTransform->Position += ball->StickyPlacement;
glm::vec2 dir = glm::normalize(glm::vec2(ball->SavedSpeed.x, ball->SavedSpeed.y)); glm::vec2 dir = glm::normalize(glm::vec2(ball->SavedSpeed.x, ball->SavedSpeed.y));
glm::vec2 up = glm::vec2(0.f, 1.f); glm::vec2 up = glm::vec2(0.f, 1.f);
@@ -133,12 +133,12 @@ void dd::Systems::PadSystem::Update(double dt)
return; return;
} }
if (Entity() == 0) { if (m_PadEntity == 0) {
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) { for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") { if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") {
SetEntity(it->first); m_PadEntity = it->first;
SetTransform(m_World->GetComponent<Components::Transform>(Entity())); m_PadTransform = m_World->GetComponent<Components::Transform>(m_PadEntity);
SetPad(m_World->GetComponent<Components::Pad>(Entity())); m_PadComponent = m_World->GetComponent<Components::Pad>(m_PadEntity);
break; break;
} }
} }
@@ -155,10 +155,17 @@ void dd::Systems::PadSystem::Update(double dt)
return; return;
} }
auto transform = Transform(); auto transform = m_PadTransform;
auto pad = Pad(); auto pad = m_PadComponent;
auto acceleration = Acceleration(); auto acceleration = m_PadAcceleration;
if (glm::abs(transform->Position.y - m_PadHeight) > m_PadRiseSpeed) {
if (transform->Position.y < m_PadHeight) {
transform->Position.y += m_PadRiseSpeed * (float)dt;
} else if (transform->Position.y > m_PadHeight) {
transform->Position.y -= m_PadRiseSpeed * 5 * (float)dt;
}
}
if (transform->Velocity.x < -pad->MaxSpeed) { if (transform->Velocity.x < -pad->MaxSpeed) {
transform->Velocity.x = -pad->MaxSpeed; transform->Velocity.x = -pad->MaxSpeed;
} }
@@ -166,27 +173,27 @@ void dd::Systems::PadSystem::Update(double dt)
transform->Velocity.x = pad->MaxSpeed; transform->Velocity.x = pad->MaxSpeed;
} }
transform->Position += transform->Velocity * (float)dt; transform->Position += transform->Velocity * (float)dt;
if (transform->Position.x > Edge()) { if (transform->Position.x > m_Edge) {
transform->Position.x = Edge(); transform->Position.x = m_Edge;
} else if (transform->Position.x < -Edge()) { } else if (transform->Position.x < -m_Edge) {
transform->Position.x = -Edge(); transform->Position.x = -m_Edge;
} }
transform->Velocity += acceleration * (float)dt; transform->Velocity += acceleration * (float)dt;
if (glm::abs(transform->Velocity.x) > 1 || (!Left() && !Right())) { if (glm::abs(transform->Velocity.x) > 1 || (!m_Left && !m_Right)) {
transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float) dt; transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float) dt;
} }
if (Left()) { if (m_Left) {
acceleration.x = -pad->AccelerationSpeed; acceleration.x = -pad->AccelerationSpeed;
} else if (Right()) { } else if (m_Right) {
acceleration.x = pad->AccelerationSpeed; acceleration.x = pad->AccelerationSpeed;
} else { } else {
acceleration.x = 0.f; acceleration.x = 0.f;
} }
SetTransform(transform); m_PadTransform = transform;
SetPad(pad); m_PadComponent = pad;
SetAcceleration(acceleration); m_PadAcceleration = acceleration;
return; return;
} }
@@ -220,11 +227,11 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
} else if (val == GLFW_KEY_LEFT) { } else if (val == GLFW_KEY_LEFT) {
//std::cout << "Left!" << std::endl; //std::cout << "Left!" << std::endl;
//acceleration.x = -0.01f; //acceleration.x = -0.01f;
SetLeft(true); m_Left = true;
} else if (val == GLFW_KEY_RIGHT) { } else if (val == GLFW_KEY_RIGHT) {
//std::cout << "Right!" << std::endl; //std::cout << "Right!" << std::endl;
//acceleration.x = 0.01f; //acceleration.x = 0.01f;
SetRight(true); m_Right = true;
} else if (val == GLFW_KEY_R) { } else if (val == GLFW_KEY_R) {
Events::ResetBall e; Events::ResetBall e;
EventBroker->Publish(e); EventBroker->Publish(e);
@@ -243,7 +250,7 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_M) { } else if (val == GLFW_KEY_M) {
Events::MultiBall e; Events::MultiBall e;
e.padTransform = Transform(); e.padTransform = m_PadTransform;
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_P) { } else if (val == GLFW_KEY_P) {
if (IsPaused()) { if (IsPaused()) {
@@ -277,7 +284,7 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_L) { } else if (val == GLFW_KEY_L) {
Events::Lifebuoy e; Events::Lifebuoy e;
e.Transform = Transform(); e.Transform = m_PadTransform;
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_Y) { } else if (val == GLFW_KEY_Y) {
Events::StickyPad e; Events::StickyPad e;
@@ -296,14 +303,14 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_Q) { } else if (val == GLFW_KEY_Q) {
Events::Move e; Events::Move e;
e.Entity = Entity(); e.Entity = m_PadEntity;
e.GoalPosition = glm::vec3(0, 0, -10); e.GoalPosition = glm::vec3(0, 0, -10);
e.Speed = 5; e.Speed = 5;
e.Queue = false; e.Queue = false;
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_SPACE) { } else if (val == GLFW_KEY_SPACE) {
Events::ActionButton e; Events::ActionButton e;
e.Position = Transform()->Position; e.Position = m_PadTransform->Position;
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_D) { } else if (val == GLFW_KEY_D) {
return false; return false;
@@ -319,9 +326,9 @@ bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event)
} else if (val == GLFW_KEY_DOWN) { } else if (val == GLFW_KEY_DOWN) {
} else if (val == GLFW_KEY_LEFT) { } else if (val == GLFW_KEY_LEFT) {
SetLeft(false); m_Left = false;
} else if (val == GLFW_KEY_RIGHT) { } else if (val == GLFW_KEY_RIGHT) {
SetRight(false); m_Right = false;
} }
return true; return true;
} }
@@ -420,6 +427,7 @@ bool dd::Systems::PadSystem::OnStageCleared(const dd::Events::StageCleared &even
{ {
//auto entity = CreateBall(); //auto entity = CreateBall();
m_StickyAim->Aiming = false; m_StickyAim->Aiming = false;
m_PadHeight = m_PadOriginalHeight;
return true; return true;
} }
@@ -451,14 +459,8 @@ bool dd::Systems::PadSystem::OnRaiseWaterWall(const dd::Events::RaiseWaterWall &
bool dd::Systems::PadSystem::RaisePad(float amount, float speed) bool dd::Systems::PadSystem::RaisePad(float amount, float speed)
{ {
auto transform = Transform(); m_PadHeight += amount;
glm::vec3 raise = glm::vec3(0, amount, 0); m_PadRiseSpeed = speed;
Events::Move e;
e.Entity = m_Entity;
e.GoalPosition = transform->Position + raise;
e.Speed = speed;
e.Queue = true;
EventBroker->Publish(e);
return true; return true;
} }
@@ -469,15 +471,15 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even
m_PlayerStrength = event.PlayerStrength; m_PlayerStrength = event.PlayerStrength;
m_KrakenCharge = event.ChargeUpdate; m_KrakenCharge = event.ChargeUpdate;
m_KrakenAttack = true; m_KrakenAttack = true;
auto transform = Transform(); auto transform = m_PadTransform;
auto acceleration = Acceleration(); auto acceleration = m_PadAcceleration;
transform->Velocity = glm::vec3(0, 0, 0); transform->Velocity = glm::vec3(0, 0, 0);
acceleration = glm::vec3(0, 0, 0); acceleration = glm::vec3(0, 0, 0);
LOG_INFO("Kraken arm duuude"); LOG_INFO("Kraken arm duuude");
if (!m_KrakenArm){ if (!m_KrakenArm){
LOG_INFO("InKrakenArmDuuude"); LOG_INFO("InKrakenArmDuuude");
m_KrakenArm = m_World->CreateEntity(Entity()); m_KrakenArm = m_World->CreateEntity(m_PadEntity);
auto transform = m_World->AddComponent<Components::Transform>(m_KrakenArm); auto transform = m_World->AddComponent<Components::Transform>(m_KrakenArm);
transform->Position = glm::vec3(1.f, -3.0f, 0.f); transform->Position = glm::vec3(1.f, -3.0f, 0.f);
auto model = m_World->AddComponent<Components::Model>(m_KrakenArm); auto model = m_World->AddComponent<Components::Model>(m_KrakenArm);
@@ -506,8 +508,8 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even
m_World->CommitEntity(m_KrakenArmHitbox); m_World->CommitEntity(m_KrakenArmHitbox);
} }
SetTransform(transform); m_PadTransform = transform;
SetAcceleration(acceleration); m_PadAcceleration = acceleration;
} else if (m_KrakenCharge >= 1) { } else if (m_KrakenCharge >= 1) {
m_KrakenAttack = false; m_KrakenAttack = false;
Events::KrakenAttackEnd e; Events::KrakenAttackEnd e;
+1
View File
@@ -139,6 +139,7 @@ bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButto
transform->Position = event.Position; transform->Position = event.Position;
transform->Velocity = glm::vec3(0, projectile->Speed, 0); transform->Velocity = glm::vec3(0, projectile->Speed, 0);
m_Shots--; m_Shots--;
if (m_Shots <= 0) { if (m_Shots <= 0) {
auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid); auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid);
m_InkBlaster = false; m_InkBlaster = false;
-151
View File
@@ -1,151 +0,0 @@
//
// Created by Adniklastrator on 2015-10-08.
//
#include "PrecompiledHeader.h"
#include "Game/ProjectileSystem.h"
void dd::Systems::ProjectileSystem::Initialize()
{
EVENT_SUBSCRIBE_MEMBER(m_EContact, &ProjectileSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_EPause, &ProjectileSystem::OnPause);
EVENT_SUBSCRIBE_MEMBER(m_EResume, &ProjectileSystem::OnResume);
EVENT_SUBSCRIBE_MEMBER(m_EInkBlaster, &ProjectileSystem::OnInkBlaster);
EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &ProjectileSystem::OnHitPad);
EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &ProjectileSystem::OnActionButton);
//Ink Blast
{
auto ent = m_World->CreateEntity();
m_World->SetProperty(ent, "Name", "Projectile");
std::shared_ptr<Components::Transform> ctransform = m_World->AddComponent<Components::Transform>(ent);
auto circleShape = m_World->AddComponent<Components::CircleShape>(ent);
auto inkBlastTemplate = m_World->AddComponent<Components::Template>(ent);
circleShape->Radius = 0.1f;
auto physics = m_World->AddComponent<Components::Physics>(ent);
physics->CollisionType = CollisionType::Type::Dynamic;
physics->Category = CollisionLayer::Type::Projectile;
physics->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Type::Pad | CollisionLayer::Type::Brick | CollisionLayer::Type::Wall);
physics->Calculate = true;
ctransform->Position = glm::vec3(0.f, 0.f, -10.f);
ctransform->Scale = glm::vec3(0.6f, 0.6f, 0.6f);
// auto cModel = m_World->AddComponent<Components::Model>(ent);
// cModel->ModelFile = "Models/Test/Ball/Sid.obj";
auto cSprite = m_World->AddComponent<Components::Sprite>(ent);
cSprite->SpriteFile = "Textures/Particles/OilShot.png";
auto projectile = m_World->AddComponent<Components::Projectile>(ent);
m_World->CommitEntity(ent);
m_InkBlastTemplate = ent;
}
return;
}
void dd::Systems::ProjectileSystem::Update(double dt)
{
if (m_Pause) {
return;
}
}
void dd::Systems::ProjectileSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{
if (IsPaused()) {
return;
}
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
if (templateCheck != nullptr){ return; }
auto shot = m_World->GetComponent<Components::Projectile>(entity);
if (shot != nullptr) {
auto transform = m_World->GetComponent<Components::Transform>(entity);
if (transform->Position.y > 8) {
m_World->RemoveEntity(entity);
}
}
}
bool dd::Systems::ProjectileSystem::OnPause(const dd::Events::Pause &event)
{
/*if (event.Type != "ProjectileSystem" && event.Type != "All") {
return false;
}*/
m_Pause = true;
return true;
}
bool dd::Systems::ProjectileSystem::OnResume(const dd::Events::Resume &event)
{
/*if (event.Type != "ProjectileSystem" && event.Type != "All") {
return false;
}*/
m_Pause = false;
return true;
}
bool dd::Systems::ProjectileSystem::OnContact(const dd::Events::Contact &event)
{
return true;
}
bool dd::Systems::ProjectileSystem::OnInkBlaster(const dd::Events::InkBlaster &event)
{
m_InkBlaster = true;
m_Shots = event.Shots;
m_InkBlasterSpeed = event.Speed;
return true;
}
bool dd::Systems::ProjectileSystem::OnHitPad(const dd::Events::HitPad &event)
{
if (m_InkBlaster) {
m_SquidLoaded = true;
m_AttachedSquid = event.Ball;
}
return true;
}
bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButton &event)
{
if (m_InkBlaster && m_SquidLoaded) {
auto ent = m_World->CloneEntity(m_InkBlastTemplate);
m_World->RemoveComponent<Components::Template>(ent);
auto projectile = m_World->GetComponent<Components::Projectile>(ent);
projectile->Speed = m_InkBlasterSpeed;
auto transform = m_World->GetComponent<Components::Transform>(ent);
transform->Position = event.Position;
<<<<<<< HEAD
transform->Velocity = glm::vec3(0, projectile->Speed, 0);
=======
transform->Velocity = glm::vec3(0, 7, 0);
>>>>>>> origin/master
m_Shots--;
if (m_Shots <= 0) {
auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid);
m_InkBlaster = false;
m_SquidLoaded = false;
ball->InkBlaster = false;
ball->Sticky = false;
ball->Waiting = true;
{
Events::InkBlasterOver e;
e.Ball = m_AttachedSquid;
EventBroker->Publish(e);
}
{
Events::ActionButton e;
EventBroker->Publish(e);
}
}
}
return true;
}
+54 -4
View File
@@ -14,6 +14,8 @@ void dd::Systems::WaterSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &WaterSystem::OnRaiseWater); EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &WaterSystem::OnRaiseWater);
EVENT_SUBSCRIBE_MEMBER(m_ERaiseWaterWall, &WaterSystem::OnRaiseWaterWall); EVENT_SUBSCRIBE_MEMBER(m_ERaiseWaterWall, &WaterSystem::OnRaiseWaterWall);
m_RaiseWater = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Debug.RaiseWater", false);
//Water test //Water test
{ {
auto t_waterBody = m_World->CreateEntity(); auto t_waterBody = m_World->CreateEntity();
@@ -24,6 +26,10 @@ void dd::Systems::WaterSystem::Initialize()
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody); auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
m_World->CommitEntity(t_waterBody); m_World->CommitEntity(t_waterBody);
} }
m_BrickPartCounters =
{0, 0, 0, 0, 0,
0, 0, 0, 0, 0 };
} }
void dd::Systems::WaterSystem::Update(double dt) void dd::Systems::WaterSystem::Update(double dt)
@@ -43,6 +49,31 @@ void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID
auto templateCheck = m_World->GetComponent<Components::Template>(entity); auto templateCheck = m_World->GetComponent<Components::Template>(entity);
if (templateCheck != nullptr){ return; } if (templateCheck != nullptr){ return; }
auto brickPart = m_World->GetComponent<Components::BrickPart>(entity);
if (brickPart != nullptr) {
auto transform = m_World->GetComponent<Components::Transform>(entity);
if (m_RaiseWater) {
if (!brickPart->Submerged) {
if (transform->Position.y < m_SubmergedHeight) {
brickPart->Submerged = true;
m_BrickPartCounters[brickPart->NumberOfPartsInBrick]++;
std::cout << "Parts: " << m_BrickPartCounters[brickPart->NumberOfPartsInBrick] << " of " << brickPart->NumberOfPartsInBrick << std::endl;
if (m_BrickPartCounters[brickPart->NumberOfPartsInBrick] >= brickPart->NumberOfPartsInBrick) {
m_BrickPartCounters[brickPart->NumberOfPartsInBrick] = 0;
Events::RaiseWater e;
e.Amount = 0.2;
e.Speed = 0.2;
EventBroker->Publish(e);
}
}
}
}
if (transform->Position.y < -10) {
m_World->RemoveEntity(entity);
return;
}
}
if (m_BottomWall == 0) { if (m_BottomWall == 0) {
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) { for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
if (m_World->GetProperty<std::string>(it->first, "Name") == "BottomWall") { if (m_World->GetProperty<std::string>(it->first, "Name") == "BottomWall") {
@@ -51,6 +82,21 @@ void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID
} }
} }
} }
auto newWater = m_World->GetComponent<Components::NewWaterVolume>(entity);
if (newWater != nullptr) {
if (m_RemoveWater) {
//m_World->RemoveComponent<Components::WaterVolume>(entity);
//m_World->RemoveComponent<Components::RectangleShape>(entity);
//m_World->RemoveComponent<Components::WaterVolume>(entity);
//m_World->RemoveEntity(entity);
//m_World->RemoveComponent<Components::>();
}
/*auto transform = m_World->AddComponent<Components::Transform>(entity);
if (transform->Position.y < -10) {
m_World->RemoveEntity(entity);
}*/
}
} }
bool dd::Systems::WaterSystem::OnPause(const dd::Events::Pause &event) bool dd::Systems::WaterSystem::OnPause(const dd::Events::Pause &event)
@@ -80,13 +126,14 @@ bool dd::Systems::WaterSystem::OnRelevantObjectCreated(const dd::Events::Relevan
bool dd::Systems::WaterSystem::OnStageCleared(const dd::Events::StageCleared &event) bool dd::Systems::WaterSystem::OnStageCleared(const dd::Events::StageCleared &event)
{ {
m_SubmergedHeight = m_SubmergedOriginalHeight;
m_RemoveWater = true;
return true; return true;
} }
bool dd::Systems::WaterSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event) bool dd::Systems::WaterSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event)
{ {
m_RemoveWater = false;
return true; return true;
} }
@@ -95,13 +142,16 @@ bool dd::Systems::WaterSystem::OnRaiseWater(const dd::Events::RaiseWater &event)
{ {
auto t_waterBody = m_World->CreateEntity(); auto t_waterBody = m_World->CreateEntity();
auto transform = m_World->AddComponent<Components::Transform>(t_waterBody); auto transform = m_World->AddComponent<Components::Transform>(t_waterBody);
transform->Position = glm::vec3(0.f, -3.5f, -10.f); transform->Position = glm::vec3(0.f, m_SubmergedHeight, -10.f);
transform->Scale = glm::vec3(7.0f, event.Amount * 1.6f, 1.f); transform->Scale = glm::vec3(7.0f, event.Amount * 1.4f, 1.f);
auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody); auto water = m_World->AddComponent<Components::WaterVolume>(t_waterBody);
auto newWater = m_World->AddComponent<Components::NewWaterVolume>(t_waterBody); //Meaning it isn't the original water we had.
auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody); auto body = m_World->AddComponent<Components::RectangleShape>(t_waterBody);
m_World->CommitEntity(t_waterBody); m_World->CommitEntity(t_waterBody);
} }
m_SubmergedHeight += event.Amount;
return true; return true;
} }
+30 -9
View File
@@ -236,7 +236,12 @@ void dd::Systems::PhysicsSystem::Update(double dt)
auto particle = m_World->GetComponent<Components::Particle>(entity); auto particle = m_World->GetComponent<Components::Particle>(entity);
transform->Position = glm::vec3(position.x, position.y, transform->Position.z); transform->Position = glm::vec3(position.x, position.y, transform->Position.z);
transform->Scale = particle->Scale;//glm::vec3(particle->Radius * 2.f, particle->Radius * 2.f, 1); EntityID emitter = m_ParticleEmitters.ParticleEmitter[e];
auto cEmitter = m_World->GetComponent<Components::ParticleEmitter>(emitter);
if (!cEmitter->DefaultScale)
{
transform->Scale = particle->Scale;
}
} }
} }
@@ -272,7 +277,7 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
m_World->RemoveEntity(entity); m_World->RemoveEntity(entity);
} }
} }
//Update alpha //Update alpha & scale
auto sprite = m_World->GetComponent<Components::Sprite>(entity); auto sprite = m_World->GetComponent<Components::Sprite>(entity);
float timeProgress = particle->TimeLived / (particle->LifeTime - 0.1); float timeProgress = particle->TimeLived / (particle->LifeTime - 0.1);
if (timeProgress > 1) { if (timeProgress > 1) {
@@ -281,7 +286,9 @@ void dd::Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, Entity
auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem); auto emitter = m_World->GetComponent<Components::ParticleEmitter>(particle->ParticleSystem);
if (emitter) { if (emitter) {
sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues); sprite->Color.w = ScalarInterpolation(timeProgress, emitter->AlphaValues);
particle->Scale = VectorInterpolation(timeProgress, emitter->ScaleValues); if (!emitter->DefaultScale) {
particle->Scale = VectorInterpolation(timeProgress, emitter->ScaleValues);
}
} }
} }
@@ -720,8 +727,9 @@ bool dd::Systems::PhysicsSystem::CreateParticleSequence(const Events::CreatePart
particleEmitter->EmittingAngle = event.EmittingAngle; particleEmitter->EmittingAngle = event.EmittingAngle;
particleEmitter->LifeTime = event.EmitterLifeTime; particleEmitter->LifeTime = event.EmitterLifeTime;
particleEmitter->AlphaValues = event.AlphaValues; particleEmitter->AlphaValues = event.AlphaValues;
particleEmitter->ScaleValues = event.ScaleValues;
particleEmitter->RadiusDistribution = event.RadiusDistribution; particleEmitter->RadiusDistribution = event.RadiusDistribution;
particleEmitter->DefaultScale = event.DefaultScale;
particleEmitter->ScaleValues = event.ScaleValues;
{ {
//Creating Particle Template //Creating Particle Template
auto particle = m_World->CreateEntity(emitter); auto particle = m_World->CreateEntity(emitter);
@@ -731,10 +739,17 @@ bool dd::Systems::PhysicsSystem::CreateParticleSequence(const Events::CreatePart
m_World->AddComponent<Components::Template>(particle); m_World->AddComponent<Components::Template>(particle);
particleTransform->Position = emitterTransform->Position; particleTransform->Position = emitterTransform->Position;
sprite->SpriteFile = event.SpriteFile; sprite->SpriteFile = event.SpriteFile;
if (particleEmitter->DefaultScale == true)
{
Texture* texture = ResourceManager::Load<Texture>(event.SpriteFile);
particleEmitter->ScaleValues.clear();
particleEmitter->ScaleValues.push_back(glm::vec3(texture->Width / 100, texture->Height / 100, 1));
}
sprite->Color = event.Color; sprite->Color = event.Color;
particleComponent->LifeTime = event.ParticleLifeTime; particleComponent->LifeTime = event.ParticleLifeTime;
particleComponent->Flags = event.Flags; particleComponent->Flags = event.Flags;
particleComponent->Scale = event.ScaleValues[0]; particleComponent->Scale = particleEmitter->ScaleValues[0];
particleComponent->ParticleSystem = emitter; particleComponent->ParticleSystem = emitter;
} }
m_World->CommitEntity(emitter); m_World->CommitEntity(emitter);
@@ -823,7 +838,7 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
} }
Events::PlaySound se; Events::PlaySound se;
//Spawn a particle when a brick collides with somthing //Spawn a particle when a brick collides with something
Events::CreateParticleSequence e; Events::CreateParticleSequence e;
e.EmitterLifeTime = 3; e.EmitterLifeTime = 3;
e.EmittingAngle = glm::half_pi<float>(); e.EmittingAngle = glm::half_pi<float>();
@@ -835,8 +850,9 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
e.Color = glm::vec4(1.f); e.Color = glm::vec4(1.f);
e.AlphaValues.push_back(1.f); e.AlphaValues.push_back(1.f);
e.AlphaValues.push_back(0.f); e.AlphaValues.push_back(0.f);
e.ScaleValues.push_back(glm::vec3(1.f)); e.ScaleValues.push_back(glm::vec3(4));
e.Speed = 0; e.Speed = 0;
e.DefaultScale = true;
auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity); auto PowerFriend = m_World->GetComponent<Components::MultiBallBrick>(entity);
auto PowerSaviour = m_World->GetComponent<Components::LifebuoyBrick>(entity); auto PowerSaviour = m_World->GetComponent<Components::LifebuoyBrick>(entity);
@@ -846,21 +862,27 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
if (PowerFriend) { if (PowerFriend) {
se.FilePath = "Sounds/jap-awesome.wav"; se.FilePath = "Sounds/jap-awesome.wav";
EventBroker->Publish(se);
e.SpriteFile = "Textures/PowerUps/Friends.png"; e.SpriteFile = "Textures/PowerUps/Friends.png";
} else if (PowerSaviour) { } else if (PowerSaviour) {
se.FilePath = "Sounds/jap-awesome.wav"; se.FilePath = "Sounds/jap-awesome.wav";
EventBroker->Publish(se);
e.SpriteFile = "Textures/PowerUps/Saviour.png"; e.SpriteFile = "Textures/PowerUps/Saviour.png";
} else if (PowerSticky) { } else if (PowerSticky) {
se.FilePath = "Sounds/jap-awesome.wav"; se.FilePath = "Sounds/jap-awesome.wav";
EventBroker->Publish(se);
e.SpriteFile = "Textures/PowerUps/Sticky.png"; e.SpriteFile = "Textures/PowerUps/Sticky.png";
} else if (PowerInkBlaster){ } else if (PowerInkBlaster){
se.FilePath = "Sounds/jap-awesome.wav"; se.FilePath = "Sounds/jap-awesome.wav";
EventBroker->Publish(se);
e.SpriteFile = "Textures/PowerUps/InkBlaster.png"; e.SpriteFile = "Textures/PowerUps/InkBlaster.png";
} else if (PowerKraken) { } else if (PowerKraken) {
se.FilePath = "Sounds/jap-awesome.wav"; se.FilePath = "Sounds/jap-huh.wav";
EventBroker->Publish(se);
e.SpriteFile = "Textures/PowerUps/RealeaseTheKraken.png"; e.SpriteFile = "Textures/PowerUps/RealeaseTheKraken.png";
} }
else { else {
e.DefaultScale = false;
e.EmitterLifeTime = 4; e.EmitterLifeTime = 4;
e.EmittingAngle = glm::half_pi<float>(); e.EmittingAngle = glm::half_pi<float>();
e.Spread = 0.5f; e.Spread = 0.5f;
@@ -880,7 +902,6 @@ bool dd::Systems::PhysicsSystem::OnContact(const dd::Events::Contact &event)
} }
EventBroker->Publish(e); EventBroker->Publish(e);
EventBroker->Publish(se);
return true; return true;
+4
View File
@@ -21,6 +21,10 @@
void dd::Renderer::Initialize() void dd::Renderer::Initialize()
{ {
ResourceManager::RegisterType<ShaderProgram>("ShaderProgram");
ResourceManager::RegisterType<VertexShader>("VertexShader");
ResourceManager::RegisterType<FragmentShader>("FragmentShader");
// Initialize GLFW // Initialize GLFW
if (!glfwInit()) { if (!glfwInit()) {
LOG_ERROR("GLFW: Initialization failed"); LOG_ERROR("GLFW: Initialization failed");
+28
View File
@@ -40,6 +40,7 @@ void dd::Systems::SoundSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound); EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound);
EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume); EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume);
EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &SoundSystem::OnGameStart); EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &SoundSystem::OnGameStart);
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAppear, &SoundSystem::OnKrakenAppear);
m_SFXMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.SFXVolume", 1.f); m_SFXMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.SFXVolume", 1.f);
m_BGMMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.BGMVolume", 1.f); m_BGMMasterVolume = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<float>("Audio.BGMVolume", 1.f);
@@ -214,5 +215,32 @@ bool dd::Systems::SoundSystem::OnGameStart(const dd::Events::GameStart &event)
return true; return true;
} }
bool dd::Systems::SoundSystem::OnKrakenAppear(const dd::Events::KrakenAppear &event)
{
{
dd::Events::StopSound e;
e.FilePath = GAME_BGM;
EventBroker->Publish(e);
}
{
dd::Events::StopSound e;
e.FilePath = WATER_BGM;
EventBroker->Publish(e);
}
{
dd::Events::PlaySound e;
e.FilePath = BOSS_BGM;
e.IsAmbient = true;
e.Gain = 0.4f;
EventBroker->Publish(e);
}
{
dd::Events::PlaySound e;
e.FilePath = "Sounds/Boss/boss-roar.wav";
EventBroker->Publish(e);
}
return true;
}