Compare commits

...

268 Commits

Author SHA1 Message Date
viktorljung cb94f6aecd AnimationDemo 2016-03-14 20:03:52 +01:00
William Moberg fb3842ba5b Indentation. 2016-03-14 06:05:11 +01:00
William Moberg 6daaccb9ed Merge branch 'Recording' of github.com:teamfisk/TacticalZ into Recording
# Conflicts:
#	src/Engine/Editor/EditorSystem.cpp
2016-03-14 06:02:47 +01:00
William Moberg 0cd161184e Smoother movement for editor camera. 2016-03-14 06:00:12 +01:00
Jace 87b983ec6f Stuff 2016-03-14 05:56:09 +01:00
Jace 592f33653e Better shadows for recording 2016-03-14 04:44:53 +01:00
Jace c74a4e375e Better CP_Valhalla lighting 2016-03-14 04:24:40 +01:00
Jace 78a383b03c Merge branch 'master' into Recording 2016-03-14 04:04:20 +01:00
Jace 24de85b476 Editor no longer resets camera 2016-03-14 04:02:05 +01:00
Jace fc97c4e8ea Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-14 04:01:40 +01:00
Jace e3767996a1 Added DEBUG flags to all debug imgui stuff 2016-03-14 04:01:04 +01:00
William Moberg 809d164eba Merge pull request #221 from teamfisk/PerfectSoundForRelease
Perfect sound for release
2016-03-14 03:54:35 +01:00
Tobias Dahl 5879cb0de4 Merge pull request #219 from teamfisk/FixAssaultWeaponReload
Reload for assault is only done once now.
2016-03-14 03:48:59 +01:00
Tobias Dahl 832a901bf6 Merge pull request #220 from teamfisk/Movement
Movement
2016-03-14 03:48:47 +01:00
maqu14 94a10c3a8f New polished map 2016-03-14 03:07:58 +01:00
Jace cbb2eee003 Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-14 02:53:18 +01:00
Jace f6d85c86c4 Added new team pick 2016-03-14 02:53:02 +01:00
maqu14 8a24a16232 Merge branch 'master' of github.com:teamfisk/TacticalZ
# Conflicts:
#	resources/DefaultConfig.ini
#	resources/Schema/Entities/CP_Rocky2.xml
2016-03-14 02:51:09 +01:00
maqu14 d850e116fb New map, Some new assets 2016-03-14 02:50:24 +01:00
Teejoon a4c35e5908 Lower Glow intensity on players 2016-03-14 02:38:26 +01:00
Teejoon ff881e1f78 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-14 02:16:07 +01:00
Teejoon eb2e79e4cb Players now got lights on them 2016-03-14 02:15:56 +01:00
Tleety 788d80f721 Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-14 01:59:41 +01:00
Tleety 0b485163c9 Changes to menu 2016-03-14 01:59:33 +01:00
Jace e527badab4 Executable name updated to "Axyz" 2016-03-14 01:53:20 +01:00
stiffly 8cef422ea7 Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease
# Conflicts:
#	resources/Schema/Entities/CP_Rocky2.xml
2016-03-14 01:51:51 +01:00
stiffly 54a03ddc0f Hurt sound only played for local player. 2016-03-14 01:49:37 +01:00
viktorljung a65d8c86d1 3rd person reload effect 2016-03-14 01:48:48 +01:00
Jace d492b54687 Added executable icon to CMakeLists 2016-03-14 01:42:14 +01:00
stiffly c1395355c6 Removed comment 2016-03-14 01:36:11 +01:00
Jace f62f8d53db Merge branch 'Setup' 2016-03-14 01:30:49 +01:00
Jace 51c7e92fce Fixed redist install 2016-03-14 01:29:11 +01:00
viktorljung 0764c9bab2 Merge remote-tracking branch 'origin/master' into Movement 2016-03-14 01:20:20 +01:00
Teejoon c61d33ebd9 NewScorebord 2016-03-14 01:08:22 +01:00
Jocke 1b1963e6d2 Reload for assault is only done once now. 2016-03-14 01:01:35 +01:00
stiffly 3994c0f7ad Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-14 00:59:32 +01:00
stiffly 1345889e62 The win sound plays on win screen 2016-03-14 00:58:53 +01:00
Adam Byléhn 50abeda99a Merge pull request #218 from teamfisk/DashEffect
Dash effect
2016-03-14 00:58:00 +01:00
Jace fe6f294986 Moved installer script to subdir 2016-03-14 00:52:03 +01:00
viktorljung 424dffd1e0 removed shadows on 1st person hands and weapons
added shielded component on 3rd person weapons
2016-03-14 00:47:21 +01:00
Jace 33ed59fc3a Added files for setup creation 2016-03-14 00:45:09 +01:00
viktorljung d1c11f20f2 Merge remote-tracking branch 'origin/master' into Movement 2016-03-14 00:39:16 +01:00
viktorljung 1bba40449f Tracers done 2016-03-14 00:38:36 +01:00
Tleety fd482dd670 Axyz logo in menu 2016-03-14 00:37:29 +01:00
viktorljung f5343251c5 fixed for real now? 2016-03-14 00:28:30 +01:00
Tleety c493ebca8e Viewpunch for sidearm and defender 2016-03-14 00:23:51 +01:00
William Moberg ef9a449077 Merge branch 'master' into DashEffect 2016-03-14 00:07:45 +01:00
viktorljung 5207248a49 3rd person tracers fixed 2016-03-14 00:04:51 +01:00
William Moberg 12d0c68fbf Weapon should fade on dash effect afterimage. 2016-03-13 23:57:47 +01:00
viktorljung 1bf65d896a Sidearm tracer fixed 2016-03-13 23:42:21 +01:00
stiffly 7855cf03d2 The Endscreen now works over the network. 2016-03-13 23:33:10 +01:00
Tleety b89f68ae2f Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 23:30:26 +01:00
Tleety 36185b43ef Killfeed in overwatch camera 2016-03-13 23:30:17 +01:00
viktorljung 4adf7dc507 Assault tracer fixed 2016-03-13 23:29:50 +01:00
William Moberg e2686abb16 Merge branch 'master' into DashEffect 2016-03-13 23:25:38 +01:00
William Moberg be91fc5005 WIP dash effect fade weapon 2. 2016-03-13 23:23:36 +01:00
William Moberg 0084224e18 WIP, dash effect fade weapon. 2016-03-13 23:23:05 +01:00
viktorljung 73bcc6e382 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 23:12:59 +01:00
viktorljung f393a22011 defender tracer fixed 2016-03-13 23:12:45 +01:00
Jace 9d2ce5af8a Player is now spawned as the correct class that they picked. 2016-03-13 23:05:52 +01:00
William Moberg e4145cf292 Fixed dash effect to be supported with the new animations using Fade components.
Added bool Loop field in Fade component.
2016-03-13 22:49:24 +01:00
stiffly 03dab9ca9a Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-13 22:33:23 +01:00
Jace fc7f57fd5d Merge remote-tracking branch 'origin/master'
Conflicts:
	resources/Schema/Entities/ScoreBoard_Main.xml
2016-03-13 22:27:17 +01:00
Ayumiwii c20830572c Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 22:24:59 +01:00
Ayumiwii 00d77607b4 new scoreboard 2016-03-13 22:24:27 +01:00
stiffly 1a120ef345 Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-13 22:22:41 +01:00
Jace a715f7fe86 Merge branch 'master' into Movement
# Conflicts:
#	include/Engine/Network/Client.h
#	resources/DefaultConfig.ini
#	resources/Schema/Entities/OverwatchCamera.xml
#	resources/Schema/Types/Entity.xsd
2016-03-13 22:22:36 +01:00
stiffly 0d823421d8 Added win sound file 2016-03-13 22:22:19 +01:00
viktorljung d587c9a692 Fixed first person strafe animation 2016-03-13 22:17:55 +01:00
viktorljung 7d32909122 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 22:14:11 +01:00
Tleety ce2fcd9109 Now it works 2016-03-13 22:13:37 +01:00
Jace 77bb7a0f5c Merge pull request #200 from teamfisk/UnpickableComponent
Added Unpickable component, which skips the entity in the PickingPass
2016-03-13 22:09:23 +01:00
Jace 78c7d777e3 Made player models in class select unpickable 2016-03-13 22:09:12 +01:00
viktorljung 98bd447084 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 22:02:45 +01:00
viktorljung fd50ea3a12 Defender friendly boost hud 2016-03-13 22:02:37 +01:00
Tleety 83ae87594f Fixed maxhealth probably 2016-03-13 22:00:48 +01:00
Jace 53dd96d44d Merge branch 'master' into UnpickableComponent
# Conflicts:
#	resources/Schema/Components.xsd
#	resources/Schema/Types/Entity.xsd
2016-03-13 22:00:10 +01:00
Jace d9b47ddb62 Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 21:55:03 +01:00
Jace bc3e699ddb Bumping master to latest assets 2016-03-13 21:54:50 +01:00
antc13 412c92aa7f Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 21:51:37 +01:00
antc13 b76bc74c4b Changed glow intensity on some grid walls. 2016-03-13 21:51:24 +01:00
Tobias Dahl 8c48e96ad1 Merge pull request #211 from teamfisk/MSAA
MSAA
2016-03-13 21:47:43 +01:00
Tobias Dahl fe9c5bd686 Merge pull request #217 from teamfisk/revert-216-ShadowOptimization
Revert "Shadow will actually shut itself off and delete itself now"
2016-03-13 21:36:12 +01:00
Tobias Dahl 7fa634ef7c Revert "Shadow will actually shut itself off and delete itself now" 2016-03-13 21:35:57 +01:00
Tobias Dahl 080f5ac856 Merge pull request #216 from teamfisk/ShadowOptimization
Shadow will actually shut itself off and delete itself now
2016-03-13 21:32:42 +01:00
Jace 4ecbef59bf Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 21:29:59 +01:00
Jace 8a1217e8b5 Hoodwinked GLFW into creating a fullscreen windowed window by initializing it one pixel higher than the resolution height 2016-03-13 21:29:39 +01:00
Teejoon f59a9e1d2b Merge remote-tracking branch 'origin/master' into MSAA
Conflicts:
	resources/Schema/Entities/CP_Rocky2.xml
2016-03-13 21:28:38 +01:00
Teejoon 5796d07b56 PerformanceTimer will no longer run while in release 2016-03-13 21:25:32 +01:00
FakeShemp 8e150da7ff Use CommonFunctions::DeleteTexture() instead 2016-03-13 21:25:04 +01:00
viktorljung 148d60f8f8 hp really fixed? 2016-03-13 21:24:27 +01:00
viktorljung 066ca6075d hp fixed? 2016-03-13 21:19:21 +01:00
viktorljung 93f4384da6 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 21:10:39 +01:00
viktorljung 3a0cff7a83 boost check for defender 2016-03-13 21:10:22 +01:00
William Moberg c790b952fb Merge pull request #214 from teamfisk/PerfectSoundForRelease
Perfect sound for release
2016-03-13 21:01:21 +01:00
Tleety 27443d4e08 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 21:01:15 +01:00
Tleety 20e48eeb08 Killfeed should work now. 2016-03-13 21:01:04 +01:00
viktorljung e929ecab50 fix??? 2016-03-13 20:58:53 +01:00
antc13 be3d75a5cf Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 20:48:23 +01:00
antc13 b3c935c7cc Fixed rotation/translation on some objects on CP_Rocky2. They somehow got weird rotation values. 2016-03-13 20:48:05 +01:00
viktorljung ee8d7574b2 dash fix? 2016-03-13 20:46:59 +01:00
viktorljung 1da3ec3c74 ammo share fix? 2016-03-13 20:32:08 +01:00
Jace f05b09ca7a Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 19:54:22 +01:00
Jace e76740d72b Point lights child of a camera no longer visible to other cameras 2016-03-13 19:53:34 +01:00
Jace d3927de7cc Super fancy new class pick, don't overwrite plz 2016-03-13 19:51:01 +01:00
Teejoon 5aaefc6e53 Animation optimization 2016-03-13 19:01:30 +01:00
viktorljung 6bfed76e06 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 18:56:04 +01:00
viktorljung 389d27973f Assault boost check 2016-03-13 18:55:45 +01:00
stiffly fe090504cf Now listens to SetCamera event and the background music should be working properly. 2016-03-13 17:35:05 +01:00
Tleety fc5ad2d380 Small fix 2016-03-13 17:33:12 +01:00
Teejoon a9d5c5d9d2 Glow is looking good :) 2016-03-13 17:15:36 +01:00
viktorljung 0d287ad5d1 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement
# Conflicts:
#	resources/Schema/Entities/RayAssaultBlue.xml
2016-03-13 16:45:57 +01:00
viktorljung 3cee4e4248 defender ray fixes 2016-03-13 16:42:07 +01:00
Teejoon 5f11d1e066 fix 2016-03-13 16:38:50 +01:00
Adam Byléhn 672d6f884d Merge pull request #215 from teamfisk/RestartMap
Added pop up for client when server timeouts.
2016-03-13 16:33:51 +01:00
viktorljung 17007a2a41 fix fix 2016-03-13 16:28:39 +01:00
Jocke 5ea0f04b20 Added pop up for client when server timeouts. 2016-03-13 16:21:55 +01:00
FakeShemp 9b5e4c10fd Shadow will actually shut itself off and delete itself now 2016-03-13 16:19:17 +01:00
Tleety 041050ab2f Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 16:15:26 +01:00
Tleety 9f752ad3e9 Fadesystem, entities, weapon muzzles should now look good. reload for secondary 2016-03-13 16:15:06 +01:00
viktorljung 04288e5243 Merge fixes 2016-03-13 16:14:13 +01:00
stiffly fb400bb743 Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-13 15:37:14 +01:00
stiffly aa2475dfd6 Stops bgm when the game is reset. 2016-03-13 15:36:56 +01:00
Jace 36c4837813 Merge pull request #213 from teamfisk/Dirtybit
Linker warnings fix
2016-03-13 15:29:45 +01:00
Teejoon 741ed01930 Merge remote-tracking branch 'origin/master' into MSAA 2016-03-13 15:28:00 +01:00
William Moberg 2fa3637018 Transform.cpp was deleted since stuff was moved to TransformSystem, takes care of linker warnings. 2016-03-13 15:26:35 +01:00
antc13 52e5e2527a Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 15:21:44 +01:00
antc13 36253a8afd Made minor changes to light positions on CP_Rocky2. Replaced a model & changed glow value on some walls. 2016-03-13 15:21:29 +01:00
viktorljung 44f46cda8d Merge remote-tracking branch 'origin/master' into Movement
# Conflicts:
#	include/Game/Systems/Weapon/DefenderWeaponBehaviour.h
#	resources/Schema/Components.xsd
#	resources/Schema/Entities/CP_Rocky2.xml
#	resources/Schema/Entities/MuzzleFlashBlue.xml
#	resources/Schema/Entities/MuzzleFlashFire.xml
#	resources/Schema/Entities/MuzzleFlashRed.xml
#	resources/Schema/Types/Entity.xsd
#	resources/Shaders/Sprite.frag.glsl
#	src/Game/Systems/AbilityCooldownHUDSystem.cpp
#	src/Game/Systems/BoostIconsHUDSystem.cpp
#	src/Game/Systems/PlayerMovementSystem.cpp
#	src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
#	src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
#	src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
2016-03-13 15:17:15 +01:00
stiffly 5c343cb254 Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-13 15:10:52 +01:00
Adam Byléhn b73595eed0 Merge pull request #210 from teamfisk/RestartMap
Restart map
2016-03-13 15:10:01 +01:00
viktorljung 7d899a989c Started working on boost HUD thingy 2016-03-13 15:09:50 +01:00
Teejoon bb3a8dba6a Merge branch 'master' into MSAA 2016-03-13 15:06:02 +01:00
Teejoon f9e640ffc6 Added borders to capture points so that you can see if your inside of outside when not looking down 2016-03-13 14:59:57 +01:00
stiffly f2c7a9f27a Merge remote-tracking branch 'origin/master' into PerfectSoundForRelease 2016-03-13 14:56:00 +01:00
viktorljung 0f4f32188c assault weapon now reloading correctly 2016-03-13 14:55:29 +01:00
William Moberg ac20e41a5d Fixed merge conflicts. Scoreboard updates team when a team is picked. Fixed some code standard violations and misspellings. 2016-03-13 14:23:56 +01:00
viktorljung 0963f61976 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 13:41:39 +01:00
viktorljung bfb7a4139d Tweaking 2016-03-13 13:41:28 +01:00
William Moberg 4f99f6ef74 Merge branch 'master' into RestartMap
# Conflicts:
#	src/Game/Systems/CapturePointSystem.cpp
2016-03-13 13:37:51 +01:00
antc13 d0a083a1e3 Fixed rotation/translation on some objects on CP_Rocky2. 2016-03-13 13:13:14 +01:00
antc13 d5f06fa8c2 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 12:20:36 +01:00
antc13 8bb8ebbea3 Fixed Splatmap Export 2016-03-13 12:20:25 +01:00
viktorljung 60c6aa2486 Defender first person tracers done 2016-03-13 02:35:02 +01:00
Tleety 8d809f30f7 Muzzleflash now very nice 2016-03-13 02:25:11 +01:00
Tleety bbe61f300c Fade in/out should now work with models and sprites 2016-03-13 02:03:49 +01:00
Teejoon ec7ab417e6 Added so that mipmaps can have diferant formats. Bloom also uses RGB8 on all texture now 2016-03-13 01:47:37 +01:00
Jace 4bd2e7995a fixup! Cheeki breeki 2016-03-13 01:32:29 +01:00
Jace 799fd31844 Merge pull request #212 from teamfisk/Dirtybit
Dirtybit
2016-03-13 01:26:54 +01:00
Jace 45bfc374de Cheeki breeki 2016-03-13 01:25:13 +01:00
Tleety 13f44c2086 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 01:24:01 +01:00
Tleety f6a8534c15 New assets, FadeOutComponent, Some MuzzleFlash entities, Changes to ray. Muzzleflash rotation 2016-03-13 01:23:51 +01:00
Jace 95f9065037 Merge branch 'master' into Dirtybit
# Conflicts:
#	include/Engine/Sound/SoundManager.h
2016-03-13 01:07:17 +01:00
Jace 993e56ec59 Disabled final model matrix caching for now, since it doesn't seem to work in all cases. (CP_Rocky2 pickup platforms and ceiling doens't get updated for some reason?!?) 2016-03-13 00:57:54 +01:00
Jace a1fda82d3a Turned the Transform namespace into TransformSystem so it would be able to subscribe to EntityDeleted and clean up after itself 2016-03-13 00:57:00 +01:00
stiffly 20d46f63c8 The main menu music would not start again when you returned to the main menu. 2016-03-13 00:16:55 +01:00
Jace f6113b9d9c EEntityDeleted now provides an EntityWrapper instead of just an ID 2016-03-13 00:16:07 +01:00
Teejoon 2e89227061 Merge remote-tracking branch 'origin/master' into MSAA 2016-03-13 00:09:07 +01:00
Teejoon 958850903a Moved ViewSpacePosition calculation from fragmenst shader to vertexshader 2016-03-13 00:08:49 +01:00
Jace 7ea90bede7 Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-12 23:49:44 +01:00
Jace 2bfbd72189 EntityWrapper::Clone should no longer cause freezes 2016-03-12 23:44:28 +01:00
Jace 1e7f6941ba Merge pull request #208 from teamfisk/Kill-streak-sounds
Various sound improvements/additions
2016-03-12 23:06:57 +01:00
Teejoon 5146d21173 MSAA is now working 2016-03-12 22:22:53 +01:00
William Moberg 8c90c39680 Merge pull request #209 from teamfisk/MemoryOptimization
Fixed texture freeing, memory usage way down.
2016-03-12 21:59:51 +01:00
Jocke b7d88808e2 Redid timers. 2016-03-12 21:38:46 +01:00
Jocke f8f536802f Time for ending the game is now in CapturePointGameMode component. The timer i counted down to 0 and then the map is "Reset". 2016-03-12 20:28:48 +01:00
William Moberg 91bad517d3 AbsolutePosition should be calculating correctly now, third time. 2016-03-12 19:59:37 +01:00
Jocke 60df30fa59 Scoreboard is now works. 2016-03-12 19:36:12 +01:00
viktorljung c0fc36845f Defender ability HUD fixed 2016-03-12 18:43:04 +01:00
viktorljung 51b8846b3a Ammo sharing done 2016-03-12 18:29:49 +01:00
Jace ba93ebbe88 Go away crap maps. 2016-03-12 18:21:36 +01:00
Teejoon 70b0ca8776 Merge remote-tracking branch 'origin/master' into MSAA 2016-03-12 18:04:26 +01:00
Teejoon 90d848e8d9 Made texture getters from draw finalpass from const 2016-03-12 18:04:10 +01:00
William Moberg a3b3351e55 Merge branch 'master' into Dirtybit
# Conflicts:
#	include/Engine/Rendering/ExplosionEffectJob.h
#	src/Game/Systems/ExplosionEffectSystem.cpp
2016-03-12 17:59:50 +01:00
Jace ce0d3b9fbe Fixed texture freeing. Destructor was never called because base destructors weren't virtual. 2016-03-12 17:53:34 +01:00
William Moberg 674604d0df Merge branch 'Dirtybit' of github.com:teamfisk/TacticalZ into Dirtybit 2016-03-12 17:51:55 +01:00
stiffly 8e9ddc7b9d playerJump is only done for local player. 2016-03-12 17:51:06 +01:00
William Moberg 36b84f7cc3 Fixed so calculating absolute positions, etc. works. Sets the field of all children to dirty if a transform field is altered. Will also set Position to dirty if Scale or Orientation is altered.
Moved some methods in ComponentWrapper to a .cpp.
2016-03-12 17:51:03 +01:00
Jocke c544f349fd The logic for removing the world is working but when we send the map again the clients memory usage goes crazy. 2016-03-12 17:49:50 +01:00
viktorljung dfc30f4693 Boost fixes? 2016-03-12 17:39:50 +01:00
viktorljung 944d10f4bb Some network fixes with sidearm 2016-03-12 17:34:32 +01:00
Tleety f7363eeea4 Boost icon fix 2016-03-12 17:30:28 +01:00
antc13 beee2db5fb Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-12 17:08:21 +01:00
antc13 1bc4b89a53 Added new models with textures to the map. Every model on the map should now be using a texture. 2016-03-12 17:08:07 +01:00
Tleety d51ea3cabd Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-12 17:04:00 +01:00
Tleety 548efeb11e EndScreen should now show when a team win 2016-03-12 17:03:50 +01:00
viktorljung 4ba011a098 Ammosharing over network test WIP 2016-03-12 17:01:46 +01:00
viktorljung 01cb3afb4b Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement
# Conflicts:
#	resources/Schema/Entities/PlayerAssaultBlue.xml
#	resources/Schema/Entities/PlayerDefenderBlue.xml
2016-03-12 15:48:41 +01:00
viktorljung 0b26f23188 3rd person animations idle bug fixed 2016-03-12 15:47:19 +01:00
Tleety 8c2a665ccb Some Entities for endscreen and some basic logic in the EndScreenSystem 2016-03-12 15:45:07 +01:00
stiffly cc10e5500b 2x jump now only plays for local player 2016-03-12 15:31:44 +01:00
Jace 068e151741 Merge pull request #173 from teamfisk/ExplosionEffectV2
Explosion effect v2
2016-03-12 15:25:12 +01:00
Jace e7a3793486 Merge pull request #207 from teamfisk/SomeTests
Resolution should now use a dropdown
2016-03-12 15:23:29 +01:00
stiffly 9bac141a6b WIP fixing pull request 2016-03-12 15:14:36 +01:00
Tleety 4334ea067e System skeleton 2016-03-12 14:44:03 +01:00
Tleety 8e266984f4 Player HUD should now be ok, color of health still shit tho 2016-03-12 14:37:26 +01:00
Jocke 0c1a2d3160 WIP 2016-03-12 14:31:15 +01:00
Jace eb5fcd6d19 Rendering back to normal 2016-03-12 14:28:17 +01:00
stiffly 9942747d41 WIP pull request fixes 2016-03-12 14:26:09 +01:00
Jace 24bb05ec67 Editor should now set dirty flag when component field changes 2016-03-12 05:17:56 +01:00
Jace df7b4faf24 Now caching resulting absolute model matrices as well 2016-03-12 04:10:14 +01:00
Jace 01db8e0615 Merge remote-tracking branch 'origin/master' into Dirtybit
# Conflicts:
#	src/Engine/Collision/CollisionSystem.cpp
#	src/Engine/Core/Transform.cpp
#	src/Engine/Editor/EditorSystem.cpp
#	src/Engine/Rendering/AnimationSystem.cpp
#	src/Engine/Rendering/BoneAttachmentSystem.cpp
#	src/Game/Systems/CapturePointSystem.cpp
#	src/Game/Systems/ExplosionEffectSystem.cpp
#	src/Game/Systems/PlayerMovementSystem.cpp
2016-03-12 04:09:53 +01:00
Jace 5baac926aa Perfectly working abs pos caching using dirty flags! :D 2016-03-12 03:29:41 +01:00
viktorljung 060585a388 Aim fixed for all weapons 2016-03-12 02:39:06 +01:00
Jace ee5c13d463 Merge branch 'Dirtybit-imon' into Dirtybit
# Conflicts:
#	src/Engine/Core/Transform.cpp
2016-03-12 01:32:09 +01:00
Jace 671079764e Merge branch 'Dirtybit' of github.com:teamfisk/TacticalZ into Dirtybit 2016-03-12 01:26:56 +01:00
Jace 9b98bbbea8 Fields are now set to dirty when they're changed! 2016-03-12 01:26:03 +01:00
Jace 80649ce51d Updated the ENTIRE CODEBASE TO MATCH 2016-03-12 00:38:33 +01:00
Jace a4b0b108d4 Created a wrapper for field types that is able to detect changes to set dirty flags in the future 2016-03-12 00:38:26 +01:00
viktorljung 2a209c5d8e AmmoSharing beta 2016-03-11 23:58:26 +01:00
stiffly 28d576bfc0 Now the bgm should loop again. 2016-03-11 21:04:33 +01:00
stiffly 66d0f9fa47 Added menu music 2016-03-11 20:28:09 +01:00
Tleety dc09ba9158 Resolution should now use a dropdown 2016-03-11 20:02:25 +01:00
viktorljung e0a6b09d36 Defender early alpha 2016-03-11 19:16:34 +01:00
Teejoon 1ad087dc75 MSAA mostly working. Only merging the MS render buffer to a single texture so that others could use the AA texture easly 2016-03-11 19:05:34 +01:00
stiffly 157a54e845 Merge remote-tracking branch 'origin/master' into Kill-streak-sounds 2016-03-11 18:19:22 +01:00
Tleety 7759af2c5a Log remove 2016-03-11 15:52:47 +01:00
antc13 ac096bbf77 Merge branch 'master' of https://github.com/teamfisk/TacticalZ
# Conflicts:
#	resources/Schema/Entities/CP_Rocky2.xml
2016-03-11 15:46:39 +01:00
antc13 81634578d9 Updated CP_Rocky2, added a point light to pickups and created 3 different versions of the Floating Crystals above Capture Points. 2016-03-11 15:43:20 +01:00
Tobias Dahl 2f61171d16 Merge pull request #185 from teamfisk/TextColor
Text that handles color, alpha and icon parsing
2016-03-11 15:25:06 +01:00
Tobias Dahl aa16a15693 Merge pull request #205 from teamfisk/Menu
Menu
2016-03-11 15:23:13 +01:00
FakeShemp 4df936ca70 imon's fix to rule them all
might have solved dt anormalities
2016-03-11 14:57:02 +01:00
viktorljung 266aca467e Merge remote-tracking branch 'origin/Weapons' into Movement
# Conflicts:
#	resources/Schema/Entities/MovementTest.xml
2016-03-11 11:25:43 +01:00
viktorljung cc127ad772 Updated defender blendtree 2016-03-10 21:31:19 +01:00
Jace 1992b6cde1 WIP Defender tracers 2016-03-10 21:15:27 +01:00
Jace c82be79bb8 Functionally working defender weapon 2016-03-10 19:26:14 +01:00
Jace 35a8d45fa4 Fixed skinned models not being able to be shielded 2016-03-10 19:20:21 +01:00
viktorljung 0d2e8c1cbe Merge branch 'master' into Movement 2016-03-10 16:31:45 +01:00
viktorljung b3ea26779a Added Unpickable component, which skips the entity in the PickingPass 2016-03-10 16:29:13 +01:00
viktorljung 59e487f9bb PlayerDefenderBlue Updated blendtree 2016-03-10 16:05:46 +01:00
FakeShemp 6c072aae45 Merge remote-tracking branch 'origin/master' into ExplosionEffectV2
# Conflicts:
#	resources/Schema/Components/ExplosionEffect.xml
#	resources/Shaders/ExplosionEffect.geom.glsl
#	src/Game/Systems/ExplosionEffectSystem.cpp
2016-03-10 11:49:51 +01:00
FakeShemp 68634126e5 Add moar optimization thingies and some xml clarifications 2016-03-10 11:43:11 +01:00
stiffly e444a86ec5 Merge remote-tracking branch 'origin/master' into Kill-streak-sounds 2016-03-10 10:36:20 +01:00
FakeShemp 981dc3467e Baggu fixed again
+Bonus document formatted
2016-03-09 22:11:17 +01:00
FakeShemp 42af029a26 fix baggu 2016-03-09 21:25:51 +01:00
FakeShemp 2e5dfc609a support headshot icons 2016-03-09 19:51:57 +01:00
FakeShemp ba6d2b758d Add killstreak icon 2016-03-09 12:34:09 +01:00
FakeShemp 12dd1d21de Text now handles color, alpha and icon parsing 2016-03-09 12:11:26 +01:00
stiffly e0de91cce3 WIP 2016-03-09 09:57:32 +01:00
Jace b7d93058b1 Added base work for dity bits in components 2016-03-08 21:11:59 +01:00
William Moberg ab2b28264f Caching absolute positions, etc. Has not been tested yet. 2016-03-08 18:10:36 +01:00
Jace 5d53fc74cb Merge branch 'Dirtybit' of github.com:teamfisk/TacticalZ into Dirtybit 2016-03-08 15:46:21 +01:00
Jace ecc8d998cf Added ComponentInfo::Field_t::Index 2016-03-08 15:46:14 +01:00
William Moberg e3c0fb2178 Added SetDirty function. 2016-03-08 15:44:02 +01:00
William Moberg 090bd806ce Added DirtyBit enum to Dirty getter in ComponentWrapper. 2016-03-08 15:39:16 +01:00
stiffly ec3ed1f46f Merge remote-tracking branch 'origin/master' into Kill-streak-sounds
# Conflicts:
#	include/Game/Systems/Weapon/DefenderWeaponBehaviour.h
2016-03-08 10:39:52 +01:00
FakeShemp ee99821164 Add reverse and scalar for ColorByDistance 2016-03-07 15:45:06 +01:00
FakeShemp 53ea5bd37d comment out currently unused thing 2016-03-07 14:15:17 +01:00
FakeShemp 243276707a Merge remote-tracking branch 'origin/master' into ExplosionEffectV2 2016-03-07 13:52:29 +01:00
stiffly 16124b7aa7 Crash fix 2016-03-04 03:31:51 +01:00
stiffly a7c57da2c9 WIP 2016-03-04 03:03:38 +01:00
stiffly 1227a795d7 WIP 2016-03-03 21:23:53 +01:00
stiffly 1cc92f4800 Merge remote-tracking branch 'origin/master' into Kill-streak-sounds 2016-03-03 20:25:43 +01:00
stiffly 3613d66d32 The EPlaySoundOnEntity event now has support to set the gain on the sound. It now also uses EntityWrapper instead of EntityID. 2016-03-03 20:24:48 +01:00
stiffly 20c6caa408 Merge remote-tracking branch 'origin/master' into Kill-streak-sounds
# Conflicts:
#	resources/DefaultConfig.ini
2016-03-03 17:32:04 +01:00
stiffly b7fac7103d More reasonable distance to hear sounds by other players. Modeified by rolloff factor. 2016-03-02 11:26:06 +01:00
FakeShemp 0cf92e99ff wip 2016-03-02 10:17:49 +01:00
FakeShemp 3ba73b8206 Pulsate system implemented. 2016-03-01 23:05:27 +01:00
stiffly d3ffb9768b Sets velocity to 0, does not make use of doppler effect atm 2016-03-01 14:48:07 +01:00
FakeShemp fcf5117952 Merge remote-tracking branch 'origin/master' into ExplosionEffectV2 2016-03-01 13:35:07 +01:00
stiffly 2c56b03b2b Merge remote-tracking branch 'origin/master' into Kill-streak-sounds 2016-02-29 16:41:46 +01:00
stiffly 4fd578c764 Removed logic that's no longer needed. 2016-02-29 16:26:09 +01:00
stiffly 67dffafe5a Drumloop will now play when a team is about to win 2016-02-26 16:44:08 +01:00
stiffly 7dbb9e452b Added a announcer volume channel. 2016-02-24 15:08:39 +01:00
stiffly cf3d1b5b00 Changed the default reference distance for emitters. Should be heard all over the map 2016-02-24 14:19:38 +01:00
stiffly 9783f9c650 Added an event to change the background music. 2016-02-24 14:18:42 +01:00
stiffly f72dea3852 Added a system that will handle BGM. Created specific logic for sounds to loop like Petter wants. 2016-02-24 11:51:06 +01:00
FakeShemp fb80d088e4 Redid many a thing for the sake of efficiency 2016-02-23 10:06:21 +01:00
250 changed files with 87162 additions and 36539 deletions
+1 -1
Submodule assets updated: 33455a9d10...9e9d799f11
+1 -1
Submodule deps updated: ed45883a44...49ef585366
+1 -1
View File
@@ -12,7 +12,7 @@
#include "../Core/AABB.h" #include "../Core/AABB.h"
#include "Rendering/RawModelCustom.h" #include "Rendering/RawModelCustom.h"
//#include "Rendering/RawModelAssimp.h" //#include "Rendering/RawModelAssimp.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "../Core/Entity.h" #include "../Core/Entity.h"
#include "../Core/EntityWrapper.h" #include "../Core/EntityWrapper.h"
#include "EntityAABB.h" #include "EntityAABB.h"
+12
View File
@@ -2,6 +2,7 @@
#define ComponentInfo_h__ #define ComponentInfo_h__
#include "../Common.h" #include "../Common.h"
#include "Entity.h"
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
struct ComponentInfo struct ComponentInfo
@@ -21,6 +22,7 @@ struct ComponentInfo
{ {
std::string Name; std::string Name;
std::string Type; std::string Type;
unsigned char Index;
unsigned int Offset; unsigned int Offset;
unsigned int Stride; unsigned int Stride;
}; };
@@ -32,6 +34,16 @@ struct ComponentInfo
unsigned int Stride = 0; unsigned int Stride = 0;
boost::shared_array<char> Defaults = nullptr; boost::shared_array<char> Defaults = nullptr;
std::shared_ptr<Meta_t> Meta = nullptr; std::shared_ptr<Meta_t> Meta = nullptr;
std::size_t GetHeaderSize() const
{
std::size_t size = 0;
// A component block starts with an entity ID
size += sizeof(EntityID);
return size;
}
}; };
template<> template<>
+13 -9
View File
@@ -5,16 +5,15 @@
#include "MemoryPool.h" #include "MemoryPool.h"
#include "ComponentInfo.h" #include "ComponentInfo.h"
#include "ComponentWrapper.h" #include "ComponentWrapper.h"
#include "DirtySet.h"
class ComponentPool;
class ComponentPoolForwardIterator class ComponentPoolForwardIterator
: public std::iterator<std::forward_iterator_tag, ComponentWrapper> : public std::iterator<std::forward_iterator_tag, ComponentWrapper>
{ {
public: public:
ComponentPoolForwardIterator(const ComponentInfo& componentInfo, const MemoryPool<char>::iterator begin, const MemoryPool<char>::iterator end) ComponentPoolForwardIterator(ComponentPool* pool, const MemoryPool<char>::iterator begin, const MemoryPool<char>::iterator end);
: m_ComponentInfo(componentInfo)
, m_MemoryPoolIterator(begin)
, m_MemoryPoolEnd(end)
{ }
ComponentPoolForwardIterator(const ComponentPoolForwardIterator& other) = default; ComponentPoolForwardIterator(const ComponentPoolForwardIterator& other) = default;
ComponentPoolForwardIterator(ComponentPoolForwardIterator&& other) = default; ComponentPoolForwardIterator(ComponentPoolForwardIterator&& other) = default;
@@ -27,6 +26,7 @@ public:
ComponentWrapper operator*() const; ComponentWrapper operator*() const;
private: private:
ComponentPool* m_ComponentPool;
const ComponentInfo& m_ComponentInfo; const ComponentInfo& m_ComponentInfo;
MemoryPool<char>::iterator m_MemoryPoolIterator; MemoryPool<char>::iterator m_MemoryPoolIterator;
const MemoryPool<char>::iterator m_MemoryPoolEnd; const MemoryPool<char>::iterator m_MemoryPoolEnd;
@@ -34,6 +34,7 @@ private:
class ComponentPool class ComponentPool
{ {
friend class ComponentPoolForwardIterator;
public: public:
typedef ComponentPoolForwardIterator iterator; typedef ComponentPoolForwardIterator iterator;
typedef ptrdiff_t difference_type; typedef ptrdiff_t difference_type;
@@ -42,9 +43,10 @@ public:
typedef ComponentWrapper* pointer; typedef ComponentWrapper* pointer;
typedef ComponentWrapper& reference; typedef ComponentWrapper& reference;
ComponentPool(const ::ComponentInfo& ci) ComponentPool(const ::ComponentInfo& ci, World* world)
: m_ComponentInfo(ci) : m_ComponentInfo(ci)
, m_Pool(ci.Meta->Allocation, sizeof(EntityID) + ci.Stride) , m_Pool(ci.Meta->Allocation, ci.GetHeaderSize() + ci.Stride)
, m_World(world)
{ } { }
~ComponentPool(); ~ComponentPool();
ComponentPool(const ComponentPool& other); ComponentPool(const ComponentPool& other);
@@ -61,8 +63,8 @@ public:
// Delete a component and free its memory // Delete a component and free its memory
void Delete(ComponentWrapper& wrapper); void Delete(ComponentWrapper& wrapper);
iterator begin() const; iterator begin();
iterator end() const; iterator end();
size_t size() const; size_t size() const;
//Dumps information about what the pool memory looks like right now //Dumps information about what the pool memory looks like right now
@@ -80,6 +82,8 @@ private:
::ComponentInfo m_ComponentInfo; ::ComponentInfo m_ComponentInfo;
MemoryPool<char> m_Pool; MemoryPool<char> m_Pool;
std::unordered_map<EntityID, char*> m_EntityToComponent; std::unordered_map<EntityID, char*> m_EntityToComponent;
DirtySet m_DirtySet;
World* m_World;
}; };
#endif #endif
+155 -44
View File
@@ -4,46 +4,32 @@
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
#include <boost/any.hpp> #include <boost/any.hpp>
#include "../Common.h" #include "../Common.h"
#include "../GLM.h"
#include "Entity.h" #include "Entity.h"
#include "ComponentInfo.h" #include "ComponentInfo.h"
#include "DirtySet.h"
#include "Util/Any.h" #include "Util/Any.h"
template <typename T, typename Enable = void> class World;
struct ComponentField { };
template <typename T>
struct ComponentField<T, typename std::enable_if<std::is_trivially_copyable<T>::value>::type>
{
static T& Get(const ComponentInfo::Field_t& info, char* data) { return *reinterpret_cast<T*>(data); }
static void Set(const ComponentInfo::Field_t& info, char* data, const T& value) { Get(data) = value; }
};
template <>
struct ComponentField<std::string, void>
{
static std::string& Get(const ComponentInfo::Field_t& info, char* data) { return **reinterpret_cast<std::string**>(data); }
static void Set(const ComponentInfo::Field_t& info, char* data, const std::string& value) { Get(info, data) = value; }
};
struct ComponentWrapper struct ComponentWrapper
{ {
ComponentWrapper(const ComponentInfo& componentInfo, char* data) ComponentWrapper(const ComponentInfo& componentInfo, char* data, ::DirtyBitField* dirtyBitField, World* world);
: Info(componentInfo)
, EntityID(*reinterpret_cast<::EntityID*>(data))
, Data(data + sizeof(::EntityID))
{ }
World* m_World;
const ComponentInfo& Info; const ComponentInfo& Info;
const ::EntityID EntityID; const ::EntityID EntityID;
char* Data; char* Data;
::DirtyBitField* DirtyBitField = nullptr;
ComponentInfo::EnumType Enum(const char* fieldName, const char* enumKey) ComponentInfo::EnumType Enum(const char* fieldName, const char* enumKey);
{
return Info.Meta->FieldEnumDefinitions.at(fieldName).at(enumKey); bool Dirty(DirtySetType type, const std::string& fieldName);
} void SetDirty(DirtySetType type, const std::string& fieldName, bool dirty = true);
void SetAllDirty(const std::string& fieldName, bool dirty = true);
template <typename T> template <typename T>
T& Field(std::string name) T& Field(const std::string& name)
{ {
const ComponentInfo::Field_t& field = Info.Fields.at(name); const ComponentInfo::Field_t& field = Info.Fields.at(name);
if (sizeof(T) > field.Stride) { if (sizeof(T) > field.Stride) {
@@ -55,13 +41,15 @@ struct ComponentWrapper
} }
template <typename T> template <typename T>
void SetField(std::string name, const T value) { Field<T>(name) = value; } void SetField(const std::string& name, const T& value)
//template <typename T> {
//void SetField(std::string name, T& value) { Field<T>(name) = value; } Field<T>(name) = value;
SetAllDirty(name);
}
// Specialization for string literals // Specialization for string literals
template <std::size_t N> template <std::size_t N>
void SetField(std::string name, const char(&value)[N]) { Field<std::string>(name) = std::string(value); } void SetField(const std::string& name, const char(&value)[N]) { SetField(name, std::string(value)); }
void Copy(ComponentWrapper& destination) void Copy(ComponentWrapper& destination)
{ {
@@ -95,40 +83,163 @@ struct ComponentWrapper
struct SubscriptProxy struct SubscriptProxy
{ {
friend struct ComponentWrapper; friend struct ComponentWrapper;
private:
SubscriptProxy(ComponentWrapper* component, std::string propertyName) public:
SubscriptProxy(ComponentWrapper* component, std::string fieldName)
: m_Component(component) : m_Component(component)
, m_PropertyName(propertyName) , m_FieldName(fieldName)
{ } { }
ComponentWrapper* m_Component; ComponentWrapper* m_Component;
std::string m_PropertyName; std::string m_FieldName;
public: public:
// Return the integer value of an enum type key for this field // Return the integer value of an enum type key for this field
ComponentInfo::EnumType Enum(const char* enumKey) { return m_Component->Enum(m_PropertyName.c_str(), enumKey); } ComponentInfo::EnumType Enum(const char* enumKey) { return m_Component->Enum(m_FieldName.c_str(), enumKey); }
bool Dirty(DirtySetType type) { return m_Component->Dirty(type, m_FieldName); }
void SetDirty(DirtySetType type, bool dirty = true) { m_Component->SetDirty(type, m_FieldName, dirty); }
void SetAllDirty(bool dirty = true) { m_Component->SetAllDirty(m_FieldName, dirty); }
template <typename T> operator const double&() { return m_Component->Field<double>(m_FieldName); }
operator T&() { return m_Component->Field<T>(m_PropertyName); } operator const float&() { return m_Component->Field<float>(m_FieldName); }
operator const int&() { return m_Component->Field<int>(m_FieldName); }
operator const glm::vec3&() { return m_Component->Field<glm::vec3>(m_FieldName); }
operator const glm::vec4&() { return m_Component->Field<glm::vec4>(m_FieldName); }
operator const glm::quat&() { return m_Component->Field<glm::quat>(m_FieldName); }
operator const bool&() { return m_Component->Field<bool>(m_FieldName); }
operator const std::string&() { return m_Component->Field<std::string>(m_FieldName); }
// Don't allow non-const references
// If this wasn't deleted, the above overloads would still get called for some reason...
template <
typename T,
typename = typename std::enable_if<!std::is_base_of<::FIELDLOL, T>::value>::type
>
//operator T&() = delete;
operator T&() { static_assert(constexpr(false), "https://github.com/teamfisk/TacticalZ/pull/212"); }
// Value assignment
template <typename T> template <typename T>
void operator=(const T val) { m_Component->SetField<T>(m_PropertyName, val); } void operator=(const T& val) { m_Component->SetField<T>(m_FieldName, val); }
// TODO: Pass by reference and rvalue (universal reference?)
//template <typename T>
//void operator=(T& val) { m_Component->SetField<T>(m_PropertyName, val); }
// Specialization for string literals // Specialization for string literals
template <std::size_t N> template <std::size_t N>
void operator=(const char(&val)[N]) { m_Component->SetField<N>(m_PropertyName, val); } void operator=(const char(&val)[N]) { m_Component->SetField<N>(m_FieldName, val); }
}; };
SubscriptProxy operator[](std::string propertyName) { return SubscriptProxy(this, propertyName); } SubscriptProxy operator[](const std::string& propertyName) { return SubscriptProxy(this, propertyName); }
}; };
struct FIELDLOL { }; // lol
template <typename T>
struct FieldBase : FIELDLOL
{
FieldBase(ComponentWrapper::SubscriptProxy& Proxy)
: Proxy(Proxy)
, Data(Proxy.m_Component->Field<T>(Proxy.m_FieldName))
{ }
void SetAllDirty() { Proxy.SetAllDirty(); }
FieldBase& operator=(const FieldBase& rhs) { Data = rhs.Data; SetAllDirty(); return *this; }
FieldBase& operator=(const T& rhs) { Data = rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator+=(const T2& rhs) { Data += rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator-=(const T2& rhs) { Data -= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator*=(const T2& rhs) { Data *= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator/=(const T2& rhs) { Data /= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator%=(const T2& rhs) { Data %= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator&=(const T2& rhs) { Data &= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator|=(const T2& rhs) { Data |= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator^=(const T2& rhs) { Data ^= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator<<=(const T2& rhs) { Data <<= rhs; SetAllDirty(); return *this; }
template <typename T2> FieldBase& operator>>=(const T2& rhs) { Data >>= rhs; SetAllDirty(); return *this; }
T operator+() const { return +Data; }
T operator-() const { return -Data; }
T operator~() const { return ~Data; }
FieldBase& operator++() { Data++; SetAllDirty(); return *this; }
T operator++(int) { T tmp = Data; operator++(); return tmp; }
FieldBase& operator--() { Data--; SetAllDirty(); return *this; }
T operator--(int) { T tmp = Data; operator--(); return tmp; }
operator const T&() const { return Data; }
const T& operator*() const { return operator const T&(); }
protected:
ComponentWrapper::SubscriptProxy Proxy;
T& Data;
};
template <typename T>
struct Field : FieldBase<T>
{
using FieldBase<T>::FieldBase;
using FieldBase<T>::operator=;
};
template <>
struct Field<glm::vec3> : FieldBase<glm::vec3>
{
using FieldBase<glm::vec3>::FieldBase;
using FieldBase<glm::vec3>::operator=;
glm::vec3::value_type x() const { return Data.x; }
void x(glm::vec3::value_type val) { Data.x = val; SetAllDirty(); }
glm::vec3::value_type y() const { return Data.y; }
void y(glm::vec3::value_type val) { Data.y = val; SetAllDirty(); }
glm::vec3::value_type z() const { return Data.z; }
void z(glm::vec3::value_type val) { Data.z = val; SetAllDirty(); }
template <typename T> friend glm::vec3 operator+(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) + glm::vec3(rhs); }
template <typename T> friend glm::vec3 operator-(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) - glm::vec3(rhs); }
template <typename T> friend glm::vec3 operator*(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) * glm::vec3(rhs); }
template <typename T> friend glm::vec3 operator/(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) / glm::vec3(rhs); }
template <typename T> friend glm::vec3 operator+(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) + static_cast<glm::vec3>(rhs); }
template <typename T> friend glm::vec3 operator-(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) - static_cast<glm::vec3>(rhs); }
template <typename T> friend glm::vec3 operator*(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) * static_cast<glm::vec3>(rhs); }
template <typename T> friend glm::vec3 operator/(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) / static_cast<glm::vec3>(rhs); }
friend glm::vec3& operator+=(glm::vec3& lhs, const Field<glm::vec3>& rhs) { lhs += *rhs; return lhs; }
};
template <>
struct Field<glm::vec4> : FieldBase<glm::vec4>
{
//Field(glm::vec4& Data)
// : FieldBase(Data)
//{ }
using FieldBase<glm::vec4>::FieldBase;
using FieldBase<glm::vec4>::operator=;
glm::vec4::value_type x() const { return Data.x; }
void x(glm::vec4::value_type val) { Data.x = val; SetAllDirty(); }
glm::vec4::value_type y() const { return Data.y; }
void y(glm::vec4::value_type val) { Data.y = val; SetAllDirty(); }
glm::vec4::value_type z() const { return Data.z; }
void z(glm::vec4::value_type val) { Data.z = val; SetAllDirty(); }
glm::vec4::value_type w() const { return Data.w; }
void w(glm::vec4::value_type val) { Data.w = val; SetAllDirty(); }
template <typename T> friend glm::vec4 operator+(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) + glm::vec4(rhs); }
template <typename T> friend glm::vec4 operator-(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) - glm::vec4(rhs); }
template <typename T> friend glm::vec4 operator*(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) * glm::vec4(rhs); }
template <typename T> friend glm::vec4 operator/(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) / glm::vec4(rhs); }
template <typename T> friend glm::vec4 operator+(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) + static_cast<glm::vec4>(rhs); }
template <typename T> friend glm::vec4 operator-(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) - static_cast<glm::vec4>(rhs); }
template <typename T> friend glm::vec4 operator*(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) * static_cast<glm::vec4>(rhs); }
template <typename T> friend glm::vec4 operator/(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) / static_cast<glm::vec4>(rhs); }
friend glm::vec4& operator+=(glm::vec4& lhs, const Field<glm::vec4>& rhs) { lhs += *rhs; return lhs; }
};
// A component wrapper that "owns" its data through a shared pointer // A component wrapper that "owns" its data through a shared pointer
struct SharedComponentWrapper : ComponentWrapper struct SharedComponentWrapper : ComponentWrapper
{ {
SharedComponentWrapper(const ComponentInfo& componentInfo, boost::shared_array<char> data) SharedComponentWrapper(const ComponentInfo& componentInfo, boost::shared_array<char> data)
: ComponentWrapper(componentInfo, data.get()) : ComponentWrapper(componentInfo, data.get(), nullptr, nullptr)
, m_DataReference(data) , m_DataReference(data)
{ } { }
+16
View File
@@ -0,0 +1,16 @@
#ifndef DirtySet_h__
#define DirtySet_h__
#include <set>
#include "ComponentInfo.h"
enum class DirtySetType
{
Transform,
Network
};
typedef std::unordered_map<DirtySetType, std::set<decltype(ComponentInfo::Field_t::Index)>> DirtyBitField;
typedef std::unordered_map<EntityID, DirtyBitField> DirtySet;
#endif
+2 -2
View File
@@ -1,5 +1,5 @@
#ifndef ECaptured_h__ #ifndef Events_Captured_h__
#define ECaptured_h__ #define Events_Captured_h__
#include "EventBroker.h" #include "EventBroker.h"
#include "../Core/Entity.h" #include "../Core/Entity.h"
+2 -2
View File
@@ -2,14 +2,14 @@
#define EEntityDeleted_h__ #define EEntityDeleted_h__
#include "Event.h" #include "Event.h"
#include "Entity.h" #include "EntityWrapper.h"
namespace Events namespace Events
{ {
struct EntityDeleted : Event struct EntityDeleted : Event
{ {
EntityID DeletedEntity; EntityWrapper DeletedEntity;
// True if the entity deletion was triggered because the entity's parent was deleted before it // True if the entity deletion was triggered because the entity's parent was deleted before it
bool Cascaded; bool Cascaded;
}; };
+2 -1
View File
@@ -45,8 +45,9 @@ struct EntityWrapper
private: private:
EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent); EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent);
EntityWrapper cloneRecursive(EntityWrapper entity, EntityWrapper parent);
void childrenWithComponentRecursive(const std::string& componentType, EntityWrapper& entity, std::vector<EntityWrapper>& childrenWithComponent); void childrenWithComponentRecursive(const std::string& componentType, EntityWrapper& entity, std::vector<EntityWrapper>& childrenWithComponent);
static void fillRelationships(std::unordered_multimap<EntityWrapper, EntityWrapper>& relationMap, EntityWrapper entity);
static void recreateRelationships(const std::unordered_multimap<EntityWrapper, EntityWrapper>& relationMap, EntityWrapper templateEntity, EntityWrapper parent = EntityWrapper::Invalid);
}; };
namespace std namespace std
+5
View File
@@ -2,8 +2,11 @@
#define PerformanceTimer_h__ #define PerformanceTimer_h__
#include "../Common.h" #include "../Common.h"
#ifdef DEBUG
#include <boost/timer/timer.hpp> #include <boost/timer/timer.hpp>
using boost::timer::cpu_timer; using boost::timer::cpu_timer;
#endif //DEBUG
class PerformanceTimer class PerformanceTimer
{ {
@@ -17,9 +20,11 @@ public:
static void CreateExcelData(); static void CreateExcelData();
private: private:
#ifdef DEBUG
static std::map<std::string, cpu_timer> timers; static std::map<std::string, cpu_timer> timers;
static cpu_timer m_Timer; static cpu_timer m_Timer;
static std::string currentTimerRunning; static std::string currentTimerRunning;
#endif //DEBUG
}; };
#endif #endif
+1
View File
@@ -19,6 +19,7 @@ class Resource
protected: protected:
Resource() { } Resource() { }
virtual ~Resource() = default;
public: public:
//Should be thrown in a Resource's constructor if it cannot complete because another resource is still loading. //Should be thrown in a Resource's constructor if it cannot complete because another resource is still loading.
+1 -1
View File
@@ -68,7 +68,7 @@ protected:
const std::string m_ComponentType; const std::string m_ComponentType;
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) = 0; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFade, double dt) = 0;
}; };
class ImpureSystem : public virtual System class ImpureSystem : public virtual System
+1 -1
View File
@@ -81,7 +81,7 @@ public:
for (auto& pair : group.PureSystems) { for (auto& pair : group.PureSystems) {
const std::string& componentName = pair.first; const std::string& componentName = pair.first;
auto& systems = pair.second; auto& systems = pair.second;
const ComponentPool* pool = m_World->GetComponents(componentName); ComponentPool* pool = m_World->GetComponents(componentName);
if (pool == nullptr) { if (pool == nullptr) {
continue; continue;
} }
-25
View File
@@ -1,25 +0,0 @@
#ifndef Transform_h__
#define Transform_h__
#include "../GLM.h"
#include "World.h"
#include "EntityWrapper.h"
namespace Transform
{
glm::mat4 AbsoluteTransformation(EntityWrapper entity);
glm::vec3 AbsolutePosition(EntityWrapper entity);
glm::vec3 AbsolutePosition(World* world, EntityID entity);
glm::vec3 AbsoluteOrientationEuler(EntityWrapper entity);
glm::quat AbsoluteOrientation(EntityWrapper entity);
glm::quat AbsoluteOrientation(World* world, EntityID entity);
glm::vec3 AbsoluteScale(EntityWrapper entity);
glm::vec3 AbsoluteScale(World* world, EntityID entity);
glm::mat4 ModelMatrix(EntityWrapper entity);
glm::mat4 ModelMatrix(EntityID entity, World* world);
glm::vec3 TransformPoint(const glm::vec3& point, const glm::mat4& matrix);
}
#endif
+39
View File
@@ -0,0 +1,39 @@
#ifndef Transform_h__
#define Transform_h__
#include "../GLM.h"
#include "System.h"
#include "EEntityDeleted.h"
class TransformSystem : public System
{
public:
TransformSystem(SystemParams params);
//glm::mat4 AbsoluteTransformation(EntityWrapper entity);
static glm::vec3 AbsolutePosition(EntityWrapper entity);
static glm::vec3 AbsolutePosition(World* world, EntityID entity);
static glm::vec3 AbsoluteOrientationEuler(EntityWrapper entity);
static glm::quat AbsoluteOrientation(EntityWrapper entity);
static glm::quat AbsoluteOrientation(World* world, EntityID entity);
static glm::vec3 AbsoluteScale(EntityWrapper entity);
static glm::vec3 AbsoluteScale(World* world, EntityID entity);
static glm::mat4 ModelMatrix(EntityWrapper entity);
static glm::mat4 ModelMatrix(EntityID entity, World* world);
static glm::vec3 TransformPoint(const glm::vec3& point, const glm::mat4& matrix);
static int RecalculatedPositions;
static int RecalculatedOrientations;
static int RecalculatedScales;
private:
static std::unordered_map<EntityWrapper, glm::vec3> PositionCache;
static std::unordered_map<EntityWrapper, glm::quat> OrientationCache;
static std::unordered_map<EntityWrapper, glm::vec3> ScaleCache;
static std::unordered_map<EntityWrapper, glm::mat4> MatrixCache;
EventRelay<TransformSystem, Events::EntityDeleted> m_EEntityDeleted;
bool OnEntityDeleted(const Events::EntityDeleted& e);
};
#endif
+1 -1
View File
@@ -35,7 +35,7 @@ public:
// Delete a component off an entity // Delete a component off an entity
void DeleteComponent(EntityID entity, const std::string& componentType); void DeleteComponent(EntityID entity, const std::string& componentType);
// Get all components of the specified type // Get all components of the specified type
const ComponentPool* GetComponents(const std::string& componentType); ComponentPool* GetComponents(const std::string& componentType);
// Get entity parent // Get entity parent
EntityID GetParent(EntityID entity); EntityID GetParent(EntityID entity);
// Change the parent of an entity // Change the parent of an entity
+1
View File
@@ -43,6 +43,7 @@ private:
EditorGUI::WidgetSpace m_WidgetSpace = EditorGUI::WidgetSpace::Global; EditorGUI::WidgetSpace m_WidgetSpace = EditorGUI::WidgetSpace::Global;
EntityWrapper m_Widget = EntityWrapper::Invalid; EntityWrapper m_Widget = EntityWrapper::Invalid;
EntityWrapper m_CurrentSelection = EntityWrapper::Invalid; EntityWrapper m_CurrentSelection = EntityWrapper::Invalid;
glm::vec3 m_CamVelocity;
// Utility functions // Utility functions
EntityWrapper importEntity(EntityWrapper parent, boost::filesystem::path filePath); EntityWrapper importEntity(EntityWrapper parent, boost::filesystem::path filePath);
@@ -30,7 +30,7 @@ public:
virtual bool OnCommand(const Events::InputCommand& e) override; virtual bool OnCommand(const Events::InputCommand& e) override;
virtual void Reset(); virtual void Reset();
void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID); void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, Field<double> assaultDashCoolDownTimer, EntityID playerID);
virtual bool AssaultDashDoubleTapped() const { return m_AssaultDashDoubleTapped; } virtual bool AssaultDashDoubleTapped() const { return m_AssaultDashDoubleTapped; }
virtual bool PlayerIsDashing() const { return m_PlayerIsDashing; } virtual bool PlayerIsDashing() const { return m_PlayerIsDashing; }
bool SpecialAbilityKeyDown() const { return m_SpecialAbilityKeyDown; } bool SpecialAbilityKeyDown() const { return m_SpecialAbilityKeyDown; }
@@ -166,6 +166,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1; aeb.Duration = 0.1;
aeb.NodeName = "Run"; aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel; aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true; aeb.Start = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
@@ -175,6 +176,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1; aeb.Duration = 0.1;
aeb.NodeName = "Run"; aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel; aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true; aeb.Start = true;
aeb.Reverse = true; aeb.Reverse = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
@@ -210,14 +212,40 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
} }
EntityWrapper firstPersonModel = m_PlayerEntity.FirstChildByName("Hands");
if (firstPersonModel.Valid()) {
if (val > 0) { // Walk/Run
if (!m_Crouching) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
} else if (val < 0) { // Walk/run Backwards
if (!m_Crouching) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
aeb.Reverse = true;
m_EventBroker->Publish(aeb);
}
}
}
} }
} }
} }
//Animation
if (glm::length2(m_Movement) < 0.25f) {
//Blend to Idle
if (m_PlayerEntity.Valid()) { if (m_PlayerEntity.Valid()) {
glm::vec2 movementXZ = glm::vec2(m_Movement.x, m_Movement.z);
if (glm::length(movementXZ) < 0.1f) {
//Blend to Idle
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) { if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb; Events::AutoAnimationBlend aeb;
@@ -236,10 +264,8 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Start = true; aeb.Start = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
}
} else { } else {
//Blend to movement //Blend to movement
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) { if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb; Events::AutoAnimationBlend aeb;
@@ -251,8 +277,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
} }
} }
if (glm::length(m_Movement) > 0) {
if (glm::length2(m_Movement) > 0) {
m_Movement = glm::normalize(m_Movement); m_Movement = glm::normalize(m_Movement);
//Animation //Animation
@@ -358,7 +383,7 @@ bool FirstPersonInputController<EventContext>::OnLockMouse(const Events::LockMou
} }
template <typename EventContext> template <typename EventContext>
void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID) { void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, Field<double> assaultDashCoolDownTimer, EntityID playerID) {
m_AssaultDashDoubleTapDeltaTime += dt; m_AssaultDashDoubleTapDeltaTime += dt;
assaultDashCoolDownTimer -= dt; assaultDashCoolDownTimer -= dt;
//cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work) //cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work)
+30 -22
View File
@@ -10,28 +10,34 @@
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
#include "Network/EKillDeath.h"
#include "Core/World.h"
#include "Core/EntityFile.h"
#include "Core/EventBroker.h"
#include "Core/ConfigFile.h"
#include "Core/EPlayerDeath.h"
#include "Core/EPlayerDamage.h"
#include "Core/EPlayerSpawned.h"
#include "Core/EAmmoPickup.h"
#include "Game/Events/EDoubleJump.h"
#include "Game/Events/EDashAbility.h"
#include "Game/Events/EReset.h"
#include "Input/EInputCommand.h"
#include "imgui/imgui.h"
#include "Network/Network.h" #include "Network/Network.h"
#include "Network/MessageType.h" #include "Network/MessageType.h"
#include "Network/PlayerDefinition.h" #include "Network/PlayerDefinition.h"
#include "Network/UDPClient.h" #include "Network/UDPClient.h"
#include "Network/TCPClient.h" #include "Network/TCPClient.h"
#include "Network/SnapshotDefinitions.h" #include "Network/SnapshotDefinitions.h"
#include "Core/World.h"
#include "Core/EntityFile.h"
#include "Core/EventBroker.h"
#include "Core/ConfigFile.h"
#include "Core/EPlayerDeath.h"
#include "Input/EInputCommand.h"
#include "Core/EPlayerDamage.h"
#include "../Game/Events/EDoubleJump.h"
#include "Network/EInterpolate.h"
#include "Network/SnapshotFilter.h"
#include "Core/EPlayerSpawned.h"
#include "Core/EAmmoPickup.h"
#include "Network/ESearchForServers.h"
#include "../Game/Events/EDashAbility.h"
#include "Network/EDisplayServerlist.h" #include "Network/EDisplayServerlist.h"
#include "Network/EConnectRequest.h" #include "Network/EConnectRequest.h"
#include "Network/EPlayerDisconnected.h"
#include "Network/ESearchForServers.h"
#include "Network/EInterpolate.h"
#include "Network/SnapshotFilter.h"
#include "Core/EWin.h"
class Client : public Network class Client : public Network
{ {
public: public:
@@ -40,7 +46,7 @@ public:
~Client(); ~Client();
void Connect(std::string address, int port); void Connect(std::string address, int port);
void Update() override; void Update(double dt) override;
private: private:
UDPClient m_Unreliable; UDPClient m_Unreliable;
TCPClient m_Reliable; TCPClient m_Reliable;
@@ -74,10 +80,10 @@ private:
// Network logic // Network logic
PlayerDefinition m_PlayerDefinitions[8]; PlayerDefinition m_PlayerDefinitions[8];
SnapshotDefinitions m_NextSnapshot; SnapshotDefinitions m_NextSnapshot;
double m_DurationOfPingTime; double m_DurationOfPingTime = 0;
std::clock_t m_StartPingTime; double m_StartPingTime = 0;
std::clock_t m_TimeSinceSentInputs; double m_TimeSinceSentInputs = 0;
unsigned int m_SendInputIntervalMs; double m_SendInputInterval = 0.033;
std::vector<Events::InputCommand> m_InputCommandBuffer; std::vector<Events::InputCommand> m_InputCommandBuffer;
// Private member functions // Private member functions
@@ -100,6 +106,9 @@ private:
void parseDoubleJump(Packet& packet); void parseDoubleJump(Packet& packet);
void parseDashEffect(Packet& packet); void parseDashEffect(Packet& packet);
void parseAmmoPickup(Packet& packet); void parseAmmoPickup(Packet& packet);
void parseRemoveWorld(Packet& packet);
void parseKDEvent(Packet& packet);
void parseWin(Packet& packet);
void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType); void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
void parseSnapshot(Packet& packet); void parseSnapshot(Packet& packet);
void identifyPacketLoss(); void identifyPacketLoss();
@@ -109,7 +118,6 @@ private:
void sendLocalPlayerTransform(); void sendLocalPlayerTransform();
void becomePlayer(); void becomePlayer();
void displayServerlist(); void displayServerlist();
void removeWorld();
void createMainMenu(); void createMainMenu();
// Mapping Logic // Mapping Logic
// Returns if local EntityID exist in map // Returns if local EntityID exist in map
@@ -138,8 +146,8 @@ private:
UDPClient m_ServerlistRequest; UDPClient m_ServerlistRequest;
std::vector<ServerInfo> m_Serverlist; std::vector<ServerInfo> m_Serverlist;
bool m_SearchingForServers = false; bool m_SearchingForServers = false;
std::clock_t m_StartSearchTime; double m_TimeSearched = 0;
double m_SearchingTime = 200; // Config I guess double m_SearchingTime = 0.2; // Config I guess
}; };
#endif #endif
+11
View File
@@ -10,8 +10,19 @@ namespace Events
struct KillDeath : public Event struct KillDeath : public Event
{ {
int CasualtyTeam;
PlayerID Casualty = -1; PlayerID Casualty = -1;
std::string CasualtyName;
//1 = assault, 2 = defender, 3 = sniper
int CasualtyClass;
int KillerTeam;
PlayerID Killer = -1; PlayerID Killer = -1;
std::string KillerName;
//1 = assault, 2 = defender, 3 = sniper
int KillerClass;
}; };
} }
+3
View File
@@ -23,6 +23,9 @@ enum class MessageType
OnDashEffect, OnDashEffect,
ServerlistRequest, ServerlistRequest,
AmmoPickup, AmmoPickup,
RemoveWorld,
KD,
Win,
Invalid Invalid
}; };
+2 -1
View File
@@ -22,7 +22,7 @@ public:
Network(World* world, EventBroker* eventBroker); Network(World* world, EventBroker* eventBroker);
virtual ~Network() { }; virtual ~Network() { };
virtual void Update() = 0; virtual void Update(double dt) = 0;
protected: protected:
World* m_World; World* m_World;
@@ -40,6 +40,7 @@ protected:
void saveToFile(); void saveToFile();
void updateNetworkData(); void updateNetworkData();
void popNetworkSegmentOfHeader(Packet& packet); void popNetworkSegmentOfHeader(Packet& packet);
void removeWorld();
}; };
#endif #endif
+16 -8
View File
@@ -11,6 +11,7 @@
#include "Network/MessageType.h" #include "Network/MessageType.h"
#include "Network/PlayerDefinition.h" #include "Network/PlayerDefinition.h"
#include "Core/World.h" #include "Core/World.h"
#include "Core/EntityFile.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "../Network/Network.h" #include "../Network/Network.h"
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
@@ -24,6 +25,8 @@
#include "Core/EPlayerDeath.h" #include "Core/EPlayerDeath.h"
#include "Network/EPlayerConnected.h" #include "Network/EPlayerConnected.h"
#include "Network/EKillDeath.h" #include "Network/EKillDeath.h"
#include "Core/EWin.h"
#include "Game/Events/EReset.h"
class Server : public Network class Server : public Network
{ {
@@ -31,7 +34,7 @@ public:
Server(World* world, EventBroker* eventBroker, int port); Server(World* world, EventBroker* eventBroker, int port);
~Server(); ~Server();
void Update() override; void Update(double dt) override;
private: private:
// Network channels // Network channels
@@ -41,6 +44,7 @@ private:
// dont forget to set these in the childrens receive logic // dont forget to set these in the childrens receive logic
boost::asio::ip::address m_Address; boost::asio::ip::address m_Address;
int m_Port = 27666; int m_Port = 27666;
bool m_GameIsOver = false;
// Sending messages to client logic // Sending messages to client logic
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers; std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
std::vector<PlayerID> m_PlayersToDisconnect; std::vector<PlayerID> m_PlayersToDisconnect;
@@ -48,14 +52,14 @@ private:
char readBuffer[BUFFERSIZE] = { 0 }; char readBuffer[BUFFERSIZE] = { 0 };
size_t bytesRead = 0; size_t bytesRead = 0;
// time for previouse message // time for previouse message
std::clock_t previousePingMessage = std::clock(); double previousPingMessage = 0;
std::clock_t previousSnapshotMessage = std::clock(); double previousSnapshotMessage = 0;
std::clock_t timOutTimer = std::clock(); double timeOutTimer = 0;
// How often we send messages (milliseconds) // How often we send messages (seconds)
float pingIntervalMs; double pingInterval = 1;
float snapshotInterval; double snapshotInterval = 0.05;
int checkTimeOutInterval = 100; double checkTimeOutInterval = 0.1;
int m_NextPlayerID = 0; int m_NextPlayerID = 0;
std::vector<Events::InputCommand> m_InputCommandsToBroadcast; std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
//Timers //Timers
@@ -71,6 +75,7 @@ private:
void reliableBroadcast(Packet& packet); void reliableBroadcast(Packet& packet);
void unreliableBroadcast(Packet& packet); void unreliableBroadcast(Packet& packet);
void sendSnapshot(); void sendSnapshot();
void createWorldSnapshot(Packet& packet);
void addPlayersToPacket(Packet& packet, EntityID entityID); void addPlayersToPacket(Packet& packet, EntityID entityID);
void addChildrenToPacket(Packet& packet, EntityID entityID); void addChildrenToPacket(Packet& packet, EntityID entityID);
void addInputCommandsToPacket(Packet& packet); void addInputCommandsToPacket(Packet& packet);
@@ -83,6 +88,7 @@ private:
void kick(PlayerID player); void kick(PlayerID player);
PlayerID getPlayerIDFromEndpoint(); PlayerID getPlayerIDFromEndpoint();
PlayerID getPlayerIDFromEntityID(EntityID entityID); PlayerID getPlayerIDFromEntityID(EntityID entityID);
void resetMap();
void parsePlayerTransform(Packet& packet); void parsePlayerTransform(Packet& packet);
void parseOnInputCommand(Packet& packet); void parseOnInputCommand(Packet& packet);
void parseClientPing(); void parseClientPing();
@@ -110,6 +116,8 @@ private:
bool OnAmmoPickup(const Events::AmmoPickup& e); bool OnAmmoPickup(const Events::AmmoPickup& e);
EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath; EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath;
bool OnPlayerDeath(const Events::PlayerDeath& e); bool OnPlayerDeath(const Events::PlayerDeath& e);
EventRelay<Server, Events::Win> m_EWin;
bool OnWin(const Events::Win& e);
}; };
#endif #endif
@@ -16,6 +16,7 @@
#include "../Core/EEntityDeleted.h" #include "../Core/EEntityDeleted.h"
#include "Rendering/ESetBlendWeight.h" #include "Rendering/ESetBlendWeight.h"
#include "imgui/imgui.h" #include "imgui/imgui.h"
#include "Input/EInputCommand.h"
class AnimationSystem : public ImpureSystem class AnimationSystem : public ImpureSystem
{ {
@@ -37,7 +38,13 @@ private:
EventRelay<AnimationSystem, Events::SetBlendWeight> m_ESetBlendWeight; EventRelay<AnimationSystem, Events::SetBlendWeight> m_ESetBlendWeight;
bool OnSetBlendWeight(Events::SetBlendWeight& e); bool OnSetBlendWeight(Events::SetBlendWeight& e);
EventRelay<AnimationSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(Events::InputCommand& e);
std::unordered_map<EntityWrapper, AutoBlendQueue> m_AutoBlendQueues; std::unordered_map<EntityWrapper, AutoBlendQueue> m_AutoBlendQueues;
bool Crouch = false;
float aimMove = 0;
}; };
#endif #endif
+1 -2
View File
@@ -49,9 +49,7 @@ public:
next = next->Child[0]; next = next->Child[0];
} }
} }
return next; return next;
} }
}; };
@@ -82,6 +80,7 @@ public:
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2); BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
EntityWrapper GetSubTreeRoot(std::string nodeName); EntityWrapper GetSubTreeRoot(std::string nodeName);
std::vector<EntityWrapper> GetSubTreeRoots(std::string nodeName);
std::vector<EntityWrapper> GetSingleLevelRoots(std::string name); std::vector<EntityWrapper> GetSingleLevelRoots(std::string name);
std::vector<EntityWrapper> GetEntitesByName(std::string name); std::vector<EntityWrapper> GetEntitesByName(std::string name);
+2 -1
View File
@@ -3,6 +3,7 @@
#include "IRenderer.h" #include "IRenderer.h"
#include "ShaderProgram.h" #include "ShaderProgram.h"
#include "PNG.h"
class CubeMapPass class CubeMapPass
{ {
@@ -21,7 +22,7 @@ private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
std::string m_PreviusCubeMapTexture; std::string m_PreviusCubeMapTexture;
std::vector<Texture*> m_CubeMapTextures; std::vector<std::string> m_CubeMapTextures;
}; };
#endif #endif
@@ -7,7 +7,7 @@
#include "../GLM.h" #include "../GLM.h"
#include "../Core/ComponentWrapper.h" #include "../Core/ComponentWrapper.h"
#include "RenderJob.h" #include "RenderJob.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "../Core/World.h" #include "../Core/World.h"
struct DirectionalLightJob : RenderJob struct DirectionalLightJob : RenderJob
@@ -16,7 +16,7 @@ struct DirectionalLightJob : RenderJob
: RenderJob() : RenderJob()
{ {
Direction = glm::vec4(0,0,-1,0) * glm::inverse(Transform::AbsoluteOrientation(m_World, transformComponent.EntityID)); Direction = glm::vec4(0,0,-1,0) * glm::inverse(TransformSystem::AbsoluteOrientation(m_World, transformComponent.EntityID));
//Direction = glm::vec4((glm::vec3)directionalLightComponent["Direction"], 0.f); //Direction = glm::vec4((glm::vec3)directionalLightComponent["Direction"], 0.f);
Color = (glm::vec4)directionalLightComponent["Color"]; Color = (glm::vec4)directionalLightComponent["Color"];
Intensity = (double)directionalLightComponent["Intensity"]; Intensity = (double)directionalLightComponent["Intensity"];
+73 -10
View File
@@ -17,7 +17,7 @@
class DrawFinalPass class DrawFinalPass
{ {
public: public:
DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass, ShadowPass* shadowPass); DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass, ShadowPass* shadowPass, ConfigFile* config);
~DrawFinalPass(); ~DrawFinalPass();
void InitializeTextures(); void InitializeTextures();
void InitializeFrameBuffers(); void InitializeFrameBuffers();
@@ -25,17 +25,77 @@ public:
void Draw(RenderScene& scene, BlurHUD* blurHUDPass); void Draw(RenderScene& scene, BlurHUD* blurHUDPass);
void ClearBuffer(); void ClearBuffer();
void OnWindowResize(); void OnWindowResize();
void setMSAA(unsigned int numberOfSamples);
//Return the texture that is used in later stages to apply the bloom effect //Return the texture that is used in later stages to apply the bloom effect
GLuint BloomTexture() const { return m_BloomTexture; } GLuint BloomTexture() {
if (m_MSAA){
m_AntiAliasedFrameBuffer->Bind();
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
m_AntiAliasedFrameBuffer->Unbind();
m_FinalPassFrameBuffer->Read();
glReadBuffer(GL_COLOR_ATTACHMENT1);
m_AntiAliasedFrameBuffer->Draw();
glBlitFramebuffer(
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
return m_AntiAliasedTexture;
}
return m_BloomTexture; }
//Return the texture with diffuse and lighting of the scene. //Return the texture with diffuse and lighting of the scene.
GLuint SceneTexture() const { return m_SceneTexture; } GLuint DrawFinalPass::SceneTexture() {
if (m_MSAA) {
m_AntiAliasedFrameBuffer->Bind();
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
m_AntiAliasedFrameBuffer->Unbind();
m_FinalPassFrameBuffer->Read();
glReadBuffer(GL_COLOR_ATTACHMENT0);
m_AntiAliasedFrameBuffer->Draw();
glBlitFramebuffer(
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
return m_AntiAliasedTexture;
}
return m_SceneTexture;
}
//Return the SceneTexture with the blurred HUD bits. //Return the SceneTexture with the blurred HUD bits.
GLuint CombinedSceneTexture() const { return m_CombinedTexture; } GLuint CombinedSceneTexture() {
if (m_MSAA) {
m_AntiAliasedFrameBuffer->Bind();
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
m_AntiAliasedFrameBuffer->Unbind();
m_FinalPassFrameBuffer->Read();
m_AntiAliasedFrameBuffer->Draw();
glBlitFramebuffer(
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
return m_AntiAliasedTexture;
}
return m_CombinedTexture; }
//Return the blurred scene texture. //Return the blurred scene texture.
GLuint FullBlurredTexture() const { return m_FullBlurredTexture; } GLuint FullBlurredTexture() {
if (m_MSAA) {
m_AntiAliasedFrameBuffer->Bind();
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
m_AntiAliasedFrameBuffer->Unbind();
m_FinalPassFrameBuffer->Read();
m_AntiAliasedFrameBuffer->Draw();
glBlitFramebuffer(
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
return m_AntiAliasedTexture;
}
return m_FullBlurredTexture; }
//Return the framebuffer used in the scene rendering stage. //Return the framebuffer used in the scene rendering stage.
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; } FrameBuffer* FinalPassFrameBuffer() { return m_FinalPassFrameBuffer; }
private: private:
void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene); void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene);
@@ -56,18 +116,21 @@ private:
Texture* m_GreyTexture; Texture* m_GreyTexture;
Texture* m_ErrorTexture; Texture* m_ErrorTexture;
FrameBuffer m_FinalPassFrameBuffer; FrameBuffer* m_FinalPassFrameBuffer = nullptr;
FrameBuffer m_ShieldDepthFrameBuffer; FrameBuffer* m_ShieldDepthFrameBuffer = nullptr;
FrameBuffer* m_AntiAliasedFrameBuffer = nullptr;
GLuint m_BloomTexture = 0; GLuint m_BloomTexture = 0;
GLuint m_SceneTexture = 0; GLuint m_SceneTexture = 0;
GLuint m_DepthBuffer = 0; GLuint m_DepthBuffer = 0;
GLuint m_ShieldBuffer = 0; GLuint m_ShieldBuffer = 0;
GLuint m_CubeMapTexture = 0; GLuint m_CubeMapTexture = 0;
GLuint m_FullBlurredTexture; GLuint m_FullBlurredTexture = 0;
GLuint m_CombinedTexture; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures GLuint m_CombinedTexture = 0; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures
GLuint m_AntiAliasedTexture = 0; //Is only used when MSAA is active;
//maqke this component based i guess? //maqke this component based i guess?
GLuint m_ShieldPixelRate = 16; GLuint m_ShieldPixelRate = 16;
unsigned int m_MSAA = 0;
const IRenderer* m_Renderer; const IRenderer* m_Renderer;
const LightCullingPass* m_LightCullingPass; const LightCullingPass* m_LightCullingPass;
+14 -10
View File
@@ -18,15 +18,17 @@ struct ExplosionEffectJob : ModelJob
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded, bool shadow) ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded, bool shadow)
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded, shadow) : ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded, shadow)
{ {
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"]; ExplosionOrigin = (Field<glm::vec3>)explosionEffectComponent["ExplosionOrigin"];
TimeSinceDeath = (double)explosionEffectComponent["TimeSinceDeath"]; TimeSinceDeath = (Field<double>)explosionEffectComponent["TimeSinceDeath"];
ExplosionDuration = (double)explosionEffectComponent["ExplosionDuration"]; ExplosionDuration = (Field<double>)explosionEffectComponent["ExplosionDuration"];
EndColor = (glm::vec4)explosionEffectComponent["EndColor"]; EndColor = (Field<glm::vec4>)explosionEffectComponent["EndColor"];
Randomness = (bool)explosionEffectComponent["Randomness"]; Randomness = (Field<bool>)explosionEffectComponent["Randomness"];
RandomnessScalar = (double)explosionEffectComponent["RandomnessScalar"]; RandomnessScalar = (Field<double>)explosionEffectComponent["RandomnessScalar"];
Velocity = (glm::vec2)explosionEffectComponent["Velocity"]; Velocity = (Field<glm::vec2>)explosionEffectComponent["Velocity"];
ColorByDistance = (bool)explosionEffectComponent["ColorByDistance"]; ColorByDistance = (Field<bool>)explosionEffectComponent["ColorByDistance"];
ExponentialAccelaration = (bool)explosionEffectComponent["ExponentialAccelaration"]; ExponentialAccelaration = (Field<bool>)explosionEffectComponent["ExponentialAccelaration"];
Reverse = (Field<bool>)explosionEffectComponent["Reverse"];Reverse = (bool)explosionEffectComponent["Reverse"];
ColorDistanceScalar = (Field<double>)explosionEffectComponent["ColorDistanceScalar"];ColorDistanceScalar = (double)explosionEffectComponent["ColorDistanceScalar"];
}; };
glm::vec3 ExplosionOrigin; glm::vec3 ExplosionOrigin;
@@ -38,12 +40,14 @@ struct ExplosionEffectJob : ModelJob
glm::vec4 EndColor; glm::vec4 EndColor;
bool Randomness = false; bool Randomness = false;
float RandomnessScalar = 1.f; double RandomnessScalar = 1.f;
glm::vec2 Velocity; glm::vec2 Velocity;
bool ColorByDistance = false; bool ColorByDistance = false;
//bool ReverseAnimation = false; //bool ReverseAnimation = false;
//bool Wireframe = false; //bool Wireframe = false;
bool ExponentialAccelaration = false; bool ExponentialAccelaration = false;
bool Reverse = false;
double ColorDistanceScalar = 1.f;
std::array<float, 50> RandomNumbers = { std::array<float, 50> RandomNumbers = {
0.3257552917701f, 0.3257552917701f,
+22 -7
View File
@@ -7,12 +7,13 @@
class BufferResource class BufferResource
{ {
public: public:
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod); BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod, bool multiSampling);
GLuint* m_ResourceHandle; GLuint* m_ResourceHandle;
GLenum m_ResourceType; GLenum m_ResourceType;
GLenum m_Attachment; GLenum m_Attachment;
GLuint m_MipMapLod = 0; GLuint m_MipMapLod = 0;
bool m_MultiSampling = false;
private: private:
}; };
@@ -21,24 +22,33 @@ template <GLenum RESOURCETYPE>
class ResourceType : public BufferResource class ResourceType : public BufferResource
{ {
public: public:
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod) ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod, bool multiSampling)
: BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod) { } : BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod, multiSampling) { }
}; };
class Texture2D : public ResourceType<GL_TEXTURE_2D> class Texture2D : public ResourceType<GL_TEXTURE_2D>
{ {
public: public:
Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0) Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
: ResourceType(resourceHandle, attachment, mipMapLod) { }; : ResourceType(resourceHandle, attachment, mipMapLod, false) { };
~Texture2D(); ~Texture2D();
}; };
class Texture2DMultiSample : public ResourceType<GL_TEXTURE_2D_MULTISAMPLE>
{
public:
Texture2DMultiSample(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
: ResourceType(resourceHandle, attachment, mipMapLod, true) { };
~Texture2DMultiSample();
};
class RenderBuffer : public ResourceType<GL_RENDERBUFFER> class RenderBuffer : public ResourceType<GL_RENDERBUFFER>
{ {
public: public:
RenderBuffer(GLuint* resourceHandle, GLenum attachment) RenderBuffer(GLuint* resourceHandle, GLenum attachment, bool multiSampling = false)
: ResourceType(resourceHandle, attachment, 0) : ResourceType(resourceHandle, attachment, 0, multiSampling)
{ }; { };
~RenderBuffer(); ~RenderBuffer();
@@ -48,12 +58,13 @@ class Texture2DArray : public ResourceType<GL_TEXTURE_2D_ARRAY>
{ {
public: public:
Texture2DArray(GLuint* resourceHandle, GLenum attachment) Texture2DArray(GLuint* resourceHandle, GLenum attachment)
: ResourceType(resourceHandle, attachment, 0) : ResourceType(resourceHandle, attachment, 0, false)
{ }; { };
~Texture2DArray(); ~Texture2DArray();
}; };
class FrameBuffer class FrameBuffer
{ {
public: public:
@@ -65,9 +76,13 @@ public:
void Generate(); void Generate();
void Bind(); void Bind();
void Unbind(); void Unbind();
void Read();
void Draw();
GLuint GetHandle(); GLuint GetHandle();
bool MultiSampling() { return m_MultiSampling; };
private: private:
bool m_MultiSampling = true;
GLuint m_BufferHandle; GLuint m_BufferHandle;
std::vector<std::shared_ptr<BufferResource>> m_Resources; std::vector<std::shared_ptr<BufferResource>> m_Resources;
}; };
+2
View File
@@ -3,6 +3,8 @@
struct Image struct Image
{ {
virtual ~Image() = default;
enum class ImageFormat enum class ImageFormat
{ {
Unknown, Unknown,
+8 -2
View File
@@ -12,7 +12,7 @@
#include "../Core/ResourceManager.h" #include "../Core/ResourceManager.h"
#include "Camera.h" #include "Camera.h"
#include "../Core/World.h" #include "../Core/World.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "Skeleton.h" #include "Skeleton.h"
#include "ShaderProgram.h" #include "ShaderProgram.h"
#include "BlendTree.h" #include "BlendTree.h"
@@ -104,13 +104,18 @@ struct ModelJob : RenderJob
FillPercentage = fillPercentage; FillPercentage = fillPercentage;
IsShielded = isShielded; IsShielded = isShielded;
if (world->HasComponent(Entity, "Unpickable")) {
NotPickable = true;
}
if (model->IsSkinned()) { if (model->IsSkinned()) {
Skeleton = Model->m_RawModel->m_Skeleton; Skeleton = Model->m_RawModel->m_Skeleton;
if (Skeleton != nullptr) { if (Skeleton != nullptr) {
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID); EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) { if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
BlendTree = Skeleton->BlendTrees.at(entityWrapper); BlendTree = Skeleton->BlendTrees.at(entityWrapper);
} }
@@ -147,6 +152,7 @@ struct ModelJob : RenderJob
float FillPercentage = 0.0; float FillPercentage = 0.0;
bool IsShielded; bool IsShielded;
bool Shadow; bool Shadow;
bool NotPickable = false;
void CalculateHash() override void CalculateHash() override
{ {
+2 -2
View File
@@ -7,7 +7,7 @@
#include "../GLM.h" #include "../GLM.h"
#include "../Core/ComponentWrapper.h" #include "../Core/ComponentWrapper.h"
#include "RenderJob.h" #include "RenderJob.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "../Core/World.h" #include "../Core/World.h"
struct PointLightJob : RenderJob struct PointLightJob : RenderJob
@@ -16,7 +16,7 @@ struct PointLightJob : RenderJob
: RenderJob() : RenderJob()
{ {
Position = glm::vec4((glm::vec3)transformComponent["Position"], 1.0f); Position = glm::vec4((glm::vec3)transformComponent["Position"], 1.0f);
Position = glm::vec4(Transform::AbsolutePosition(m_World, transformComponent.EntityID), 1.f); Position = glm::vec4(TransformSystem::AbsolutePosition(m_World, transformComponent.EntityID), 1.f);
Color = (glm::vec4)pointLightComponent["Color"]; Color = (glm::vec4)pointLightComponent["Color"];
Radius = (double)pointLightComponent["Radius"]; Radius = (double)pointLightComponent["Radius"];
Intensity = (double)pointLightComponent["Intensity"]; Intensity = (double)pointLightComponent["Intensity"];
+1 -1
View File
@@ -14,7 +14,7 @@
#include "ModelJob.h" #include "ModelJob.h"
#include "Renderer.h" #include "Renderer.h"
#include "PointLightJob.h" #include "PointLightJob.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "../Core/EPlayerSpawned.h" #include "../Core/EPlayerSpawned.h"
#include "../Core/Octree.h" #include "../Core/Octree.h"
#include "../Collision/EntityAABB.h" #include "../Collision/EntityAABB.h"
+2 -1
View File
@@ -22,7 +22,7 @@
#include "../Core/EventBroker.h" #include "../Core/EventBroker.h"
#include "ImGuiRenderPass.h" #include "ImGuiRenderPass.h"
#include "Camera.h" #include "Camera.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "imgui/imgui.h" #include "imgui/imgui.h"
#include "TextPass.h" #include "TextPass.h"
#include "Util/CommonFunctions.h" #include "Util/CommonFunctions.h"
@@ -71,6 +71,7 @@ private:
bool m_ResizeWindow = false; bool m_ResizeWindow = false;
int m_SSAO_Quality = 0; int m_SSAO_Quality = 0;
int m_GLOW_Quality = 2; int m_GLOW_Quality = 2;
unsigned int m_MSAA_Level = 0;
PickingPass* m_PickingPass; PickingPass* m_PickingPass;
LightCullingPass* m_LightCullingPass; LightCullingPass* m_LightCullingPass;
+1 -1
View File
@@ -69,7 +69,7 @@ private:
std::array<glm::mat4, MAX_SPLITS> m_LightProjection; std::array<glm::mat4, MAX_SPLITS> m_LightProjection;
std::array<glm::mat4, MAX_SPLITS> m_LightView; std::array<glm::mat4, MAX_SPLITS> m_LightView;
GLfloat m_NearFarPlane[2] = { -34.f, 27.f }; GLfloat m_NearFarPlane[2] = { -128.f, 128.f };
GLuint m_ResolutionSizeWidth = 1024 * 2; GLuint m_ResolutionSizeWidth = 1024 * 2;
GLuint m_ResolutionSizeHeight = 1024 * 2; GLuint m_ResolutionSizeHeight = 1024 * 2;
+4 -1
View File
@@ -20,11 +20,14 @@ public:
, Parent(parent) , Parent(parent)
, Name(name) , Name(name)
, OffsetMatrix(offsetMatrix) , OffsetMatrix(offsetMatrix)
{ } {
BindTransformMatrix = glm::inverse(offsetMatrix);
}
std::string Name; std::string Name;
glm::mat4 OffsetMatrix; glm::mat4 OffsetMatrix;
int ID; int ID;
glm::mat4 BindTransformMatrix;
Bone* Parent; Bone* Parent;
std::vector<Bone*> Children; std::vector<Bone*> Children;
+9 -7
View File
@@ -13,7 +13,7 @@
#include "../Core/ResourceManager.h" #include "../Core/ResourceManager.h"
#include "Camera.h" #include "Camera.h"
#include "../Core/World.h" #include "../Core/World.h"
#include "../Core/Transform.h" #include "../Core/TransformSystem.h"
#include "Skeleton.h" #include "Skeleton.h"
struct SpriteJob : RenderJob struct SpriteJob : RenderJob
@@ -21,7 +21,7 @@ struct SpriteJob : RenderJob
SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator) SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator)
: RenderJob() : RenderJob()
{ {
Model = ResourceManager::Load<::Model>((std::string)cSprite["Model"]); Model = ResourceManager::Load<::Model>(cSprite["Model"]);
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front(); ::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
TextureID = 0; TextureID = 0;
@@ -29,6 +29,7 @@ struct SpriteJob : RenderJob
IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]); IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]);
Linear = (bool)cSprite["Linear"]; Linear = (bool)cSprite["Linear"];
ClampToBorder = (bool)cSprite["ClampToBorder"];
StartIndex = matProp.material->StartIndex; StartIndex = matProp.material->StartIndex;
EndIndex = matProp.material->EndIndex; EndIndex = matProp.material->EndIndex;
@@ -37,7 +38,7 @@ struct SpriteJob : RenderJob
BlurBackground = (bool)cSprite["BlurBackground"]; BlurBackground = (bool)cSprite["BlurBackground"];
Entity = cSprite.EntityID; Entity = cSprite.EntityID;
Position = Transform::AbsolutePosition(world, cSprite.EntityID); Position = TransformSystem::AbsolutePosition(world, cSprite.EntityID);
Depth = 0; Depth = 0;
if (depthSorted) { if (depthSorted) {
glm::vec3 viewpos = glm::vec3(camera->ViewMatrix() * glm::vec4(Position, 1)); glm::vec3 viewpos = glm::vec3(camera->ViewMatrix() * glm::vec4(Position, 1));
@@ -50,11 +51,11 @@ struct SpriteJob : RenderJob
FillColor = fillColor; FillColor = fillColor;
FillPercentage = fillPercentage; FillPercentage = fillPercentage;
glm::vec3 scale = Transform::AbsoluteScale(world, cSprite.EntityID); glm::vec3 scale = TransformSystem::AbsoluteScale(world, cSprite.EntityID);
if((bool)cSprite["KeepRatio"] == true) { if((bool)cSprite["KeepRatio"] == true) {
if(scale.y >= scale.x) { if(scale.y >= scale.x) {
ScaleY = (scale.x)/(scale.y); ScaleY = (scale.y)/(scale.x);
ScaleX = 1.f; ScaleX = 1.f;
} else { } else {
ScaleY = 1.f; ScaleY = 1.f;
@@ -90,9 +91,10 @@ struct SpriteJob : RenderJob
bool Pickable; bool Pickable;
bool IsIndicator = false; bool IsIndicator = false;
bool BlurBackground = false; bool BlurBackground = false;
float ScaleX = 1; float ScaleX = 1.f;
float ScaleY = 1; float ScaleY = 1.f;
bool Linear = false; bool Linear = false;
bool ClampToBorder = false;
glm::vec4 FillColor = glm::vec4(0); glm::vec4 FillColor = glm::vec4(0);
float FillPercentage = 0.0; float FillPercentage = 0.0;
+2 -2
View File
@@ -17,8 +17,8 @@ struct TextJob : RenderJob
: RenderJob() : RenderJob()
{ {
Matrix = matrix; Matrix = matrix;
Color = (glm::vec4)textComponent["Color"]; Color = (const glm::vec4&)textComponent["Color"];
Content = (std::string)textComponent["Content"]; Content = (const std::string&)textComponent["Content"];
Resource = font; Resource = font;
if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) { if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) {
+1
View File
@@ -23,6 +23,7 @@ public:
private: private:
void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix); void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix);
std::string parseColors(std::string text, std::map<int, glm::vec4>& colorChanges, glm::vec4 originalColor);
Font* font; Font* font;
GLuint VAO, VBO; GLuint VAO, VBO;
-2
View File
@@ -14,8 +14,6 @@ protected:
TextureSprite(std::string path); TextureSprite(std::string path);
public: public:
~TextureSprite();
void Bind(GLenum textureUnit = GL_TEXTURE0); void Bind(GLenum textureUnit = GL_TEXTURE0);
GLuint m_Texture = 0; GLuint m_Texture = 0;
@@ -27,7 +27,7 @@ Texture* TryLoadResource(std::string path)
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type); void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
void GenerateMultiSampleTexture(GLuint* texture, int numSamples, glm::vec2 dimensions, GLint internalFormat); void GenerateMultiSampleTexture(GLuint* texture, int numSamples, glm::vec2 dimensions, GLint internalFormat);
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps); void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type, GLint numMipMaps, GLint MAGFilter, GLint MINFilter);
void DeleteTexture(GLuint* texture); void DeleteTexture(GLuint* texture);
}; };
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_ChangeBGM_h__
#define Events_ChangeBGM_h__
#include <string>
#include "../Engine/Core/EventBroker.h"
namespace Events
{
struct ChangeBGM : Event
{
std::string FilePath = "";
};
}
#endif // Events_ChangeBGM_h__
@@ -0,0 +1,17 @@
#ifndef Events_PlayAnnouncerVoice_h__
#define Events_PlayAnnouncerVoice_h__
#include <string>
#include "../Engine/Core/EventBroker.h"
namespace Events
{
struct PlayAnonuncerVoice : public Event
{
std::string FilePath = "";
};
}
#endif
+2 -1
View File
@@ -12,7 +12,8 @@ namespace Events
// Sound behavior is thereby specified in the SoundEmitter component. // Sound behavior is thereby specified in the SoundEmitter component.
struct PlaySoundOnEntity : public Event struct PlaySoundOnEntity : public Event
{ {
EntityID EmitterID = 0; EntityWrapper Emitter = EntityWrapper::Invalid;
float Gain = 1.f;
std::string FilePath = ""; std::string FilePath = "";
}; };
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_SetAnnouncerGain_h__
#define Events_SetAnnouncerGain_h__
#include "../Engine/Core/EventBroker.h"
namespace Events
{
struct SetAnnouncerGain : public Event
{
float Gain = 1;
};
}
#endif //
+38 -18
View File
@@ -9,32 +9,36 @@
#include "OpenAL/al.h" #include "OpenAL/al.h"
#include "OpenAL/alc.h" #include "OpenAL/alc.h"
#include "imgui/imgui.h" #include "../Engine/Core/World.h"
#include "../Engine/Core/EventBroker.h"
#include "Core/World.h"
#include "Core/EventBroker.h"
#include "../Engine/Core/ResourceManager.h" #include "../Engine/Core/ResourceManager.h"
#include "../Engine/Core/ConfigFile.h" #include "../Engine/Core/ConfigFile.h"
#include "Core/Transform.h" // Absolute transform #include "../Engine/Core/TransformSystem.h"
#include "Sound/Sound.h" #include "../Engine/Sound/Sound.h"
#include "../Engine/Sound/EPlayQueueOnEntity.h" #include "../Engine/Sound/EPlayQueueOnEntity.h"
#include "Sound/EPlaySoundOnEntity.h" #include "../Engine/Sound/EPlaySoundOnEntity.h"
#include "Sound/EPlaySoundOnPosition.h" #include "../Engine/Sound/EPlaySoundOnPosition.h"
#include "Sound/EPlayBackgroundMusic.h" #include "../Engine/Sound/EPlayBackgroundMusic.h"
#include "Sound/EPauseSound.h" #include "../Engine/Sound/EPlayAnnouncerVoice.h"
#include "Sound/EContinueSound.h" #include "../Engine/Sound/EPauseSound.h"
#include "Sound/EStopSound.h" #include "../Engine/Sound/EContinueSound.h"
#include "Sound/ESetBGMGain.h" #include "../Engine/Sound/EStopSound.h"
#include "Sound/ESetSFXGain.h" #include "../Engine/Sound/ESetBGMGain.h"
#include "Core/EPause.h" #include "../Engine/Sound/ESetSFXGain.h"
#include "Core/EComponentAttached.h" #include "../Engine/Sound/ESetAnnouncerGain.h"
#include "../Engine/Sound/EChangeBGM.h"
#include "../Engine/Core/EPause.h"
#include "../Engine/Core/EComponentAttached.h"
#include "../Core/EPlayerSpawned.h" #include "../Core/EPlayerSpawned.h"
#include "../Rendering/ESetCamera.h"
typedef std::pair<ALuint, std::vector<ALuint>> QueuedBuffers; typedef std::pair<ALuint, std::vector<ALuint>> QueuedBuffers;
enum class SoundType { enum class SoundType {
SFX, SFX,
BGM BGM,
Announcer
}; };
struct Source struct Source
@@ -43,6 +47,7 @@ struct Source
Sound* SoundResource = nullptr; Sound* SoundResource = nullptr;
ALuint ALsource; ALuint ALsource;
SoundType Type; SoundType Type;
float Duration;
}; };
class SoundManager class SoundManager
@@ -74,14 +79,20 @@ private:
ALenum getSourceState(ALuint source); ALenum getSourceState(ALuint source);
void setGain(Source* source, float gain); void setGain(Source* source, float gain);
void setSoundProperties(Source* source, ComponentWrapper* soundComponent); void setSoundProperties(Source* source, ComponentWrapper* soundComponent);
float getDurationSeconds(Source* source);
float getTimeOffsetSeconds(Source* source);
void setTimeOffsetSeconds(Source* source, float timeOffset);
// Specific logic // Specific logic
void playSound(Source* source); void playSound(Source* source);
// Need to be the same format (sample rate etc) // Needs to be the same format (sample rate etc)
void playQueue(QueuedBuffers qb); void playQueue(QueuedBuffers qb);
void stopSound(Source* source); void stopSound(Source* source);
Source* createSource(std::string filePath); Source* createSource(std::string filePath);
std::unordered_map<EntityID, Source*> m_Sources; std::unordered_map<EntityID, Source*> m_Sources;
void matchBGMLoop();
Source* m_CurrentBGM = nullptr;
Source* m_CurrentBGMCombo = nullptr;
// Logic // Logic
World* m_World = nullptr; World* m_World = nullptr;
@@ -93,6 +104,7 @@ private:
float m_BGMVolumeChannel = 1.0f; float m_BGMVolumeChannel = 1.0f;
float m_SFXVolumeChannel = 1.0f; float m_SFXVolumeChannel = 1.0f;
float m_AnnouncerVolumeChannel = 1.0f;
EntityWrapper m_LocalPlayer = EntityWrapper(); EntityWrapper m_LocalPlayer = EntityWrapper();
// Events // Events
@@ -102,6 +114,8 @@ private:
bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e); bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e);
EventRelay<SoundManager, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic; EventRelay<SoundManager, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e); bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
EventRelay<SoundManager, Events::PlayAnonuncerVoice> m_EPlayAnnouncerVoice;
bool OnPlayAnnouncerVoice(const Events::PlayAnonuncerVoice& e);
EventRelay<SoundManager, Events::PauseSound> m_EPauseSound; EventRelay<SoundManager, Events::PauseSound> m_EPauseSound;
bool OnPauseSound(const Events::PauseSound &e); bool OnPauseSound(const Events::PauseSound &e);
EventRelay<SoundManager, Events::StopSound> m_EStopSound; EventRelay<SoundManager, Events::StopSound> m_EStopSound;
@@ -112,6 +126,8 @@ private:
bool OnSetBGMGain(const Events::SetBGMGain &e); bool OnSetBGMGain(const Events::SetBGMGain &e);
EventRelay<SoundManager, Events::SetSFXGain> m_ESetSFXGain; EventRelay<SoundManager, Events::SetSFXGain> m_ESetSFXGain;
bool OnSetSFXGain(const Events::SetSFXGain &e); bool OnSetSFXGain(const Events::SetSFXGain &e);
EventRelay<SoundManager, Events::SetAnnouncerGain> m_ESetAnnouncerGain;
bool OnSetAnnouncerGain(const Events::SetAnnouncerGain& e);
EventRelay<SoundManager, Events::ComponentAttached> m_EComponentAttached; EventRelay<SoundManager, Events::ComponentAttached> m_EComponentAttached;
bool OnComponentAttached(const Events::ComponentAttached &e); bool OnComponentAttached(const Events::ComponentAttached &e);
EventRelay<SoundManager, Events::Pause> m_EPause; EventRelay<SoundManager, Events::Pause> m_EPause;
@@ -122,6 +138,10 @@ private:
bool OnPlayerSpawned(const Events::PlayerSpawned &e); bool OnPlayerSpawned(const Events::PlayerSpawned &e);
EventRelay<SoundManager, Events::PlayQueueOnEntity> m_EPlayQueueOnEntity; EventRelay<SoundManager, Events::PlayQueueOnEntity> m_EPlayQueueOnEntity;
bool OnPlayQueueOnEntity(const Events::PlayQueueOnEntity &e); bool OnPlayQueueOnEntity(const Events::PlayQueueOnEntity &e);
EventRelay<SoundManager, Events::ChangeBGM> m_EChangeBGM;
bool OnChangeBGM(const Events::ChangeBGM &e);
EventRelay<SoundManager, Events::SetCamera> m_ESetCamera;
bool OnSetCamera(const Events::SetCamera& e);
}; };
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_Reset_h__
#define Events_Reset_h__
#include "Core/EventBroker.h"
#include "Core/EntityWrapper.h"
namespace Events
{
struct Reset : Event
{
};
}
#endif
+1 -1
View File
@@ -2,7 +2,7 @@
#define AmmoPickupSystem_h__ #define AmmoPickupSystem_h__
#include "Core/System.h" #include "Core/System.h"
#include "Core/Transform.h" #include "Core/TransformSystem.h"
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EPickupSpawned.h" #include "Core/EPickupSpawned.h"
+3
View File
@@ -6,6 +6,7 @@
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Common.h" #include "Common.h"
#include "SpawnerSystem.h"
class BoostSystem : public System class BoostSystem : public System
{ {
@@ -17,5 +18,7 @@ private:
bool OnPlayerDamage(Events::PlayerDamage& e); bool OnPlayerDamage(Events::PlayerDamage& e);
std::string DetermineClass(EntityWrapper player); std::string DetermineClass(EntityWrapper player);
void giveAmmo(EntityWrapper giver, EntityWrapper receiver);
}; };
#endif #endif
@@ -7,7 +7,7 @@
#include "Common.h" #include "Common.h"
#include "Core/System.h" #include "Core/System.h"
#include "Core/Transform.h" #include "Core/TransformSystem.h"
#include "Core/ECaptured.h" #include "Core/ECaptured.h"
@@ -9,6 +9,7 @@
#include "Engine/Collision/ETrigger.h" #include "Engine/Collision/ETrigger.h"
#include "Core/ECaptured.h" #include "Core/ECaptured.h"
#include "Core/EWin.h" #include "Core/EWin.h"
#include "Game/Events/EReset.h"
#include <tuple> #include <tuple>
#include <vector> #include <vector>
@@ -23,6 +24,7 @@ public:
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
private: private:
void Init();
//methods which will take care of specific events //methods which will take care of specific events
EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch; EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch;
bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e); bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e);
@@ -30,6 +32,8 @@ private:
bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e); bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e);
EventRelay<CapturePointSystem, Events::Captured> m_ECaptured; EventRelay<CapturePointSystem, Events::Captured> m_ECaptured;
bool CapturePointSystem::OnCaptured(const Events::Captured& e); bool CapturePointSystem::OnCaptured(const Events::Captured& e);
EventRelay<CapturePointSystem, Events::Reset> m_EReset;
bool CapturePointSystem::OnReset(const Events::Reset& e);
void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner); void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner);
bool m_WinnerWasFound = false; bool m_WinnerWasFound = false;
+1 -1
View File
@@ -2,7 +2,7 @@
#define DamageIndicatorSystem_h__ #define DamageIndicatorSystem_h__
#include "Core/System.h" #include "Core/System.h"
#include "Core/Transform.h" #include "Core/TransformSystem.h"
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
+21
View File
@@ -0,0 +1,21 @@
#ifndef EndScreenSystem_h__
#define EndScreenSystem_h__
#include "Core/System.h"
#include "Input/EInputCommand.h"
#include "Rendering/ESetCamera.h"
#include "Core/EWin.h"
class EndScreenSystem : public ImpureSystem
{
public:
EndScreenSystem(SystemParams params);
virtual void Update(double dt) override;
private:
EventRelay<EndScreenSystem, Events::Win> m_EWin;
bool OnWin(const Events::Win& e);
};
#endif
@@ -3,6 +3,7 @@
#include "Common.h" #include "Common.h"
#include "Core/System.h" #include "Core/System.h"
#include "Engine/GLM.h"
class ExplosionEffectSystem : public PureSystem class ExplosionEffectSystem : public PureSystem
{ {
+22
View File
@@ -0,0 +1,22 @@
#ifndef FadeSystem_h__
#define FadeSystem_h__
#include "Core/System.h"
#include "GLM.h"
class FadeSystem : public PureSystem
{
public:
FadeSystem(SystemParams params)
: System(params)
, PureSystem("Fade")
{
}
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFadeOut, double dt) override;
private:
};
#endif
+2 -2
View File
@@ -12,8 +12,8 @@ public:
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
{ {
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform"); ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
(double&)component["Time"] += dt; (Field<double>)component["Time"] += dt;
(glm::vec3&)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"]; (Field<glm::vec3>)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
} }
}; };
+20 -7
View File
@@ -3,7 +3,7 @@
#include "../../Engine/Core/System.h" #include "../../Engine/Core/System.h"
#include "../../Engine/GLM.h" #include "../../Engine/GLM.h"
#include "Core/EPlayerDeath.h" #include "Network/EKillDeath.h"
class KillFeedSystem : public ImpureSystem class KillFeedSystem : public ImpureSystem
{ {
@@ -11,8 +11,7 @@ public:
KillFeedSystem(SystemParams params) KillFeedSystem(SystemParams params)
: System(params) : System(params)
{ {
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &KillFeedSystem::OnPlayerDeath); EVENT_SUBSCRIBE_MEMBER(m_EKillDeath, &KillFeedSystem::OnPlayerKillDeath)
} }
virtual void Update(double dt) override; virtual void Update(double dt) override;
@@ -22,16 +21,30 @@ private:
EventRelay<KillFeedSystem, Events::PlayerDeath> m_EPlayerDeath; EventRelay<KillFeedSystem, Events::KillDeath> m_EKillDeath;
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e); bool KillFeedSystem::OnPlayerKillDeath(Events::KillDeath& e);
struct KillFeedInfo struct KillFeedInfo
{ {
std::string Content; std::string KillerName = "";
glm::vec4 Color; int KillerClass = 0;
int KillerID = -1;
int KillerTeam = 0;
std::string KillerColor = "";
std::string VictimName = "";
int VictimClass = 0;
int VictimID = -1;
int VictimTeam = 0;
std::string VictimColor = "";
bool redused;
float TimeToLive = 5.f; float TimeToLive = 5.f;
}; };
std::string m_RedColor = "\\C08366D";
std::string m_BlueColor = "\\C6A1208";
std::list<KillFeedInfo> m_DeathQueue; std::list<KillFeedInfo> m_DeathQueue;
}; };
+2
View File
@@ -24,6 +24,7 @@ public:
private: private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
void OpenSubMenu(const Events::InputCommand& e); void OpenSubMenu(const Events::InputCommand& e);
void OpenDropDown(const Events::InputCommand& e);
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked; EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
bool OnButtonClick(const Events::ButtonClicked& e); bool OnButtonClick(const Events::ButtonClicked& e);
@@ -36,6 +37,7 @@ private:
std::string m_CurrentCommand = ""; std::string m_CurrentCommand = "";
EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid; EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid;
EntityWrapper m_DropDown = EntityWrapper::Invalid;
}; };
+1 -1
View File
@@ -2,7 +2,7 @@
#define PickupSpawnSystem_h__ #define PickupSpawnSystem_h__
#include "Core/System.h" #include "Core/System.h"
#include "Core/Transform.h" #include "Core/TransformSystem.h"
#include "Core/ResourceManager.h" #include "Core/ResourceManager.h"
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EPickupSpawned.h" #include "Core/EPickupSpawned.h"
+5 -1
View File
@@ -32,8 +32,10 @@ private:
glm::vec3 m_LastPosition = glm::vec3(); glm::vec3 m_LastPosition = glm::vec3();
// Used to track afterimages for sprint effect. // Used to track afterimages for sprint effect.
float m_SprintEffectTimer; float m_SprintEffectTimer;
// Used to track afterimages for dash effect.
float m_DashEffectTimer;
// The logic for making the sound play when player is moving // The logic for making the sound play when player is moving
void playerStep(double dt); void playerStep(double dt, EntityWrapper player);
// Spawn a hexagon at origin of an Entity // Spawn a hexagon at origin of an Entity
void spawnHexagon(EntityWrapper target); void spawnHexagon(EntityWrapper target);
@@ -46,4 +48,6 @@ private:
void updateMovementControllers(double dt); void updateMovementControllers(double dt);
void updateVelocity(EntityWrapper player, double dt); void updateVelocity(EntityWrapper player, double dt);
void setAim(EntityWrapper root, std::string weaponNodeName, double time);
}; };
+3 -3
View File
@@ -19,9 +19,9 @@ private:
enum class PlayerClass enum class PlayerClass
{ {
None = 0, None = 0,
Assault, Assault = 1,
Defender, Defender = 2,
Sniper Sniper = 2
}; };
struct SpawnRequest struct SpawnRequest
{ {
+24 -3
View File
@@ -1,6 +1,25 @@
#include "Common.h" #include "Common.h"
#include "Core/System.h" #include "Core/System.h"
//struct FSubscriptProxy
// {
// friend struct ComponentWrapper;
// FSubscriptProxy(ComponentWrapper* component, std::string fieldName)
// : m_Component(component)
// , m_FieldName(fieldName)
// { }
// ComponentWrapper* m_Component;
// std::string m_FieldName;
// public:
// template <typename T>
// operator Field<T>() { return Field<T>(m_Component->Field<T>(m_FieldName)); }
// };
class RaptorCopterSystem : public PureSystem class RaptorCopterSystem : public PureSystem
{ {
public: public:
@@ -9,9 +28,11 @@ public:
, PureSystem("RaptorCopter") , PureSystem("RaptorCopter")
{ } { }
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cRaptorCopter, double dt) override
{ {
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform"); ComponentWrapper& cTransform = entity["Transform"];
(glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"]; //FSubscriptProxy subOri(&cTransform, "Orientation");
//Field<glm::vec3> orientation = subOri;
(Field<glm::vec3>)cTransform["Orientation"] += (float)(const double&)cRaptorCopter["Speed"] * (float)dt * (glm::vec3)cRaptorCopter["Axis"];
} }
}; };
+6
View File
@@ -8,6 +8,8 @@
#include "Core/EPlayerSpawned.h" #include "Core/EPlayerSpawned.h"
#include "Network/EPlayerConnected.h" #include "Network/EPlayerConnected.h"
#include "Network/EPlayerDisconnected.h" #include "Network/EPlayerDisconnected.h"
#include "Game/Events/EReset.h"
#include "Engine/Input/EInputCommand.h"
#include "GLM.h" #include "GLM.h"
class ScoreScreenSystem : public PureSystem class ScoreScreenSystem : public PureSystem
@@ -25,6 +27,10 @@ public:
bool OnPlayerConnected(const Events::PlayerConnected& e); bool OnPlayerConnected(const Events::PlayerConnected& e);
EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected; EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected;
bool OnPlayerDisconnected(const Events::PlayerDisconnected& e); bool OnPlayerDisconnected(const Events::PlayerDisconnected& e);
EventRelay<ScoreScreenSystem, Events::Reset> m_EReset;
bool OnReset(const Events::Reset& e);
EventRelay<ScoreScreenSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e);
private: private:
struct PlayerData { struct PlayerData {
+6 -12
View File
@@ -2,6 +2,7 @@
#define Systems_SoundSystem_h__ #define Systems_SoundSystem_h__
#include <random> #include <random>
#include <chrono>
#include "../Engine/Core/System.h" #include "../Engine/Core/System.h"
#include "../Engine/Core/ResourceManager.h" #include "../Engine/Core/ResourceManager.h"
@@ -20,9 +21,10 @@
#include "../Engine/Collision/ETrigger.h" #include "../Engine/Collision/ETrigger.h"
#include "../Engine/Sound/EPlaySoundOnEntity.h" #include "../Engine/Sound/EPlaySoundOnEntity.h"
#include "../Engine/Sound/EPlayBackgroundMusic.h" #include "../Engine/Sound/EPlayBackgroundMusic.h"
#include "../Engine/Sound/EPlayAnnouncerVoice.h"
#include "../Game/Events/EDoubleJump.h" #include "../Game/Events/EDoubleJump.h"
#include "../Game/Events/EDashAbility.h" #include "../Game/Events/EDashAbility.h"
#include "../Engine/Sound/EChangeBGM.h"
class SoundSystem : public PureSystem, ImpureSystem class SoundSystem : public PureSystem, ImpureSystem
{ {
@@ -33,14 +35,10 @@ public:
private: private:
std::string m_Announcer = ""; std::string m_Announcer = "";
// Logic for playing a sound when a player jumps // Logic for playing a sound when a player jumps
void playerJumps(); void playerJumps(EntityWrapper player);
// Temporary solution for play test. std::default_random_engine m_RandomGenerator;
bool m_DrumsIsPlaying = false; std::uniform_int_distribution<int> m_RandIntDistribution;
double m_DrumTimer = 0.0;
bool drumTimer(double dt);
std::default_random_engine generator;
EventRelay<SoundSystem, Events::PlayerSpawned> m_EPlayerSpawned; EventRelay<SoundSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned &e); bool OnPlayerSpawned(const Events::PlayerSpawned &e);
@@ -48,10 +46,6 @@ private:
bool OnInputCommand(const Events::InputCommand &e); bool OnInputCommand(const Events::InputCommand &e);
EventRelay<SoundSystem, Events::DoubleJump> m_EDoubleJump; EventRelay<SoundSystem, Events::DoubleJump> m_EDoubleJump;
bool OnDoubleJump(const Events::DoubleJump &e); bool OnDoubleJump(const Events::DoubleJump &e);
EventRelay<SoundSystem, Events::DashAbility> m_EDashAbility;
bool OnDashAbility(const Events::DashAbility &e);
EventRelay<SoundSystem, Events::TriggerTouch> m_ETriggerTouch;
bool OnTriggerTouch(const Events::TriggerTouch &e);
EventRelay<SoundSystem, Events::Captured> m_ECaptured; EventRelay<SoundSystem, Events::Captured> m_ECaptured;
bool OnCaptured(const Events::Captured &e); bool OnCaptured(const Events::Captured &e);
EventRelay<SoundSystem, Events::PlayerDamage> m_EPlayerDamage; EventRelay<SoundSystem, Events::PlayerDamage> m_EPlayerDamage;
+2 -1
View File
@@ -6,7 +6,7 @@
#include "GLM.h" #include "GLM.h"
#include "Core/System.h" #include "Core/System.h"
#include "Events/ESpawnerSpawn.h" #include "Events/ESpawnerSpawn.h"
#include "Core/Transform.h" #include "Core/TransformSystem.h"
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
class SpawnerSystem : public System class SpawnerSystem : public System
@@ -18,6 +18,7 @@ public:
// will try to pick a spawn location so that the spawned entity doesn't // will try to pick a spawn location so that the spawned entity doesn't
// collide with anything that has that component and is collidable. // collide with anything that has that component and is collidable.
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = ""); static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
static EntityWrapper SpawnEntityFile(const std::string& entityFilePath, EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
private: private:
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn; EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
@@ -4,6 +4,7 @@
#include "Core/System.h" #include "Core/System.h"
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include "Network/EPlayerDisconnected.h" #include "Network/EPlayerDisconnected.h"
#include "Game/Events/EReset.h"
class SpectatorCameraSystem : public ImpureSystem class SpectatorCameraSystem : public ImpureSystem
{ {
@@ -15,11 +16,14 @@ public:
private: private:
int m_PickedTeam; int m_PickedTeam;
bool m_CamSetToTeamPick; bool m_CamSetToTeamPick;
void reset();
EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand; EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect; EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect;
bool OnDisconnect(const Events::PlayerDisconnected& e); bool OnDisconnect(const Events::PlayerDisconnected& e);
EventRelay<SpectatorCameraSystem, Events::Reset> m_EReset;
bool OnReset(const Events::Reset& e);
}; };
#endif #endif
@@ -31,12 +31,14 @@ private:
// Weapon functions // Weapon functions
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi); void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
//void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi); bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi); bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// Utility // Utility
//Camera cameraFromEntity(EntityWrapper camera); //Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
}; };
#endif #endif
@@ -5,6 +5,8 @@
#include "Collision/Collision.h" #include "Collision/Collision.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h" #include "Sound/EPlaySoundOnEntity.h"
#include "Sound/EPlaySoundOnEntity.h"
#include <glm/gtx/vector_angle.hpp>
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour> class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
{ {
@@ -22,18 +24,24 @@ public:
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override; bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
private: private:
std::random_device m_RandomDevice; std::random_device m_RandomDevice;
std::mt19937 m_RandomEngine; std::mt19937 m_RandomEngine;
// Weapon functions // Weapon functions
void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi); void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi);
void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage); void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, const std::vector<glm::vec2>& pattern);
void spawnTracers(ComponentWrapper cWeapon, WeaponInfo& wi, std::vector<glm::vec2> pattern);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi); bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
// Utility // Utility
Camera cameraFromEntity(EntityWrapper camera); Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
}; };
#endif #endif
@@ -4,6 +4,8 @@
#include "WeaponBehaviour.h" #include "WeaponBehaviour.h"
#include "Collision/Collision.h" #include "Collision/Collision.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h"
#include "Rendering/EAutoAnimationBlend.h"
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour> class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
{ {
@@ -18,6 +20,7 @@ public:
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override; void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
@@ -32,6 +35,16 @@ private:
// Utility // Utility
bool canFire(ComponentWrapper cWeapon); bool canFire(ComponentWrapper cWeapon);
bool playerInFirstPerson(EntityWrapper player); bool playerInFirstPerson(EntityWrapper player);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver);
void spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi);
void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi);
void RemoveFrindlyAmmoHUD(WeaponInfo& wi);
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction); //float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
}; };
@@ -270,7 +270,8 @@ private:
EntityWrapper thirdPersonAttachment; EntityWrapper thirdPersonAttachment;
for (auto& attachment : weaponAttachments) { for (auto& attachment : weaponAttachments) {
ComponentWrapper cWeaponAttachment = attachment["WeaponAttachment"]; ComponentWrapper cWeaponAttachment = attachment["WeaponAttachment"];
if ((std::string&)cWeaponAttachment["Weapon"] == m_ComponentType) { Field<std::string> weaponType = cWeaponAttachment["Weapon"];
if (*weaponType == m_ComponentType) {
ComponentWrapper::SubscriptProxy person = cWeaponAttachment["Person"]; ComponentWrapper::SubscriptProxy person = cWeaponAttachment["Person"];
if ((ComponentInfo::EnumType)person == person.Enum("FirstPerson")) { if ((ComponentInfo::EnumType)person == person.Enum("FirstPerson")) {
firstPersonAttachment = attachment; firstPersonAttachment = attachment;
@@ -305,6 +306,8 @@ private:
wi.ThirdPersonEntity = thirdPersonWeapon; wi.ThirdPersonEntity = thirdPersonWeapon;
wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model"); wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model");
player["Player"]["CurrentWeapon"] = cWeapon.Info.Name;
OnEquip(cWeapon, wi); OnEquip(cWeapon, wi);
} }
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+8 -4
View File
@@ -39,6 +39,7 @@ ResourceLoading=true
[Sound] [Sound]
BGMVolume=1.0 BGMVolume=1.0
SFXVolume=1.0 SFXVolume=1.0
AnnouncerVolume=1.0
Announcer=female Announcer=female
[SSAO] [SSAO]
@@ -75,13 +76,16 @@ NumIterations=9
TextureQuality=0 TextureQuality=0
[GLOW] [GLOW]
Quality=3 Quality=1
[GLOW1] [GLOW1]
NumIterations=5 NumIterations=2
[GLOW2] [GLOW2]
NumIterations=9 NumIterations=4
[GLOW3] [GLOW3]
NumIterations=13 NumIterations=6
[MSAA]
Level = 0;
-2
View File
@@ -30,5 +30,3 @@ F2=PerformanceTimingResetAllTimers
F3=PerformanceTimingCreateExcelData F3=PerformanceTimingCreateExcelData
Comma=SwapToClassPick Comma=SwapToClassPick
Period=SwapToTeamPick Period=SwapToTeamPick
Enter=PickClass,1
F5=DisconnectFromServer
+3
View File
@@ -68,6 +68,9 @@
<xs:include schemaLocation="Components/NetworkComponent.xsd"/> <xs:include schemaLocation="Components/NetworkComponent.xsd"/>
<xs:include schemaLocation="Components/ServerIdentity.xsd"/> <xs:include schemaLocation="Components/ServerIdentity.xsd"/>
<xs:include schemaLocation="Components/ServerList.xsd"/> <xs:include schemaLocation="Components/ServerList.xsd"/>
<xs:include schemaLocation="Components/Unpickable.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/> <xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/> <xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
<xs:include schemaLocation="Components/EndScreen.xsd"/>
<xs:include schemaLocation="Components/Fade.xsd"/>
</xs:schema> </xs:schema>
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<BoostAssault xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostAssault.xsd"> <BoostAssault xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostAssault.xsd">
<StrengthOfEffect>2</StrengthOfEffect> <StrengthOfEffect>1.35</StrengthOfEffect>
</BoostAssault> </BoostAssault>
+1 -1
View File
@@ -2,5 +2,5 @@
<Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd"> <Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd">
<FOV>59</FOV> <!-- 90 horizontal FOV at 1080p --> <FOV>59</FOV> <!-- 90 horizontal FOV at 1080p -->
<NearClip>0.01</NearClip> <NearClip>0.01</NearClip>
<FarClip>5000</FarClip> <FarClip>300</FarClip>
</Camera> </Camera>
@@ -2,4 +2,5 @@
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd"> <CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
<RespawnTime>0.0</RespawnTime> <RespawnTime>0.0</RespawnTime>
<MaxRespawnTime>8.0</MaxRespawnTime> <MaxRespawnTime>8.0</MaxRespawnTime>
<ResetCountdown>10.0</ResetCountdown>
</CapturePointGameMode> </CapturePointGameMode>
@@ -12,6 +12,9 @@
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0"> <xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="ResetCountdown" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>The map will be reset when time reaches 0.</xs:documentation></xs:annotation>
</xs:element>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd"> <DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
<Slot><Primary/></Slot> <Slot><Primary/></Slot>
<MagazineAmmo>8</MagazineAmmo> <MagazineAmmo>9999</MagazineAmmo>
<MagazineSize>8</MagazineSize> <MagazineSize>8</MagazineSize>
<Ammo>64</Ammo> <Ammo>64</Ammo>
<MaxAmmo>64</MaxAmmo> <MaxAmmo>64</MaxAmmo>
<BaseDamage>90</BaseDamage> <BaseDamage>90</BaseDamage>
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees --> <SpreadAngle>10</SpreadAngle>
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees --> <MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
<NumPellets>10</NumPellets> <NumPellets>9</NumPellets>
<RPM>120</RPM> <RPM>120</RPM>
<ViewPunch>0.03</ViewPunch> <ViewPunch>0.15</ViewPunch>
<ViewReturnSpeed>0.2</ViewReturnSpeed> <ViewReturnSpeed>0.3</ViewReturnSpeed>
<ReloadTime>0.5</ReloadTime> <ReloadTime>0.5</ReloadTime>
<TriggerHeld>false</TriggerHeld> <TriggerHeld>false</TriggerHeld>
<FireCooldown>0</FireCooldown> <FireCooldown>0</FireCooldown>
@@ -36,7 +36,7 @@
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="SpreadAngle" type="t:float" minOccurs="0"> <xs:element name="SpreadAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>The spread angle radius.</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0"> <xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<EndScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EndScreen.xsd">
</EndScreen>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="EndScreen">
<xs:annotation>
<xs:documentation>Put this on the camera that will show the final screen.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
@@ -1,19 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ExplosionEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExplosionEffect.xsd"> <ExplosionEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExplosionEffect.xsd">
<ExplosionOrigin X="0" Y="0" Z="0"/> <ExplosionOrigin X="0" Y="0" Z="0"/>
<TimeSinceDeath>0</TimeSinceDeath> <TimeSinceDeath>0.0</TimeSinceDeath>
<ExplosionDuration>2</ExplosionDuration> <ExplosionDuration>2.0</ExplosionDuration>
<Speed>1</Speed> <Speed>1</Speed>
<Delay>0</Delay> <Delay>0</Delay>
<!--<Gravity>1</Gravity>--> <!--<Gravity>1</Gravity>-->
<!--<GravityForce>1</GravityForce>--> <!--<GravityForce>1</GravityForce>-->
<!--<ObjectRadius>2</ObjectRadius>--> <!--<ObjectRadius>2</ObjectRadius>-->
<EndColor R="0" G="0" B="0" A="0"/> <EndColor R="0" G="0" B="0" A="0"/>
<Randomness>0</Randomness> <Randomness>false</Randomness>
<RandomnessScalar>1</RandomnessScalar> <RandomnessScalar>1.0</RandomnessScalar>
<Velocity X="2" Y="2"/> <Velocity X="2" Y="2"/>
<ColorByDistance>0</ColorByDistance> <ColorByDistance>false</ColorByDistance>
<!--<ReverseAnimation>0</ReverseAnimation>-->
<!--<Wireframe>0</Wireframe>--> <!--<Wireframe>0</Wireframe>-->
<ExponentialAccelaration>0</ExponentialAccelaration> <ExponentialAccelaration>false</ExponentialAccelaration>
<Pulsate>false</Pulsate>
<Reverse>false</Reverse>
<ColorDistanceScalar>1.0</ColorDistanceScalar>
</ExplosionEffect> </ExplosionEffect>
@@ -44,15 +44,21 @@
<xs:element name="ColorByDistance" type="t:bool" minOccurs="0"> <xs:element name="ColorByDistance" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Change the color by its moved distance instead of by its time</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Change the color by its moved distance instead of by its time</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<!--<xs:element name="ReverseAnimation" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Implosions are cooler</xs:documentation></xs:annotation>
</xs:element>-->
<!--<xs:element name="Wireframe" type="t:bool" minOccurs="0"> <!--<xs:element name="Wireframe" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Enable/disable wireframe</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Enable/disable wireframe</xs:documentation></xs:annotation>
</xs:element>--> </xs:element>-->
<xs:element name="ExponentialAccelaration" type="t:bool" minOccurs="0"> <xs:element name="ExponentialAccelaration" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Linear/Exponential accelaration</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Linear/Exponential accelaration</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="Pulsate" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Pulsate the effect</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Reverse" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Reverse the effect</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="ColorDistanceScalar" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>Scale the distance of the color change</xs:documentation></xs:annotation>
</xs:element>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Fade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Fade.xsd">
<FadeTime>1</FadeTime>
<Time>0</Time>
<Out>true</Out>
<Loop>true</Loop>
<Reverse>false</Reverse>
</Fade>
+23
View File
@@ -0,0 +1,23 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="Fade">
<xs:complexType>
<xs:all>
<xs:element name="FadeTime" type="t:double" minOccurs="0"/>
<xs:element name="Time" type="t:double" minOccurs="0"/>
<xs:element name="Out" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the entity should fade out or in.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Loop" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the effect should loop when it is done.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Reverse" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the entity should reverse the fade after finishing, this will double the speed.</xs:documentation></xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+5 -1
View File
@@ -1,2 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd"/> <PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd">
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
<SniperFile></SniperFile>
</PlayerSpawn>
@@ -7,5 +7,12 @@
<xs:annotation> <xs:annotation>
<xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation> <xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="AssaultFile" type="t:string" minOccurs="0"/>
<xs:element name="DefenderFile" type="t:string" minOccurs="0"/>
<xs:element name="SniperFile" type="t:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element> </xs:element>
</xs:schema> </xs:schema>
@@ -6,11 +6,15 @@
<BaseDamage>20</BaseDamage> <BaseDamage>20</BaseDamage>
<RPM>500</RPM> <RPM>500</RPM>
<Automatic>false</Automatic> <Automatic>false</Automatic>
<ViewPunch>0.01</ViewPunch> <ViewPunch>0.05</ViewPunch>
<ReloadTime>0.5</ReloadTime> <MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
<ViewReturnSpeed>0.2</ViewReturnSpeed>
<ReloadTime>1.0</ReloadTime>
<EquipTime>0.5</EquipTime> <EquipTime>0.5</EquipTime>
<TriggerHeld>false</TriggerHeld> <TriggerHeld>false</TriggerHeld>
<FireCooldown>0</FireCooldown> <FireCooldown>0</FireCooldown>
<ReloadQueued>false</ReloadQueued>
<IsReloading>false</IsReloading> <IsReloading>false</IsReloading>
<ReloadTimer>0</ReloadTimer> <ReloadTimer>0</ReloadTimer>
<CurrentTravel>0</CurrentTravel>
</SidearmWeapon> </SidearmWeapon>
@@ -36,6 +36,12 @@
<xs:element name="ViewPunch" type="t:float" minOccurs="0"> <xs:element name="ViewPunch" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="ViewReturnSpeed" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>The speed in radians per second the view returns to its original position after being punched</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="ReloadTime" type="t:double" minOccurs="0"> <xs:element name="ReloadTime" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
</xs:element> </xs:element>
@@ -44,8 +50,10 @@
</xs:element> </xs:element>
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/> <xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/> <xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/> <xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/> <xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
<xs:element name="CurrentTravel" type="t:float" minOccurs="0"/>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+2 -2
View File
@@ -4,7 +4,7 @@
<Gain>1.0</Gain> <Gain>1.0</Gain>
<Pitch>1.0</Pitch> <Pitch>1.0</Pitch>
<Loop>false</Loop> <Loop>false</Loop>
<MaxDistance>20.0</MaxDistance> <MaxDistance>220.0</MaxDistance>
<RollOffFactor>1.0</RollOffFactor> <RollOffFactor>10</RollOffFactor>
<ReferenceDistance>1.0</ReferenceDistance> <ReferenceDistance>1.0</ReferenceDistance>
</SoundEmitter> </SoundEmitter>
+1
View File
@@ -10,5 +10,6 @@
<KeepRatioY>false</KeepRatioY> <KeepRatioY>false</KeepRatioY>
<KeepRatio>false</KeepRatio> <KeepRatio>false</KeepRatio>
<Linear>true</Linear> <Linear>true</Linear>
<ClampToBorder>false</ClampToBorder>
<BlurBackground>false</BlurBackground> <BlurBackground>false</BlurBackground>
</Sprite> </Sprite>
+3
View File
@@ -39,6 +39,9 @@
<xs:element name="Linear" type="t:bool" minOccurs="0"> <xs:element name="Linear" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If it should use Linear or Nearest sampling method.</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>If it should use Linear or Nearest sampling method.</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="ClampToBorder" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If it should clamp to border or repeat the texture.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="BlurBackground" type="t:bool" minOccurs="0"> <xs:element name="BlurBackground" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Wether the background should be blurred begind this sprite.</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Wether the background should be blurred begind this sprite.</xs:documentation></xs:annotation>
</xs:element> </xs:element>
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Unpickable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Unpickable.xsd">
</Unpickable>
@@ -0,0 +1,11 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="Unpickable">
<xs:annotation>
<xs:documentation>Makes the entity unpickable</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
+94
View File
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="RayBlue">
<Components>
<c:Transform>
<Orientation X="0" Y="0.174532995" Z="0"/>
<Scale X="0" Y="1" Z="100"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="RayBlue">
<Components>
<c:Transform>
<Scale X="0" Y="1" Z="100"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+114
View File
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:SceneLight>
<AmbientColor A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
<Gamma>1</Gamma>
<Exposure>0.82000017166137695</Exposure>
</c:SceneLight>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Collidable/>
<c:Model>
<GlowIntensity>1.0199999809265137</GlowIntensity>
<Resource>Models/Props/Walls/SciFiWallTop.mesh</Resource>
<Color A="1" B="3.92156863" G="1" R="1"/>
<Shadow>false</Shadow>
</c:Model>
<c:Transform>
<Position X="0" Y="58.718792" Z="15.6310005"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.279000014" Y="1" Z="0.279000014"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Collidable/>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Props/Pillars/SciFiPillar2Blue.mesh</Resource>
<Shadow>false</Shadow>
</c:Model>
<c:Transform>
<Position X="-14.4384613" Y="-1.2316848" Z="0"/>
<Orientation X="0" Y="2.64800024" Z="0"/>
<Scale X="2" Y="3.60000014" Z="1.9000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Collidable/>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Props/Pillars/SciFiPillar2Blue.mesh</Resource>
<Shadow>false</Shadow>
</c:Model>
<c:Transform>
<Position X="14.3019333" Y="-1.12725353" Z="0"/>
<Orientation X="0" Y="3.84800029" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Dir">
<Components>
<c:DirectionalLight>
<Color A="1" B="0.725490212" G="0.75686276" R="0.741176486"/>
<Intensity>1.0699999332427979</Intensity>
</c:DirectionalLight>
<c:Transform>
<Orientation X="3.68318534" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Cam">
<Components>
<c:Camera/>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
<Shadow>false</Shadow>
<NormalMap>false</NormalMap>
<DiffuseTexture>false</DiffuseTexture>
<SpecularMap>false</SpecularMap>
<GlowMap>false</GlowMap>
</c:Model>
<c:Transform>
<Position X="0.100000001" Y="-0.0670000017" Z="-32.8670006"/>
<Orientation X="0" Y="3.1400001" Z="0"/>
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawn">
<Components>
<c:PlayerSpawn>
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
<SniperFile></SniperFile>
</c:PlayerSpawn>
<c:Model>
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
</c:Model>
<c:Spawner>
<EntityFile></EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.100000001" Y="2.8398931" Z="-29.0827847"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+12 -7
View File
@@ -2,21 +2,26 @@
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:NetworkComponent/>
<c:AmmoPickup/> <c:AmmoPickup/>
<c:Model> <c:Trigger/>
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
</c:Model>
<c:RaptorCopter> <c:RaptorCopter>
<Speed>8</Speed> <Speed>8</Speed>
<Axis X="0" Y="0.100000001" Z="0"/> <Axis X="0" Y="0.100000001" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Model>
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
</c:Model>
<c:NetworkComponent/>
<c:PointLight>
<Color A="1" B="1" G="0.0823529437" R="1"/>
<Radius>1.5</Radius>
<Intensity>3</Intensity>
</c:PointLight>
<c:Transform> <c:Transform>
<Position X="0" Y="2.36784196" Z="0"/> <Position X="0" Y="2.36784196" Z="-0.0281207096"/>
<Orientation X="0" Y="18843.5469" Z="0"/>
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/> <Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
<Orientation X="0" Y="18717.9453" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>

Some files were not shown because too many files have changed in this diff Show More