Compare commits

...

131 Commits

Author SHA1 Message Date
Jocke ac0c6ff952 WIP started on reliable messages 2016-01-27 18:22:28 +01:00
stiffly 06f64f8fbf Added a player name to the PlayerSpawned event. When a player has spawned the server sends the name to the client which publishes the event. 2016-01-24 22:00:38 +01:00
Jace 0c56a05144 Merge branch 'master' of github.com:teamfisk/TacticalZ
# Conflicts:
#	resources/Schema/Entities/Player.xml
#	src/Engine/Network/Server.cpp
2016-01-24 21:21:51 +01:00
Jace 382eff169f Server refactoring to remove player dependency and lots of fixes. 2016-01-24 21:20:43 +01:00
Tleety d4797b0808 Some entity files 2016-01-24 21:08:01 +01:00
Jace 25890c8d6c Merge remote-tracking branch 'origin/Networking' 2016-01-24 19:01:15 +01:00
Jace 0fb1dbcae1 Client now has authority over its own absolute position and orientation until we have reliable input messaging 2016-01-24 19:00:50 +01:00
Jace 9f3d887ac4 Networking bugfixes 2016-01-24 18:37:36 +01:00
Jace b4081b3e45 Merge remote-tracking branch 'origin/Networking'
# Conflicts:
#	src/Engine/Network/Client.cpp
#	src/Game/Systems/WeaponSystem.cpp
2016-01-24 18:36:37 +01:00
stiffly 8d61632c26 No longer spawns a f**king sphere. 2016-01-24 17:40:43 +01:00
stiffly 2eaad2aa00 Client now responds to deleted entity and component in server 2016-01-24 17:16:26 +01:00
Jace 235b26ad61 WIP shoot 2016-01-24 17:16:18 +01:00
Viktor Ljung f80fb5eda8 Merge pull request #52 from teamfisk/Importer
Importer
2016-01-24 17:05:02 +01:00
antc13 aa115befa9 UnitRaptor is now displayed while models are being loaded in. 2016-01-24 17:04:12 +01:00
antc13 aa20b48188 Merge remote-tracking branch 'origin/master' into Importer
# Conflicts:
#	resources/Schema/Entities/MovementTest.xml
#	resources/Schema/Entities/Player.xml
2016-01-24 16:22:22 +01:00
antc13 96a735c542 Changed .obj to .mesh for all meshes. 2016-01-24 16:12:31 +01:00
Jace 3261e21d96 Coloring players depending on team and created a blue spawn in MovementTest 2016-01-24 15:46:01 +01:00
antc13 666f1fd878 Removed temp variables & the "forced" animation in DrawFinalPass 2016-01-24 15:30:20 +01:00
Jace 373bb33cf0 Player jumping taking air acceleration into account 2016-01-24 15:20:34 +01:00
antc13 4c5d17b203 Merge remote-tracking branch 'origin/master' into Importer
# Conflicts:
#	resources/Schema/Entities/RenderingWorld.xml
#	resources/Shaders/ForwardPlus.frag.glsl
#	src/Engine/Editor/EditorSystem.cpp
#	src/Engine/Network/Server.cpp
#	src/Engine/Rendering/DrawFinalPass.cpp
#	src/Tests/OctTreeTestGameClass.cpp
#	src/Tests/OctTreeTestHardCodedTestWorld.h
#	src/Tests/ResourceManagerTest.cpp
2016-01-24 14:40:52 +01:00
antc13 8286d052b3 Changed color values from floats to glm::vec4 2016-01-24 14:38:17 +01:00
Jace aaa11d2109 Merge remote-tracking branch 'origin/master' into PlayerMovement 2016-01-24 14:18:23 +01:00
Jace 67477ff3ae EEntityDeleted and EComponentDeleted events published by World 2016-01-24 13:49:45 +01:00
antc13 b5b1140f5c Custom Animations should now work. We also save color values if there's no texture. 2016-01-24 13:28:40 +01:00
Jocke 7567f47a68 Weapon system now searches parents for health component (stops at first health component). 2016-01-24 11:56:46 +01:00
Jocke 97d70f8e32 Fixed in client for shoot event. Weapon system now damages health on any target not only players. 2016-01-24 11:36:01 +01:00
antc13 3baa988ad4 Changed .obj files to our own format. DummyScene.mesh may be broken. 2016-01-23 20:35:58 +01:00
Jace 1ce9128da8 Source-like movement 2016-01-23 19:45:23 +01:00
stiffly a28748b35d Merge remote-tracking branch 'origin/master' into Networking 2016-01-23 18:42:16 +01:00
Viktor Ljung 132de88d28 Merge pull request #50 from teamfisk/Forward+
Forward+
2016-01-23 18:23:16 +01:00
viktorljung df485ccf7b Merge branch 'master' into Forward+ 2016-01-23 18:21:35 +01:00
viktorljung 85a4d98c81 Revert "Revert "Merge pull request #43 from teamfisk/Forward+""
This reverts commit bd62b5873d.
2016-01-23 18:21:10 +01:00
viktorljung ef020a3770 Text fixed 2016-01-23 18:17:20 +01:00
viktorljung 160b7183b2 WIP 2016-01-23 18:07:07 +01:00
antc13 f1835fd89c Animations PROBABLY works fine if all joints got keyframes. 2016-01-23 18:02:42 +01:00
stiffly ecdb5ed07d Merge remote-tracking branch 'origin/master' into Networking 2016-01-23 17:51:06 +01:00
Tleety 5edf5a41f1 Transparency bug fix 2016-01-23 16:45:26 +01:00
Jocke 6d2c656a04 Merge remote-tracking branch 'origin/Networking' into Networking 2016-01-23 16:41:42 +01:00
Jocke 2bf0434bcb Remade Snapshot logic from component based to entity based. 2016-01-23 16:40:38 +01:00
viktorljung ff6ec82a6c AMD fix 2016-01-23 16:27:01 +01:00
viktorljung bd62b5873d Revert "Merge pull request #43 from teamfisk/Forward+"
This reverts commit d59ab5aba2, reversing
changes made to bef95235d0.
2016-01-23 15:57:26 +01:00
Jace 666ef6589e Crouching! 2016-01-23 15:06:47 +01:00
Jace b83d773627 Infinite respawning for now 2016-01-23 15:06:41 +01:00
Viktor Ljung d59ab5aba2 Merge pull request #43 from teamfisk/Forward+
Bloom render pass and HDR colors
2016-01-23 14:58:10 +01:00
Tleety f623232a2b Removed a temp variable. 2016-01-23 14:52:29 +01:00
Tleety 6a18cb88af Merge remote-tracking branch 'origin/master' into Forward+
# Conflicts:
#	include/Engine/Rendering/Renderer.h
#	src/Engine/Rendering/PickingPass.cpp
#	src/Engine/Rendering/Renderer.cpp
2016-01-23 13:59:21 +01:00
Tleety b499f4b020 Fixed some rendering bugs and some code refactoring 2016-01-23 12:17:38 +01:00
Jace 482689fd48 fixup! Moved FirstPersonInputController implementation out of header 2016-01-23 12:16:40 +01:00
Jace 32f73201c5 Basic jumping! 2016-01-23 12:15:33 +01:00
Jace 3aeeb3cad5 Moved FirstPersonInputController implementation out of header 2016-01-23 12:15:32 +01:00
Jace 4d5cbb6057 fixup! Added EntityWrapper::IsChildOf and made snapshot interpolation and rendering exceptions for player less hacky 2016-01-23 12:14:29 +01:00
Jace bef95235d0 Merge pull request #41 from teamfisk/TextRendering
Text rendering
2016-01-23 11:51:11 +01:00
viktorljung 9a23d8887a Merge remote-tracking branch 'origin/master' into TextRendering
# Conflicts:
#	include/Engine/Rendering/RenderSystem.h
#	src/Engine/Rendering/RenderSystem.cpp
2016-01-23 11:48:10 +01:00
Jace db0e67b9bd Added EntityWrapper::IsChildOf and made snapshot interpolation and rendering exceptions for player less hacky 2016-01-23 11:44:16 +01:00
viktorljung e4513376bb fixup! Changed name and made a TextPassState 2016-01-23 11:39:10 +01:00
viktorljung 445248af55 Changed name and made a TextPassState 2016-01-23 11:38:31 +01:00
Jace 64a7239b17 Merge pull request #46 from teamfisk/CapturePointCrashFixBranch
Crash fix for: if you delete a team component in editor.
2016-01-23 11:10:57 +01:00
Jace 31e7340daf Ignoring interpolation and rendering for local player entities! 2016-01-23 00:40:37 +01:00
Jace 3ac3311c0c "inline" caused missing symbol when compiling in Release for some reason 2016-01-23 00:38:11 +01:00
Jace 90867b094a Merge remote-tracking branch 'origin/TextRendering' into Networking
# Conflicts:
#	include/Engine/Rendering/RenderSystem.h
#	src/Engine/Rendering/RenderSystem.cpp
2016-01-22 22:08:56 +01:00
Jace 55ee2bb3bf Player input properly separated from editor input and server 2016-01-22 21:35:31 +01:00
stiffly 406b730ef3 Sends entity names. Temporarily 2016-01-22 19:07:20 +01:00
stiffly b37b20b7d8 Didn't bulid lol. Fixed. 2016-01-22 17:57:31 +01:00
stiffly 750442d224 Merge remote-tracking branch 'origin/Networking' into Networking 2016-01-22 17:49:56 +01:00
stiffly 389e057611 EPlayerSpawned special logic added to server and client. 2016-01-22 17:49:21 +01:00
Jace 74d9bae896 Added conditional spawning based on whether the running instance is a server or not 2016-01-22 17:34:57 +01:00
stiffly 74c95089ea Merge remote-tracking branch 'origin/PlayerMovement' into Networking 2016-01-22 16:19:35 +01:00
Jace ca2aab449e Basic movement and camera management between players and editor 2016-01-22 16:12:51 +01:00
Tleety 7498cebf5e Merge remote-tracking branch 'origin/master' into Forward+
# Conflicts:
#	src/Engine/Rendering/DrawFinalPassState.cpp
#	src/Engine/Rendering/PickingPass.cpp
#	src/Engine/Rendering/Renderer.cpp
2016-01-22 15:57:38 +01:00
Tleety 2b8debbfff Added MipMap texture generation 2016-01-22 15:55:32 +01:00
stiffly 08c476e9e3 Added kick logic to the server. Also typedefed. 2016-01-22 15:42:36 +01:00
stiffly 10c3b475bf Merge remote-tracking branch 'origin/Networking' into Networking
# Conflicts:
#	src/Engine/Network/Client.cpp
#	src/Engine/Network/Server.cpp
2016-01-22 13:19:51 +01:00
stiffly 08fcdb382b Used config for a lot of things 2016-01-22 13:18:53 +01:00
stiffly b1ea5429ce Used config for a lot of things 2016-01-22 11:53:04 +01:00
stiffly fcc9d64e7a Now publishes an EPlayerDisconnected event 2016-01-22 10:58:10 +01:00
Tleety caf55fb8d1 Small fix to the bloom light, now feels smoother. 2016-01-22 10:52:45 +01:00
stiffly 7a95880e10 Merge remote-tracking branch 'origin/master' into Networking 2016-01-22 10:36:11 +01:00
Jocke 6cd073c3c8 Added network metrics logging and reactored code. 2016-01-22 10:32:54 +01:00
Jace 1e3fc1ae2d Created EPlayerSpawned that gets published when a player spawns 2016-01-22 10:16:35 +01:00
verysecrethero 6f739e22f3 Crash fix for: if you delete a team component in editor. 2016-01-22 10:10:39 +01:00
Tleety afe43c5f44 Shader will now handle Glowmaps. However the load code is not there yet. 2016-01-21 14:53:47 +01:00
Tleety 70bbc5ed0a Normals scaling with model scale bug fixed. 2016-01-21 13:52:43 +01:00
Tleety 983f90504d Bloom effect added, will have to see if it needs improving. Also added HDR colors and gamma correction. 2016-01-21 12:02:28 +01:00
viktorljung ea9c4d19d0 Merge remote-tracking branch 'origin/master' into TextRendering
# Conflicts:
#	include/Game/Game.h
2016-01-21 10:19:32 +01:00
viktorljung f3bfe388af Clean up 2016-01-21 10:16:03 +01:00
antc13 c984f76b2f Importing & Reading Custom animation data. TODO: Shaders. 2016-01-20 18:36:03 +01:00
Tleety 86824f1b1f Colors above value 1 is now added to the bloomtexture, and will be used to get a glow effect in later stage. 2016-01-20 15:23:49 +01:00
Tleety 78a1037983 WIP
DrawScreenQuad implemented and working.
Started work on HDR coloring.
2016-01-20 13:34:56 +01:00
antc13 84b7cf165c Reduced the chance of crashing in Export. 2016-01-20 11:46:32 +01:00
antc13 386e76f642 Puyshing 2016-01-20 09:49:54 +01:00
antc13 a47317bb32 Merge branch 'master' of https://github.com/teamfisk/TacticalZ into Importer
# Conflicts:
#	include/Engine/Collision/Collision.h
#	resources/Shaders/ForwardPlus.frag.glsl
#	resources/Shaders/ForwardPlus.vert.glsl
2016-01-19 18:26:45 +01:00
antc13 e643581971 Commit in order to pull from Master. 2016-01-19 18:21:27 +01:00
antc13 3826142e94 Now supporting multiple material per mesh. Simon changed glDrawElementsBaseVertex to glDrawElements in DrawFinalPass.cpp Hallelulijah! 2016-01-19 17:40:34 +01:00
viktorljung ce27b224df Merge remote-tracking branch 'origin/master' into TextRendering
# Conflicts:
#	include/Engine/Rendering/RenderQueue.h
#	include/Engine/Rendering/RenderSystem.h
#	include/Engine/Rendering/Renderer.h
#	src/Engine/Rendering/RenderSystem.cpp
2016-01-19 17:27:09 +01:00
viktorljung f0763bc2a3 Font loading crash fixed 2016-01-19 17:18:18 +01:00
viktorljung dbe56280a6 Resolution fixed and Centered text 2016-01-19 11:45:34 +01:00
antc13 2a3009212a Importing custom mesh without material. 2016-01-18 19:37:55 +01:00
viktorljung c4594524da Better default values and documentation 2016-01-18 17:51:17 +01:00
viktorljung 2a93e2ae7f Merge remote-tracking branch 'origin/master' into TextRendering
# Conflicts:
#	include/Engine/Rendering/RenderQueue.h
#	include/Engine/Rendering/RenderSystem.h
#	include/Game/Game.h
#	resources/Schema/Types/Entity.xsd
#	src/Engine/Rendering/RenderSystem.cpp
2016-01-18 17:44:26 +01:00
viktorljung 92553f1e93 text size can now be entered in the filepath with a comma separator, like this "filepath,16" 2016-01-18 17:17:12 +01:00
antc13 16c39df439 Merge branch 'master' of https://github.com/teamfisk/TacticalZ into Importer
# Conflicts:
#	include/Engine/Collision/Collision.h
#	src/Engine/Rendering/Model.cpp
#	src/Engine/Rendering/RawModelAssimp.cpp
2016-01-15 18:00:30 +01:00
antc13 8437b9c734 Commit for Pull 2016-01-15 17:58:26 +01:00
antc13 6317a6092d Merge branch 'MayaExporter' of https://github.com/teamfisk/TacticalZ into Importer 2016-01-15 16:51:10 +01:00
viktorljung 7faed50507 Merge remote-tracking branch 'origin/master' into TextRendering 2016-01-15 13:24:24 +01:00
viktorljung 6fbb962b5e Merge branch 'Rendering' into TextRendering
# Conflicts:
#	include/Engine/Rendering/RenderQueue.h
#	include/Engine/Rendering/RenderQueueFactory.h
#	include/Engine/Rendering/Renderer.h
#	include/Engine/Rendering/ShaderProgram.h
#	include/Game/Game.h
#	resources/Schema/Components.xsd
#	resources/Schema/Entities/Test.xml
#	resources/Schema/Types/Entity.xsd
#	src/Engine/Rendering/RenderQueueFactory.cpp
#	src/Engine/Rendering/Renderer.cpp
#	src/Game/Game.cpp
2016-01-15 13:23:42 +01:00
antc13 4e70439653 Merge branch 'Importer' of https://github.com/teamfisk/TacticalZ into Importer 2016-01-15 09:48:42 +01:00
antc13 24486c314d Reworked the Exporter. 2016-01-13 14:03:58 +01:00
antc13 7b62dc19bf Spitting out Meshes & Animation Data to file. 2016-01-12 15:39:29 +01:00
antc13 0e90382fd1 Merge branch 'master' of https://github.com/teamfisk/TacticalZ into MayaExporter 2016-01-11 13:09:09 +01:00
antc13 1667358e0c We now export animations. 2016-01-08 16:47:04 +01:00
FakeShemp eb5fca898f Fix small bug with push_back order
Commited directly from GitHub. Blame it if something explodes.
2015-12-21 12:55:25 +01:00
antc13 c9db46564f Spitting out files WIP 2015-12-18 16:21:07 +01:00
Teejoon 509a989d3b Merge branch 'MayaExporter' of github.com:teamfisk/TacticalZ into MayaExporter
Conflicts:
	tools/MayaExporter/MayaExporter/Menu.cpp
2015-12-18 10:07:44 +01:00
Teejoon bc4cc5db54 Changed how we get skeletons. Made so that we could get the bind pose for each skeleton in the scene 2015-12-18 10:03:00 +01:00
antc13 73708ec706 You can now add/remove animation clips. 2015-12-17 14:58:46 +01:00
antc13 67017fcaf4 Stepping through the timeline. 2015-12-16 11:33:42 +01:00
antc13 498afb3a5e Merge branch 'MayaExporter' of https://github.com/teamfisk/TacticalZ into MayaExporter
# Conflicts:
#	tools/MayaExporter/MayaExporter/Menu.h
2015-12-15 15:41:18 +01:00
antc13 4e535c1102 File Writer WIP. Rework soon™ 2015-12-15 15:24:46 +01:00
FakeShemp 1689370356 Export the skeletons
Not really tested though
2015-12-15 11:49:59 +01:00
viktorljung 123c198e19 Text component added and Text render queue 2015-12-14 14:48:24 +01:00
antc13 60b3ce89b2 Skeleton/Joints WIP 2015-12-14 12:59:54 +01:00
viktorljung 9bd3da409d Added Font to ResourceManager 2015-12-11 16:53:51 +01:00
viktorljung a8a38716bd Text renderer up and working, needs more work to be compatible with the ResourceManager and the Entity Component system 2015-12-11 16:12:29 +01:00
viktorljung 8f007f6daf Added Freetype 2.62 config and option files 2015-12-11 11:26:41 +01:00
viktorljung 4c2ce3882e Added fonts folder and font 2015-12-11 11:07:22 +01:00
viktorljung 7b6902eafe Merge remote-tracking branch 'origin/master' into TextRendering 2015-12-11 10:55:10 +01:00
viktorljung 46854a63dd Text rendering includes 2015-12-11 10:54:52 +01:00
viktorljung dc66891d60 Added Freetype 2.62 2015-12-10 11:22:56 +01:00
antc13 a22d086e60 Tested some of the Material Code. Seems to work. The project should now be following the code standard properly (hopefully). 2015-12-10 11:18:34 +01:00
FakeShemp 74c1beed20 gitignore 2015-12-09 12:03:01 +01:00
FakeShemp c8cb0ee939 Grab all materials 2015-12-09 11:58:49 +01:00
159 changed files with 6470 additions and 1232 deletions
+8
View File
@@ -4,3 +4,11 @@ bin/
lib/ lib/
# Because apparently nobody has any self control # Because apparently nobody has any self control
*.orig *.orig
*.suo
*.sdf
tools/MayaExporter/MayaExporter/x64/Debug/
tools/MayaExporter/x64/Debug/
tools/MayaExporter/MayaExporter/Debug/
tools/MayaExporter/MayaExporter/GeneratedFiles/
+1 -1
Submodule assets updated: 6ffb46e155...068fbb2d20
+2 -1
View File
@@ -10,7 +10,8 @@
#include "../Core/Ray.h" #include "../Core/Ray.h"
#include "../Core/AABB.h" #include "../Core/AABB.h"
#include "../Rendering/RawModel.h" #include "Rendering/RawModelCustom.h"
//#include "Rendering/RawModelAssimp.h"
#include "../Core/Transform.h" #include "../Core/Transform.h"
#include "../Core/Entity.h" #include "../Core/Entity.h"
#include "../Core/EntityWrapper.h" #include "../Core/EntityWrapper.h"
+21
View File
@@ -0,0 +1,21 @@
#ifndef EComponentDeleted_h__
#define EComponentDeleted_h__
#include "../Common.h"
#include "Event.h"
#include "Entity.h"
namespace Events
{
struct ComponentDeleted : Event
{
EntityID Entity;
std::string ComponentType;
// True if the component was deleted as a result of the entity it was attached to being deleted
bool Cascaded;
};
}
#endif
+19
View File
@@ -0,0 +1,19 @@
#ifndef EEntityDeleted_h__
#define EEntityDeleted_h__
#include "Event.h"
#include "Entity.h"
namespace Events
{
struct EntityDeleted : Event
{
EntityID DeletedEntity;
// True if the entity deletion was triggered because the entity's parent was deleted before it
bool Cascaded;
};
}
#endif
+3 -3
View File
@@ -2,15 +2,15 @@
#define EPlayerDamage_h__ #define EPlayerDamage_h__
#include "EventBroker.h" #include "EventBroker.h"
#include "../Core/Entity.h" #include "../Core/EntityWrapper.h"
namespace Events namespace Events
{ {
struct PlayerDamage : Event struct PlayerDamage : Event
{ {
double DamageAmount; EntityWrapper Player;
EntityID PlayerDamagedID; double Damage;
}; };
} }
+20
View File
@@ -0,0 +1,20 @@
#ifndef EPlayerSpawned_h__
#define EPlayerSpawned_h__
#include "Core/Event.h"
#include "Core/EntityWrapper.h"
namespace Events
{
struct PlayerSpawned : Event
{
int PlayerID;
EntityWrapper Player;
EntityWrapper Spawner;
std::string PlayerName;
};
}
#endif
+2 -4
View File
@@ -2,16 +2,14 @@
#define EShoot_h__ #define EShoot_h__
#include "EventBroker.h" #include "EventBroker.h"
#include "../Core/Entity.h" #include "../Core/EntityWrapper.h"
#include "Engine/GLM.h"
namespace Events namespace Events
{ {
struct Shoot : Event struct Shoot : Event
{ {
//ID for who made the shot EntityWrapper Player;
EntityID shooter;
}; };
} }
+4 -1
View File
@@ -23,8 +23,11 @@ struct EntityWrapper
static const EntityWrapper Invalid; static const EntityWrapper Invalid;
bool HasComponent(const std::string& componentName); bool HasComponent(const std::string& componentType);
EntityWrapper Parent(); EntityWrapper Parent();
EntityWrapper FirstChildByName(const std::string& name);
EntityWrapper FirstParentWithComponent(const std::string& componentType);
bool IsChildOf(EntityWrapper potentialParent);
bool Valid(); bool Valid();
ComponentWrapper operator[](const char* componentName); ComponentWrapper operator[](const char* componentName);
+1 -1
View File
@@ -111,7 +111,7 @@ struct Child
std::vector<ContainedObject>& m_StaticObjectsRef; std::vector<ContainedObject>& m_StaticObjectsRef;
std::vector<ContainedObject>& m_DynamicObjectsRef; std::vector<ContainedObject>& m_DynamicObjectsRef;
inline bool hasChildren() const; bool hasChildren() const;
int childIndexContainingPoint(const glm::vec3& point) const; int childIndexContainingPoint(const glm::vec3& point) const;
std::vector<int> childIndicesContainingBox(const AABB& box) const; std::vector<int> childIndicesContainingBox(const AABB& box) const;
}; };
+4 -4
View File
@@ -32,10 +32,10 @@ public:
}; };
struct FailedLoadingException : public std::exception struct FailedLoadingException : public std::exception
{ {
virtual const char* what() const throw() FailedLoadingException(char const* const _Message)
{ : std::exception(_Message)
return "Resource is failed to load."; { }
} FailedLoadingException() :std::exception("Resource failed to load.") { };
}; };
// Pretend that this is a pure virtual function that you have to implement // Pretend that this is a pure virtual function that you have to implement
+5
View File
@@ -3,13 +3,18 @@
#include "../GLM.h" #include "../GLM.h"
#include "World.h" #include "World.h"
#include "EntityWrapper.h"
namespace Transform namespace Transform
{ {
glm::vec3 AbsolutePosition(EntityWrapper entity);
glm::vec3 AbsolutePosition(World* world, EntityID entity); glm::vec3 AbsolutePosition(World* world, EntityID entity);
glm::quat AbsoluteOrientation(EntityWrapper entity);
glm::quat AbsoluteOrientation(World* world, EntityID entity); glm::quat AbsoluteOrientation(World* world, EntityID entity);
glm::vec3 AbsoluteScale(EntityWrapper entity);
glm::vec3 AbsoluteScale(World* world, EntityID entity); glm::vec3 AbsoluteScale(World* world, EntityID entity);
glm::mat4 ModelMatrix(EntityWrapper entity);
glm::mat4 ModelMatrix(EntityID entity, World* world); glm::mat4 ModelMatrix(EntityID entity, World* world);
} }
+6
View File
@@ -5,11 +5,15 @@
#include "Entity.h" #include "Entity.h"
#include "ObjectPool.h" #include "ObjectPool.h"
#include "ComponentPool.h" #include "ComponentPool.h"
#include "EventBroker.h"
class World class World
{ {
public: public:
World() = default; World() = default;
World(EventBroker* eventBroker)
: m_EventBroker(eventBroker)
{ }
~World(); ~World();
// Create empty entity // Create empty entity
@@ -46,6 +50,7 @@ public:
std::string GetName(EntityID entity) const; std::string GetName(EntityID entity) const;
private: private:
EventBroker* m_EventBroker = nullptr;
EntityID m_CurrentEntityID = 0; EntityID m_CurrentEntityID = 0;
std::unordered_map<EntityID, EntityID> m_EntityParents; std::unordered_map<EntityID, EntityID> m_EntityParents;
@@ -55,6 +60,7 @@ private:
std::unordered_map<EntityID, std::string> m_EntityNames; std::unordered_map<EntityID, std::string> m_EntityNames;
EntityID generateEntityID(); EntityID generateEntityID();
void deleteEntityRecursive(EntityID entity, bool cascaded = false);
}; };
#endif #endif
@@ -0,0 +1,115 @@
#ifndef EditorCameraInputController_h__
#define EditorCameraInputController_h__
#include <imgui/imgui.h>
#include "../Input/FirstPersonInputController.h"
#include "../Core/EMousePress.h"
#include "../Core/EMouseRelease.h"
#include "../Core/EMouseScroll.h"
#include "../Core/ConfigFile.h"
template <typename EventContext>
class EditorCameraInputController : public FirstPersonInputController<EventContext>
{
public:
EditorCameraInputController(EventBroker* eventBroker, unsigned int playerID)
: FirstPersonInputController(eventBroker, playerID)
{
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorCameraInputController::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &EditorCameraInputController::OnMouseRelease);
EVENT_SUBSCRIBE_MEMBER(m_EMouseScroll, &EditorCameraInputController::OnMouseScroll);
m_Config = ResourceManager::Load<ConfigFile>("Config.ini");
m_SpeedMultiplier = m_Config->Get<float>("Editor.CameraSpeed", 3.f);
}
virtual const glm::vec3 Movement() const override { return m_Movement * m_SpeedMultiplier; }
void Enable() { m_Enabled = true; }
void Disable() { m_Enabled = false; }
virtual bool OnCommand(const Events::InputCommand& e) override
{
if (glm::abs(e.Value) > 0 && !m_MouseLocked) {
return false;
}
ImGuiIO& io = ImGui::GetIO();
if (glm::abs(e.Value) > 0 && (io.WantCaptureKeyboard || io.WantCaptureMouse)) {
return false;
}
if (e.Command == "Jump") {
if (e.Value > 0) {
m_Movement.y = glm::max(e.Value, 1.f);
} else {
m_Movement.y = 0.f;
}
}
if (e.Command == "Crouch") {
if (e.Value > 0) {
m_Movement.y = glm::min(-e.Value, -1.f);
} else {
m_Movement.y = 0.f;
}
}
if (e.Command == "Sprint") {
if (e.Value > 0) {
m_SpeedMultiplier *= 2.f;
} else {
m_SpeedMultiplier /= 2.f;
}
}
return FirstPersonInputController::OnCommand(e);
}
protected:
ConfigFile* m_Config;
bool m_Enabled = false;
float m_SpeedMultiplier = 1.f;
EventRelay<EventContext, Events::MousePress> m_EMousePress;
bool OnMousePress(const Events::MousePress& e)
{
if (!m_Enabled) {
return false;
}
if (e.Button == GLFW_MOUSE_BUTTON_2) {
ImGuiIO& io = ImGui::GetIO();
if (!io.WantCaptureMouse) {
LockMouse();
}
}
return true;
}
EventRelay<EventContext, Events::MouseRelease> m_EMouseRelease;
bool OnMouseRelease(const Events::MouseRelease& e)
{
if (!m_Enabled) {
return false;
}
if (e.Button == GLFW_MOUSE_BUTTON_2) {
UnlockMouse();
}
return true;
}
EventRelay<EventContext, Events::MouseScroll> m_EMouseScroll;
bool OnMouseScroll(const Events::MouseScroll& e)
{
if (!m_Enabled) {
return false;
}
m_SpeedMultiplier += e.DeltaY * (0.1f * m_SpeedMultiplier);
m_Config->Set("Editor.CameraSpeed", m_SpeedMultiplier);
m_Config->SaveToDisk();
return true;
}
};
#endif
+15 -4
View File
@@ -1,7 +1,6 @@
#include "../Core/System.h" #include "../Core/System.h"
#include "../Rendering/IRenderer.h" #include "../Rendering/IRenderer.h"
#include "../Rendering/Camera.h" #include "../Rendering/Camera.h"
#include "../Rendering/DebugCameraInputController.h"
#include "../Rendering/ESetCamera.h" #include "../Rendering/ESetCamera.h"
#include "../Core/World.h" #include "../Core/World.h"
#include "../Core/SystemPipeline.h" #include "../Core/SystemPipeline.h"
@@ -10,8 +9,10 @@
#include "../Core/EntityFileParser.h" #include "../Core/EntityFileParser.h"
#include "../Core/EntityFileWriter.h" #include "../Core/EntityFileWriter.h"
#include "../Core/EMousePress.h" #include "../Core/EMousePress.h"
#include "../Input/EInputCommand.h"
#include "EditorGUI.h" #include "EditorGUI.h"
#include "EditorStats.h" #include "EditorStats.h"
#include "EditorCameraInputController.h"
class EditorSystem : public ImpureSystem class EditorSystem : public ImpureSystem
{ {
@@ -21,18 +22,24 @@ public:
void Update(double dt); void Update(double dt);
void Enable();
void Disable();
private: private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
RenderFrame* m_RenderFrame; RenderFrame* m_RenderFrame;
World* m_EditorWorld; World* m_EditorWorld;
SystemPipeline* m_EditorWorldSystemPipeline; SystemPipeline* m_EditorWorldSystemPipeline;
Camera* m_EditorCamera; //Camera* m_EditorCamera;
EntityWrapper m_Camera = EntityWrapper::Invalid; EntityWrapper m_EditorCamera = EntityWrapper::Invalid;
DebugCameraInputController<EditorSystem>* m_DebugCameraInputController; EntityWrapper m_ActualCamera = EntityWrapper::Invalid;
EditorCameraInputController<EditorSystem>* m_EditorCameraInputController;
EditorGUI* m_EditorGUI; EditorGUI* m_EditorGUI;
EditorStats* m_EditorStats; EditorStats* m_EditorStats;
// State // State
double m_LastTime = 0.f;
bool m_Enabled = true;
EditorGUI::WidgetMode m_WidgetMode = EditorGUI::WidgetMode::Translate; EditorGUI::WidgetMode m_WidgetMode = EditorGUI::WidgetMode::Translate;
EntityWrapper m_Widget = EntityWrapper::Invalid; EntityWrapper m_Widget = EntityWrapper::Invalid;
EntityWrapper m_CurrentSelection = EntityWrapper::Invalid; EntityWrapper m_CurrentSelection = EntityWrapper::Invalid;
@@ -56,4 +63,8 @@ private:
bool OnMousePress(const Events::MousePress& e); bool OnMousePress(const Events::MousePress& e);
EventRelay<EditorSystem, Events::WidgetDelta> m_EWidgetDelta; EventRelay<EditorSystem, Events::WidgetDelta> m_EWidgetDelta;
bool OnWidgetDelta(const Events::WidgetDelta& e); bool OnWidgetDelta(const Events::WidgetDelta& e);
EventRelay<EditorSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e);
EventRelay<EditorSystem, Events::SetCamera> m_ESetCamera;
bool OnSetCamera(const Events::SetCamera& e);
}; };
+1 -1
View File
@@ -9,7 +9,7 @@ namespace Events
struct InputCommand : Event struct InputCommand : Event
{ {
/** Numerical ID of the player. */ /** Numerical ID of the player. */
unsigned int PlayerID; int PlayerID;
/** The command that was sent. */ /** The command that was sent. */
std::string Command; std::string Command;
/** The value of the command. */ /** The value of the command. */
+104 -47
View File
@@ -9,62 +9,119 @@ template <typename EventContext>
class FirstPersonInputController : public InputController<EventContext> class FirstPersonInputController : public InputController<EventContext>
{ {
public: public:
FirstPersonInputController(EventBroker* eventBroker, unsigned int playerID) FirstPersonInputController(EventBroker* eventBroker, int playerID);
: InputController(eventBroker)
, m_PlayerID(playerID)
{
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse);
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse);
}
const glm::quat Orientation() const { return m_Orientation; } virtual const glm::vec3 Movement() const { return m_Movement; }
virtual const glm::vec3 Rotation() const { return m_Rotation; }
virtual bool Jumping() const { return m_Jumping; }
virtual bool Crouching() const { return m_Crouching; }
void LockMouse() void LockMouse();
{ void UnlockMouse();
Events::LockMouse e; virtual bool OnCommand(const Events::InputCommand& e) override;
m_EventBroker->Publish(e); virtual void Reset();
m_MouseLocked = true;
}
void UnlockMouse() protected:
{ const int m_PlayerID;
Events::UnlockMouse e; bool m_MouseLocked = false;
m_EventBroker->Publish(e); glm::vec3 m_Rotation;
m_MouseLocked = false; glm::vec3 m_Movement;
} bool m_Jumping = false;
bool m_Crouching = false;
EventRelay<EventContext, Events::LockMouse> m_ELockMouse;
bool OnLockMouse(const Events::LockMouse& e);
EventRelay<EventContext, Events::UnlockMouse> m_EUnlockMouse;
bool OnUnlockMouse(const Events::UnlockMouse& e);
};
virtual bool OnCommand(const Events::InputCommand& e) override template <typename EventContext>
{ FirstPersonInputController<EventContext>::FirstPersonInputController(EventBroker* eventBroker, int playerID)
if (m_PlayerID != e.PlayerID) { : InputController(eventBroker)
return false; , m_PlayerID(playerID)
} {
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse);
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse);
}
if (m_MouseLocked) { template <typename EventContext>
if (e.Command == "Pitch") { void FirstPersonInputController<EventContext>::Reset()
float val = glm::radians(e.Value); {
m_Orientation = m_Orientation * glm::angleAxis<float>(-val, glm::vec3(1, 0, 0)); m_Rotation = glm::vec3(0.f, 0.f, 0.f);
return true; m_Jumping = false;
} }
if (e.Command == "Yaw") { template <typename EventContext>
float val = glm::radians(e.Value); void FirstPersonInputController<EventContext>::LockMouse()
m_Orientation = glm::angleAxis<float>(-val, glm::vec3(0, 1, 0)) * m_Orientation; {
return true; Events::LockMouse e;
} m_EventBroker->Publish(e);
} m_MouseLocked = true;
}
template <typename EventContext>
void FirstPersonInputController<EventContext>::UnlockMouse()
{
Events::UnlockMouse e;
m_EventBroker->Publish(e);
m_MouseLocked = false;
}
template <typename EventContext>
bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputCommand& e)
{
if (m_PlayerID != e.PlayerID) {
return false; return false;
} }
protected: if (e.Command == "Pitch") {
const unsigned int m_PlayerID; float val = glm::radians(e.Value);
glm::quat m_Orientation; m_Rotation.x += -val;
bool m_MouseLocked = false; //m_Rotation.x = glm::clamp(m_Rotation.x, -glm::half_pi<float>(), glm::half_pi<float>());
}
EventRelay<EventContext, Events::LockMouse> m_ELockMouse;
bool OnLockMouse(const Events::LockMouse& e) { m_MouseLocked = true; return true; } if (e.Command == "Yaw") {
EventRelay<EventContext, Events::UnlockMouse> m_EUnlockMouse; float val = glm::radians(e.Value);
bool OnUnlockMouse(const Events::UnlockMouse& e) { m_MouseLocked = false; return true; } m_Rotation.y += -val;
}; }
if (e.Command == "Forward" || e.Command == "Right") {
if (e.Command == "Forward") {
float val = glm::clamp(e.Value, -1.f, 1.f);
m_Movement.z = -val;
}
if (e.Command == "Right") {
float val = glm::clamp(e.Value, -1.f, 1.f);
m_Movement.x = val;
}
if (glm::length2(m_Movement) > 0) {
m_Movement = glm::normalize(m_Movement);
}
}
if (e.Command == "Jump") {
m_Jumping = e.Value > 0;
}
if (e.Command == "Crouch") {
m_Crouching = e.Value > 0;
}
return true;
}
template <typename EventContext>
bool FirstPersonInputController<EventContext>::OnUnlockMouse(const Events::UnlockMouse& e)
{
m_MouseLocked = false;
return true;
}
template <typename EventContext>
bool FirstPersonInputController<EventContext>::OnLockMouse(const Events::LockMouse& e)
{
m_MouseLocked = true;
return true;
}
#endif #endif
+20 -9
View File
@@ -20,6 +20,7 @@
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Network/EInterpolate.h" #include "Network/EInterpolate.h"
#include "Core/EPlayerSpawned.h"
class Client : public Network class Client : public Network
{ {
@@ -39,16 +40,18 @@ private:
char readBuf[INPUTSIZE] = { 0 }; char readBuf[INPUTSIZE] = { 0 };
// Packet loss logic // Packet loss logic
unsigned int m_PacketID = 0; PacketID m_PacketID = 0;
unsigned int m_PreviousPacketID = 0; PacketID m_PreviousPacketID = 0;
unsigned int m_SendPacketID = 0; PacketID m_SendPacketID = 0;
AckBitPattern ackBitField = 0;
// Game logic // Game logic
World* m_World; World* m_World;
std::string m_PlayerName; std::string m_PlayerName;
int m_PlayerID = -1; PlayerID m_PlayerID = -1;
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max(); EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
bool m_IsConnected = false; bool m_IsConnected = false;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
// Server Client Lookup map // Server Client Lookup map
// Assumes that root node for client and server is EntityID 0. // Assumes that root node for client and server is EntityID 0.
@@ -57,31 +60,36 @@ private:
std::unordered_map<EntityID, EntityID> m_ClientIDToServerID; std::unordered_map<EntityID, EntityID> m_ClientIDToServerID;
// Network logic // Network logic
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS]; PlayerDefinition m_PlayerDefinitions[8];
SnapshotDefinitions m_NextSnapshot; SnapshotDefinitions m_NextSnapshot;
double m_DurationOfPingTime; double m_DurationOfPingTime;
std::clock_t m_StartPingTime; std::clock_t m_StartPingTime;
std::clock_t m_TimeSinceSentInputs;
unsigned int m_SendInputIntervalMs;
std::vector<Events::InputCommand> m_InputCommandBuffer; std::vector<Events::InputCommand> m_InputCommandBuffer;
// Private member functions // Private member functions
void readFromServer(); void readFromServer();
int receive(char* data, size_t length); int receive(char* data);
void send(Packet& packet); void send(Packet& packet);
void connect(); void connect();
void disconnect(); void disconnect();
void ping();
void parseMessageType(Packet& packet); void parseMessageType(Packet& packet);
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType); void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType);
void parseConnect(Packet& packet); void parseConnect(Packet& packet);
void parsePlayerConnected(Packet& packet); void parsePlayerConnected(Packet& packet);
void parsePing(); void parsePing();
void parseServerPing(); void parseKick();
void parsePlayersSpawned(Packet& packet);
void parseEntityDeletion(Packet& packet);
void parseComponentDeletion(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();
bool hasServerTimedOut(); bool hasServerTimedOut();
EntityID createPlayer(); EntityID createPlayer();
void sendInputCommands(); void sendInputCommands();
void sendLocalPlayerTransform();
void becomePlayer(); void becomePlayer();
// Mapping Logic // Mapping Logic
// Returns if local EntityID exist in map // Returns if local EntityID exist in map
@@ -89,13 +97,16 @@ private:
// Returns if server EntityID exist in map // Returns if server EntityID exist in map
bool serverClientMapsHasEntity(EntityID serverEntityID); bool serverClientMapsHasEntity(EntityID serverEntityID);
void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID); void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
void deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
// Events // Events
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
EventRelay<Client, Events::InputCommand> m_EInputCommand; EventRelay<Client, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
EventRelay<Client, Events::PlayerDamage> m_EPlayeDamage; EventRelay<Client, Events::PlayerDamage> m_EPlayerDamage;
bool OnPlayerDamage(const Events::PlayerDamage& e); bool OnPlayerDamage(const Events::PlayerDamage& e);
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
}; };
#endif #endif
@@ -0,0 +1,18 @@
#ifndef Events_PlayerDisconnected
#define Events_PlayerDisconnected
#include "Core/EventBroker.h"
#include "Core/Entity.h"
namespace Events
{
struct PlayerDisconnected : public Event
{
unsigned int PlayerID;
EntityID Entity;
};
}
#endif
+11 -7
View File
@@ -5,16 +5,20 @@
// Used to determine what type of message was sent. // Used to determine what type of message was sent.
enum class MessageType enum class MessageType
{ {
Connect, Connect,
Disconnect, Disconnect,
ClientPing, Ping,
ServerPing, Message,
Message, Snapshot,
Snapshot,
OnInputCommand, OnInputCommand,
OnPlayerDamage, OnPlayerDamage,
PlayerConnected, PlayerConnected,
BecomePlayer BecomePlayer,
Kick,
OnPlayerSpawned,
EntityDeleted,
ComponentDeleted,
PlayerTransform
}; };
#endif #endif
+22 -2
View File
@@ -1,13 +1,22 @@
#ifndef Network_h__ #ifndef Network_h__
#define Network_h__ #define Network_h__
#include <ctime>
#include "Core/World.h" #include "Core/World.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Network/Packet.h" #include "Network/Packet.h"
#include "Network/NetworkData.h"
#include "Core/ResourceManager.h"
#include "Core/ConfigFile.h"
#include <fstream>
#include <iostream>
#include <bitset>
#define MAXCONNECTIONS 8
#define INPUTSIZE 4097 #define INPUTSIZE 4097
#define TIMEOUTMS 15000 typedef unsigned int PlayerID;
typedef unsigned int PacketID;
typedef unsigned int AckBitPattern;
class Network class Network
{ {
@@ -15,6 +24,17 @@ public:
virtual ~Network() { }; virtual ~Network() { };
virtual void Start(World* m_world, EventBroker *eventBroker) = 0; virtual void Start(World* m_world, EventBroker *eventBroker) = 0;
virtual void Update() = 0; virtual void Update() = 0;
protected:
// For Debug
bool isReadingData = false;
NetworkData m_NetworkData;
unsigned int m_SaveDataIntervalMs = 1000;
std::clock_t m_SaveDataTimer;
unsigned int m_MaxConnections;
unsigned int m_TimeoutMs;
void saveToFile();
void updateNetworkData();
void initialize();
}; };
#endif #endif
+18
View File
@@ -0,0 +1,18 @@
#ifndef NetworkData_h__
#define NetworkData_h__
#include <vector>
struct NetworkData {
unsigned int TotalTime = 0;
unsigned int TotalDataReceived = 0;
unsigned int TotalDataSent = 0;
unsigned int AmountOfMessagesReceived = 0;
unsigned int AmountOfMessagesSent = 0;
// Interval based
unsigned int DataReceivedThisInterval = 0;
unsigned int DataSentThisInterval = 0;
// pair: first=reveived, second=send
std::vector<std::pair<unsigned int, unsigned int>> BandwidthBytes;
};
#endif
+7 -3
View File
@@ -11,12 +11,12 @@ class Packet
public: public:
// arg1: Type of message (Connect, Disconnect...) // arg1: Type of message (Connect, Disconnect...)
// arg2: PacketID for identifying packet loss. // arg2: PacketID for identifying packet loss.
Packet(MessageType type, unsigned int& packetID); Packet(MessageType type, unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
// Used to create packet from already existing data buffer. // Used to create packet from already existing data buffer.
Packet(char* data, const int sizeOfPacket); Packet(char* data, const int sizeOfPacket);
Packet(MessageType type); Packet(MessageType type);
~Packet(); ~Packet();
void Init(MessageType type, unsigned int& packetID); void Init(MessageType type, unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
// Add primitive types like int, float, char... // Add primitive types like int, float, char...
template<typename T> template<typename T>
@@ -50,17 +50,21 @@ public:
// Pops the first element as if it was a string. // Pops the first element as if it was a string.
std::string ReadString(); std::string ReadString();
char* ReadData(int SizeOfData); char* ReadData(int SizeOfData);
void ChangePacketID(unsigned int& packetID); // No purpose any more
//void ChangePacketID(unsigned int& packetID);
void ChangeHeaderInfo(unsigned int& packetID, unsigned int lastReceivedPacket, unsigned int ackBitField);
int Size() { return m_Offset; }; int Size() { return m_Offset; };
char* Data() { return m_Data; }; char* Data() { return m_Data; };
unsigned int DataReadSize() { return m_ReturnDataOffset; } unsigned int DataReadSize() { return m_ReturnDataOffset; }
unsigned int MaxSize() { return m_MaxPacketSize; } unsigned int MaxSize() { return m_MaxPacketSize; }
unsigned int HeaderSize() { return m_HeaderSize; }
private: private:
char* m_Data; char* m_Data;
unsigned int m_ReturnDataOffset = 0; unsigned int m_ReturnDataOffset = 0;
int m_Offset = 0; int m_Offset = 0;
unsigned int m_MaxPacketSize = 512; unsigned int m_MaxPacketSize = 512;
unsigned int m_HeaderSize = 0;
void resizeData(); void resizeData();
}; };
+8 -1
View File
@@ -1,12 +1,19 @@
#ifndef PlayerDefinition_h__ #ifndef PlayerDefinition_h__
#define PlayerDefinition_h__ #define PlayerDefinition_h__
#include <string> #include <string>
#include "../Core/Entity.h"
struct PlayerDefinition { struct PlayerDefinition {
int EntityID = -1; ::EntityID EntityID = EntityID_Invalid;
std::string Name = ""; std::string Name = "";
boost::asio::ip::udp::endpoint Endpoint; boost::asio::ip::udp::endpoint Endpoint;
// The ID of the last sent packet. (Local sequence number)
unsigned int PacketID; unsigned int PacketID;
// The ID of the last received packet. (Remote sequence number)
// This is sent as the ackNumber.
unsigned int LastPacketReceivedID;
// The bit pattern of the last 32 received packets.
unsigned int AckBitField;
std::clock_t StopTime; std::clock_t StopTime;
}; };
+33 -20
View File
@@ -14,6 +14,10 @@
#include "../Network/Network.h" #include "../Network/Network.h"
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Network/EPlayerDisconnected.h"
#include "Core/EPlayerSpawned.h"
#include "Core/EEntityDeleted.h"
#include "Core/EComponentDeleted.h"
class Server : public Network class Server : public Network
{ {
@@ -29,18 +33,18 @@ private:
boost::asio::ip::udp::socket m_Socket; boost::asio::ip::udp::socket m_Socket;
// Sending messages to client logic // Sending messages to client logic
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS]; std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
std::vector<PlayerDefinition> m_ConnectedUsers;
char readBuffer[INPUTSIZE] = { 0 }; char readBuffer[INPUTSIZE] = { 0 };
int bytesRead = 0; int bytesRead = 0;
// time for previouse message // time for previouse message
std::clock_t previousePingMessage = std::clock(); std::clock_t previousPingMessage = std::clock();
std::clock_t previousSnapshotMessage = std::clock(); std::clock_t previousSnapshotMessage = std::clock();
std::clock_t timOutTimer = std::clock(); std::clock_t timOutTimer = std::clock();
// How often we send messages (milliseconds) // How often we send messages (milliseconds)
int intervalMs = 1000; int pingIntervalMs;
int snapshotInterval = 50; int snapshotInterval;
int checkTimeOutInterval = 100; int checkTimeOutInterval = 100;
int m_NextPlayerID = 0;
//Timers //Timers
std::clock_t m_StartPingTime; std::clock_t m_StartPingTime;
@@ -50,32 +54,41 @@ private:
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
// Packet loss logic // Packet loss logic
unsigned int m_PacketID = 0; PacketID m_PacketID = 0;
unsigned int m_PreviousPacketID = 0; PacketID m_PreviousPacketID = 0;
// Private member functions // Private member functions
int receive(char* data, size_t length); void addChildrenToPacket(Packet& packet, EntityID entityID);
void readFromClients();
void send(Packet& packet, int playerID);
void send(Packet& packet);
void broadcast(Packet& packet); void broadcast(Packet& packet);
void checkForTimeOuts();
void disconnect(PlayerID playerID);
void identifyPacketLoss();
void kick(PlayerID player);
int receive(char* data);
void readFromClients();
void send(PlayerID playerID, Packet& packet);
void send(Packet& packet);
void sendSnapshot(); void sendSnapshot();
void sendPing(); void sendPing();
void checkForTimeOuts(); void parseClientPing(PlayerID playerID);
void disconnect(int i); void parseConnect(Packet& packet, PlayerID playerID);
void parseDisconnect();
void parseMessageType(Packet& packet); void parseMessageType(Packet& packet);
void parseOnInputCommand(Packet& packet); void parseOnInputCommand(Packet& packet);
void parseOnPlayerDamage(Packet& packet); void parseOnPlayerDamage(Packet& packet);
void parseConnect(Packet& packet); void parsePing();
void parseDisconnect();
void parseClientPing(); PlayerID GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
void parseServerPing();
void identifyPacketLoss();
void createPlayer();
int GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
// Debug event // Debug event
EventRelay<Server, Events::InputCommand> m_EInputCommand; EventRelay<Server, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
EventRelay<Server, Events::EntityDeleted> m_EEntityDeleted;
bool OnEntityDeleted(const Events::EntityDeleted& e);
EventRelay<Server, Events::ComponentDeleted> m_EComponentDeleted;
bool OnComponentDeleted(const Events::ComponentDeleted& e);
void parsePlayerTransform(Packet& packet);
}; };
#endif #endif
@@ -1,84 +0,0 @@
#ifndef DebugCameraInputController_h__
#define DebugCameraInputController_h__
#include <imgui/imgui.h>
#include "../Input/FirstPersonInputController.h"
#include "../Core/EMousePress.h"
#include "../Core/EMouseRelease.h"
template <typename EventContext>
class DebugCameraInputController : public FirstPersonInputController<EventContext>
{
public:
DebugCameraInputController(EventBroker* eventBroker, unsigned int playerID)
: FirstPersonInputController(eventBroker, playerID)
{
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &DebugCameraInputController::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &DebugCameraInputController::OnMouseRelease);
}
void SetPosition(const glm::vec3 position) { m_Position = position; }
void SetOrientation(const glm::quat orientation) { m_Orientation = orientation; }
const glm::vec3 Position() const { return m_Position; }
void SetBaseSpeed(float speed) { m_BaseSpeed = speed; }
virtual bool OnCommand(const Events::InputCommand& e) override
{
ImGuiIO& io = ImGui::GetIO();
if (!io.WantCaptureKeyboard) {
if (e.Command == "Right") {
float value = std::max(-1.f, std::min(e.Value, 1.f));
m_Velocity.x = value;
}
if (e.Command == "Forward") {
float value = std::max(-1.f, std::min(e.Value, 1.f));
m_Velocity.z = -value;
}
if (e.Command == "Sprint") {
if (e.Value > 0.f) {
m_Speed = m_BaseSpeed * 2.f * (e.Value);
} else {
m_Speed = m_BaseSpeed;
}
}
}
return FirstPersonInputController::OnCommand(e);
}
void Update(double dt)
{
if (glm::length2(m_Velocity) > 0) {
m_Position += m_Orientation * (glm::normalize(m_Velocity) * m_Speed * (float)dt);
}
}
protected:
glm::vec3 m_Position = glm::vec3(0, 0, 0);
glm::vec3 m_Velocity = glm::vec3(0, 0, 0);
float m_BaseSpeed = 2.0f;
float m_Speed = m_BaseSpeed;
EventRelay<EventContext, Events::MousePress> m_EMousePress;
bool OnMousePress(const Events::MousePress& e)
{
if (e.Button == GLFW_MOUSE_BUTTON_2) {
ImGuiIO& io = ImGui::GetIO();
if (!io.WantCaptureMouse) {
LockMouse();
}
}
return true;
}
EventRelay<EventContext, Events::MouseRelease> m_EMouseRelease;
bool OnMouseRelease(const Events::MouseRelease& e)
{
if (e.Button == GLFW_MOUSE_BUTTON_2) {
UnlockMouse();
}
return true;
}
};
#endif
+53
View File
@@ -0,0 +1,53 @@
#ifndef DrawBloomPass_h__
#define DrawBloomPass_h__
#include "IRenderer.h"
#include "DrawBloomPassState.h"
//#include "LightCullingPass.h" Finalpass om den skall skickas in
#include "FrameBuffer.h"
#include "ShaderProgram.h"
//#include "Util/UnorderedMapVec2.h"
#include "Texture.h"
class DrawBloomPass
{
public:
DrawBloomPass(IRenderer* renderer /* ,Texture or finalpass*/ );
~DrawBloomPass() { }
void InitializeTextures();
void InitializeFrameBuffers();
void InitializeShaderPrograms();
void InitializeBuffers();
void ClearBuffer();
void FillGaussianBuffer(FrameBuffer* fb);
void Draw(GLuint texture);
//Getters
//Return the blurred result of the texture that was sent into draw
GLuint GaussianTexture() const { return m_GaussianTexture_vert; }
private:
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
Texture* m_WhiteTexture;
Model* m_ScreenQuad;
const IRenderer* m_Renderer;
//const LightCullingPass* m_LightCullingPass
GLuint m_iterations = 9;
GLuint m_GaussianTexture_horiz;
GLuint m_GaussianTexture_vert;
FrameBuffer m_GaussianFrameBuffer_horiz;
FrameBuffer m_GaussianFrameBuffer_vert;
ShaderProgram* m_GaussianProgram_horiz;
ShaderProgram* m_GaussianProgram_vert;
};
#endif
@@ -0,0 +1,15 @@
#ifndef DrawBloomPassState_h__
#define DrawBloomPassState_h__
#include "Rendering/RenderState.h"
class DrawBloomPassState : public RenderState
{
public:
DrawBloomPassState();
~DrawBloomPassState();
private:
};
#endif
@@ -0,0 +1,29 @@
#ifndef DrawColorCorrectionPass_h__
#define DrawColorCorrectionPass_h__
#include "IRenderer.h"
#include "DrawScreenQuadPassState.h"
#include "FrameBuffer.h"
#include "ShaderProgram.h"
//#include "Util/UnorderedMapVec2.h"
#include "Texture.h"
class DrawColorCorrectionPass
{
public:
DrawColorCorrectionPass(IRenderer* renderer);
~DrawColorCorrectionPass() { }
void InitializeFrameBuffers();
void InitializeShaderPrograms();
void Draw(GLuint sceneTexture, GLuint bloomTexture);
private:
const IRenderer* m_Renderer;
ShaderProgram* m_ColorCorrectionProgram;
Model* m_ScreenQuad;
GLfloat m_Exposure;
};
#endif
+13 -2
View File
@@ -17,16 +17,27 @@ public:
void InitializeTextures(); void InitializeTextures();
void InitializeFrameBuffers(); void InitializeFrameBuffers();
void InitializeShaderPrograms(); void InitializeShaderPrograms();
void Draw(RenderScene& scene); void Draw(RenderScene& scene);
void ClearBuffer();
//Getters //Return the texture that is used in later stages to apply the bloom effect
GLuint BloomTexture() const { return m_BloomTexture; }
//Return the texture with diffuse and lighting of the scene.
GLuint SceneTexture() const { return m_SceneTexture; }
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
private: private:
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const; void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps) const;
Texture* m_WhiteTexture; Texture* m_WhiteTexture;
Texture* m_BlackTexture;
FrameBuffer m_FinalPassFrameBuffer;
GLuint m_BloomTexture;
GLuint m_SceneTexture;
GLuint m_DepthBuffer;
const IRenderer* m_Renderer; const IRenderer* m_Renderer;
const LightCullingPass* m_LightCullingPass; const LightCullingPass* m_LightCullingPass;
@@ -6,7 +6,7 @@
class DrawFinalPassState : public RenderState class DrawFinalPassState : public RenderState
{ {
public: public:
DrawFinalPassState(); DrawFinalPassState(GLuint frameBuffer);
~DrawFinalPassState(); ~DrawFinalPassState();
private: private:
@@ -0,0 +1,28 @@
#ifndef DrawScreenQuadPass_h__
#define DrawScreenQuadPass_h__
#include "IRenderer.h"
#include "DrawScreenQuadPassState.h"
#include "FrameBuffer.h"
#include "ShaderProgram.h"
//#include "Util/UnorderedMapVec2.h"
#include "Texture.h"
class DrawScreenQuadPass
{
public:
DrawScreenQuadPass(IRenderer* renderer);
~DrawScreenQuadPass() { }
void InitializeFrameBuffers();
void InitializeShaderPrograms();
void Draw(GLuint texture);
private:
const IRenderer* m_Renderer;
ShaderProgram* m_DrawQuadProgram;
Model* m_ScreenQuad;
};
#endif
@@ -0,0 +1,15 @@
#ifndef DrawScreenQuadPassState_h__
#define DrawScreenQuadPassState_h__
#include "Rendering/RenderState.h"
class DrawScreenQuadPassState : public RenderState
{
public:
DrawScreenQuadPassState();
~DrawScreenQuadPassState();
private:
};
#endif
+36
View File
@@ -0,0 +1,36 @@
#ifndef Font_h__
#define Font_h__
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>
#include "../OpenGL.h"
#include "../GLM.h"
#include "../Core/ResourceManager.h"
class Font : public Resource
{
friend class ResourceManager;
private:
Font(std::string path);
public:
struct Character {
GLuint TextureID; // ID handle of the glyph texture
glm::ivec2 Size; // Size of glyph
glm::ivec2 Bearing; // Offset from baseline to left/top of glyph
GLuint Advance; // Offset to advance to next glyph
};
int FontSize = 16;
~Font();
std::map<GLchar, Character> m_Characters;
};
#endif
+4 -4
View File
@@ -1,7 +1,8 @@
#ifndef Model_h__ #ifndef Model_h__
#define Model_h__ #define Model_h__
#include "RawModel.h" #include "Rendering/RawModelCustom.h"
//#include "Rendering/RawModelAssimp.h"
#include "../OpenGL.h" #include "../OpenGL.h"
class Model : public ThreadUnsafeResource class Model : public ThreadUnsafeResource
@@ -19,12 +20,11 @@ public:
GLuint VAO; GLuint VAO;
GLuint ElementBuffer; GLuint ElementBuffer;
RawModel* m_RawModel;
private: private:
RawModel* m_RawModel;
GLuint VertexBuffer; GLuint VertexBuffer;
GLuint DiffuseVertexColorBuffer;
GLuint SpecularVertexColorBuffer;
GLuint NormalBuffer; GLuint NormalBuffer;
GLuint TangentNormalsBuffer; GLuint TangentNormalsBuffer;
GLuint BiTangentNormalsBuffer; GLuint BiTangentNormalsBuffer;
+8
View File
@@ -24,6 +24,10 @@ struct ModelJob : RenderJob
DiffuseTexture = matGroup.Texture.get(); DiffuseTexture = matGroup.Texture.get();
NormalTexture = matGroup.NormalMap.get(); NormalTexture = matGroup.NormalMap.get();
SpecularTexture = matGroup.SpecularMap.get(); SpecularTexture = matGroup.SpecularMap.get();
IncandescenceTexture = matGroup.IncandescenceMap.get();
DiffuseColor = matGroup.DiffuseColor;
SpecularColor = matGroup.SpecularColor;
IncandescenceColor = matGroup.IncandescenceColor;
StartIndex = matGroup.StartIndex; StartIndex = matGroup.StartIndex;
EndIndex = matGroup.EndIndex; EndIndex = matGroup.EndIndex;
Matrix = matrix; Matrix = matrix;
@@ -43,9 +47,13 @@ struct ModelJob : RenderJob
const Texture* DiffuseTexture; const Texture* DiffuseTexture;
const Texture* NormalTexture; const Texture* NormalTexture;
const Texture* SpecularTexture; const Texture* SpecularTexture;
const Texture* IncandescenceTexture;
float Shininess = 0.f; float Shininess = 0.f;
glm::vec4 Color; glm::vec4 Color;
const ::Model* Model = nullptr; const ::Model* Model = nullptr;
glm::vec4 DiffuseColor;
glm::vec4 SpecularColor;
glm::vec4 IncandescenceColor;
unsigned int StartIndex = 0; unsigned int StartIndex = 0;
unsigned int EndIndex = 0; unsigned int EndIndex = 0;
World* World; World* World;
@@ -1,5 +1,7 @@
#ifndef RawModel_h__ #ifndef RawModelAssimp_h__
#define RawModel_h__ #define RawModelAssimp_h__
#ifdef USING_ASSIMP_AS_IMPORTER
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
@@ -18,29 +20,27 @@
#include "Texture.h" #include "Texture.h"
#include "Skeleton.h" #include "Skeleton.h"
class RawModel : public Resource #define RawModel RawModelAssimp
class RawModelAssimp : public Resource
{ {
friend class ResourceManager; friend class ResourceManager;
protected: protected:
RawModel(std::string fileName); RawModelAssimp(std::string fileName);
public: public:
~RawModel(); ~RawModelAssimp();
struct Vertex struct Vertex
{ {
glm::vec3 Position; glm::vec3 Position;
glm::vec3 Normal; glm::vec3 Normal;
glm::vec3 Tangent; glm::vec3 Tangent;
glm::vec3 BiTangent; glm::vec3 BiNormal;
glm::vec2 TextureCoords; glm::vec2 TextureCoords;
glm::vec4 DiffuseVertexColor; glm::vec4 BoneIndices;
glm::vec4 SpecularVertexColor; glm::vec4 BoneWeights;
glm::vec4 BoneIndices1;
glm::vec4 BoneIndices2;
glm::vec4 BoneWeights1;
glm::vec4 BoneWeights2;
}; };
struct MaterialGroup struct MaterialGroup
@@ -68,8 +68,6 @@ private:
std::vector<glm::ivec2> BoneIndices; std::vector<glm::ivec2> BoneIndices;
std::vector<glm::vec2> BoneWeights; std::vector<glm::vec2> BoneWeights;
std::vector<glm::vec3> Normals; std::vector<glm::vec3> Normals;
std::vector<glm::vec4> DiffuseVertexColor;
std::vector<glm::vec4> SpecularVertexColor;
std::vector<glm::vec3> TangentNormals; std::vector<glm::vec3> TangentNormals;
std::vector<glm::vec3> BiTangentNormals; std::vector<glm::vec3> BiTangentNormals;
std::vector<glm::vec2> TextureCoords; std::vector<glm::vec2> TextureCoords;
@@ -78,3 +76,4 @@ private:
}; };
#endif #endif
#endif
+102
View File
@@ -0,0 +1,102 @@
#ifndef RawModelCustom_h__
#define RawModelCustom_h__
#ifndef USING_ASSIMP_AS_IMPORTER
#define RawModel RawModelCustom
#include <fstream>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <stack>
#include <boost/filesystem/path.hpp>
#include "../Common.h"
#include "../GLM.h"
#include "../Core/ResourceManager.h"
#include "Texture.h"
#include "Skeleton.h"
#include "boost\endian\buffers.hpp"
class RawModelCustom : public Resource
{
friend class ResourceManager;
protected:
RawModelCustom(std::string fileName);
public:
~RawModelCustom();
struct Vertex
{
glm::vec3 Position;
glm::vec3 Normal;
glm::vec3 Tangent;
glm::vec3 BiNormal;
glm::vec2 TextureCoords;
glm::vec4 BoneIndices;
glm::vec4 BoneWeights;
};
struct MaterialGroup
{
float SpecularExponent;
float ReflectionFactor;
glm::vec4 DiffuseColor{ 1.0f, 1.0f, 1.0f, 1.0f };
glm::vec4 SpecularColor{ 1.0f, 1.0f, 1.0f, 1.0f };
glm::vec4 IncandescenceColor{ 1.0f, 1.0f, 1.0f, 1.0f };
unsigned int StartIndex;
unsigned int EndIndex;
//float Transparency;
std::string TexturePath;
std::shared_ptr<::Texture> Texture;
std::string NormalMapPath;
std::shared_ptr<::Texture> NormalMap;
std::string SpecularMapPath;
std::shared_ptr<::Texture> SpecularMap;
std::string IncandescenceMapPath;
std::shared_ptr<::Texture> IncandescenceMap;
};
std::vector<MaterialGroup> MaterialGroups;
std::vector<Vertex> m_Vertices;
std::vector<unsigned int> m_Indices;
Skeleton* m_Skeleton = nullptr;
glm::mat4 m_Matrix;
private:
void ReadMeshFile(std::string filePath);
void ReadMeshFileHeader(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
void ReadMesh(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
void ReadVertices(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
void ReadIndices(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
void ReadMaterialFile(std::string filePath);
void ReadMaterials(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
void ReadMaterialSingle(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
void ReadAnimationFile(std::string filePath);
void ReadAnimationBindPoses(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
void ReadAnimationJoint(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
void ReadAnimationClips(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int numberOfClips);
void ReadAnimationClipSingle(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int clipIndex);
void ReadAnimationKeyFrame(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int numberOfJoints, Skeleton::Animation& animation);
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
};
#else
#include "RawModelAssimp.h"
#endif
#endif
+3 -36
View File
@@ -11,49 +11,16 @@
#include "Camera.h" #include "Camera.h"
#include "RenderJob.h" #include "RenderJob.h"
#include "ModelJob.h" #include "ModelJob.h"
#include "TextJob.h"
#include "PointLightJob.h" #include "PointLightJob.h"
#include "DirectionalLightJob.h" #include "DirectionalLightJob.h"
/*
struct SpriteJob : RenderJob
{
unsigned int ShaderID = 0;
unsigned int TextureID = 0;
glm::mat4 ModelMatrix;
const Texture* DiffuseTexture = nullptr;
const Texture* NormalTexture = nullptr;
const Texture* SpecularTexture = nullptr;
glm::vec4 Color;
void CalculateHash() override
{
Hash = TextureID;
}
};
struct PointLightJob : RenderJob
{
glm::vec4 Position;
glm::vec4 Color;
float Radius;
float Intensity;
float Falloff;
float padding = 123;
void CalculateHash() override
{
Hash = 0;
}
};
*/
struct RenderScene struct RenderScene
{ {
::Camera* Camera = nullptr; ::Camera* Camera = nullptr;
std::list<std::shared_ptr<RenderJob>> ForwardJobs; std::list<std::shared_ptr<RenderJob>> ForwardJobs;
std::list<std::shared_ptr<RenderJob>> PointLightJobs; std::list<std::shared_ptr<RenderJob>> PointLightJobs;
std::list<std::shared_ptr<RenderJob>> TextJobs;
std::list<std::shared_ptr<RenderJob>> DirectionalLightJobs; std::list<std::shared_ptr<RenderJob>> DirectionalLightJobs;
Rectangle Viewport; Rectangle Viewport;
bool ClearDepth = false; bool ClearDepth = false;
@@ -62,6 +29,7 @@ struct RenderScene
{ {
ForwardJobs.clear(); ForwardJobs.clear();
PointLightJobs.clear(); PointLightJobs.clear();
TextJobs.clear();
DirectionalLightJobs.clear(); DirectionalLightJobs.clear();
} }
}; };
@@ -98,5 +66,4 @@ public:
private: private:
int m_Size = 0; int m_Size = 0;
}; };
#endif #endif
+6 -1
View File
@@ -15,7 +15,7 @@
#include "Renderer.h" #include "Renderer.h"
#include "PointLightJob.h" #include "PointLightJob.h"
#include "../Core/Transform.h" #include "../Core/Transform.h"
#include "DebugCameraInputController.h" #include "../Core/EPlayerSpawned.h"
class RenderSystem : public ImpureSystem class RenderSystem : public ImpureSystem
{ {
@@ -30,9 +30,11 @@ private:
RenderFrame* m_RenderFrame; RenderFrame* m_RenderFrame;
Camera* m_Camera; Camera* m_Camera;
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid; EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera; EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
bool OnSetCamera(Events::SetCamera &event); bool OnSetCamera(Events::SetCamera &event);
void fillText(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
void fillPointLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world); void fillPointLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
void fillDirectionalLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world); void fillDirectionalLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand; EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
@@ -40,6 +42,9 @@ private:
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs); void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs);
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs); void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
EventRelay<RenderSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(Events::PlayerSpawned& e);
}; };
#endif #endif
+13 -3
View File
@@ -13,10 +13,15 @@
#include "PickingPass.h" #include "PickingPass.h"
#include "LightCullingPass.h" #include "LightCullingPass.h"
#include "DrawFinalPass.h" #include "DrawFinalPass.h"
#include "DrawScreenQuadPass.h"
#include "DrawBloomPass.h"
#include "DrawColorCorrectionPass.h"
#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/Transform.h"
#include "imgui/imgui.h"
#include "TextPass.h"
class Renderer : public IRenderer class Renderer : public IRenderer
{ {
@@ -34,6 +39,7 @@ public:
private: private:
//----------------------Variables----------------------// //----------------------Variables----------------------//
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
TextPass* m_TextPass;
Texture* m_ErrorTexture; Texture* m_ErrorTexture;
Texture* m_WhiteTexture; Texture* m_WhiteTexture;
@@ -42,10 +48,15 @@ private:
Model* m_UnitQuad; Model* m_UnitQuad;
Model* m_UnitSphere; Model* m_UnitSphere;
int m_DebugTextureToDraw = 0;
PickingPass* m_PickingPass; PickingPass* m_PickingPass;
LightCullingPass* m_LightCullingPass; LightCullingPass* m_LightCullingPass;
ImGuiRenderPass* m_ImGuiRenderPass; ImGuiRenderPass* m_ImGuiRenderPass;
DrawFinalPass* m_DrawFinalPass; DrawFinalPass* m_DrawFinalPass;
DrawScreenQuadPass* m_DrawScreenQuadPass;
DrawBloomPass* m_DrawBloomPass;
DrawColorCorrectionPass* m_DrawColorCorrectionPass;
//----------------------Functions----------------------// //----------------------Functions----------------------//
void InitializeWindow(); void InitializeWindow();
@@ -55,14 +66,13 @@ private:
//TODO: Renderer: Get InputUpdate out of renderer //TODO: Renderer: Get InputUpdate out of renderer
void InputUpdate(double dt); void InputUpdate(double dt);
//void PickingPass(RenderQueueCollection& rq); //void PickingPass(RenderQueueCollection& rq);
void DrawScreenQuad(GLuint textureToDraw); //void DrawScreenQuad(GLuint textureToDraw);
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); } static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
void SortRenderJobsByDepth(RenderScene &scene); void SortRenderJobsByDepth(RenderScene &scene);
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);
//--------------------ShaderPrograms-------------------// //--------------------ShaderPrograms-------------------//
ShaderProgram* m_BasicForwardProgram; ShaderProgram* m_BasicForwardProgram;
ShaderProgram* m_DrawScreenQuadProgram;
}; };
#endif #endif
+2 -1
View File
@@ -4,6 +4,7 @@
#include <sstream> #include <sstream>
#include "Common.h" #include "Common.h"
#include "../GLM.h" #include "../GLM.h"
#include <glm/gtx/matrix_decompose.hpp>
//struct Bone //struct Bone
//{ //{
@@ -38,9 +39,9 @@ public:
, OffsetMatrix(offsetMatrix) , OffsetMatrix(offsetMatrix)
{ } { }
int ID;
std::string Name; std::string Name;
glm::mat4 OffsetMatrix; glm::mat4 OffsetMatrix;
int ID;
Bone* Parent; Bone* Parent;
std::vector<Bone*> Children; std::vector<Bone*> Children;
+58
View File
@@ -0,0 +1,58 @@
#ifndef TextJob_h__
#define TextJob_h__
#include <cstdint>
#include "../Common.h"
#include "../GLM.h"
#include "../Core/ComponentWrapper.h"
#include "Texture.h"
#include "RenderJob.h"
#include "../Core/ResourceManager.h"
#include "Font.h"
struct TextJob : RenderJob
{
TextJob(glm::mat4 matrix, Font* font, ComponentWrapper textComponent)
: RenderJob()
{
Matrix = matrix;
Color = (glm::vec4)textComponent["Color"];
Content = (std::string)textComponent["Content"];
Resource = font;
if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) {
Alignment = AlignmentEnum::Left;
} else if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Right")) {
Alignment = AlignmentEnum::Right;
} else if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Center")) {
Alignment = AlignmentEnum::Center;
} else {
LOG_ERROR("Text alignment invalid");
Alignment = AlignmentEnum::Left;
}
};
enum class AlignmentEnum
{
Left,
Right,
Center
};
glm::mat4 Matrix;
glm::vec4 Color;
std::string Content;
Font* Resource;
AlignmentEnum Alignment;
void CalculateHash() override
{
Hash = 0;
}
};
#endif
+33
View File
@@ -0,0 +1,33 @@
#ifndef TextRenderer_h__
#define TextRenderer_h__
#include <ft2build.h>
#include FT_FREETYPE_H
#include "../OpenGL.h"
#include "../GLM.h"
#include "ShaderProgram.h"
#include "Font.h"
#include "../Core/ResourceManager.h"
#include "RenderQueue.h"
#include "TextPassState.h"
#include "FrameBuffer.h"
class TextPass
{
public:
TextPass();
void Initialize();
void Update();
void Draw(RenderScene& scene, FrameBuffer& frameBuffer);
private:
void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix);
Font* font;
GLuint VAO, VBO;
ShaderProgram* m_TextProgram;
};
#endif
+15
View File
@@ -0,0 +1,15 @@
#ifndef TextPassState_h__
#define TextPassState_h__
#include "Rendering/RenderState.h"
class TextPassState : public RenderState
{
public:
TextPassState(GLuint frameBuffer);
~TextPassState();
private:
};
#endif
+1
View File
@@ -18,6 +18,7 @@ public:
void Bind(GLenum textureUnit = GL_TEXTURE0); void Bind(GLenum textureUnit = GL_TEXTURE0);
GLuint m_Texture = 0; GLuint m_Texture = 0;
}; };
#endif #endif
@@ -0,0 +1,17 @@
#ifndef CommonFuntions_h__
#define CommonFuntions_h__
#include "../../Common.h"
#include "../../OpenGL.h"
#include "../../GLM.h"
class CommonFuntions
{
public:
CommonFuntions() = delete;
private:
};
#endif
+1
View File
@@ -19,6 +19,7 @@
#include "Rendering/RenderSystem.h" #include "Rendering/RenderSystem.h"
#include "Core/EntityFileParser.h" #include "Core/EntityFileParser.h"
#include "Core/Octree.h" #include "Core/Octree.h"
#include "Rendering/Font.h"
#include "Systems/InterpolationSystem.h" #include "Systems/InterpolationSystem.h"
// Network // Network
#include <boost/thread.hpp> #include <boost/thread.hpp>
+9 -9
View File
@@ -10,11 +10,12 @@
#include "Common.h" #include "Common.h"
#include "Core/System.h" #include "Core/System.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Core/ResourceManager.h"
#include "Core/ConfigFile.h"
#include "Core/EPlayerSpawned.h"
#include "Network/EInterpolate.h" #include "Network/EInterpolate.h"
#define SNAPSHOTINTERVAL 0.05f
class InterpolationSystem : public PureSystem class InterpolationSystem : public PureSystem
{ {
struct Transform struct Transform
@@ -25,29 +26,28 @@ class InterpolationSystem : public PureSystem
double interpolationTime; double interpolationTime;
}; };
public: public:
InterpolationSystem(World* world, EventBroker* eventBroker) InterpolationSystem(World* world, EventBroker* eventBroker);
: System(world, eventBroker)
, PureSystem("Transform")
{
EVENT_SUBSCRIBE_MEMBER(m_EInterpolate, &InterpolationSystem::OnInterpolate);
}
~InterpolationSystem() { } ~InterpolationSystem() { }
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& transform, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& transform, double dt) override;
private: private:
std::unordered_map<EntityID, Transform> m_NextTransform; std::unordered_map<EntityID, Transform> m_NextTransform;
std::unordered_map<EntityID, Transform> m_LastReceivedTransform; std::unordered_map<EntityID, Transform> m_LastReceivedTransform;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
//glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime); //glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime);
template <typename T> template <typename T>
T vectorInterpolation(T prev, T next, double currentTime) T vectorInterpolation(T prev, T next, double currentTime)
{ {
T difference = next - prev; T difference = next - prev;
T vector = (difference / SNAPSHOTINTERVAL) * static_cast<float>(currentTime); T vector = (difference / m_SnapshotInterval) * static_cast<float>(currentTime);
return vector; return vector;
} }
float m_SnapshotInterval;
EventRelay<InterpolationSystem, Events::Interpolate> m_EInterpolate; EventRelay<InterpolationSystem, Events::Interpolate> m_EInterpolate;
bool InterpolationSystem::OnInterpolate(const Events::Interpolate& e); bool InterpolationSystem::OnInterpolate(const Events::Interpolate& e);
EventRelay<InterpolationSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(Events::PlayerSpawned& e);
}; };
#endif #endif
+14 -5
View File
@@ -1,14 +1,23 @@
#include "Common.h" #include "Common.h"
#include "GLM.h" #include "GLM.h"
#include "Core/System.h" #include "Core/System.h"
#include "Core/EPlayerSpawned.h"
#include "Input/FirstPersonInputController.h"
#include <imgui/imgui.h>
class PlayerMovementSystem : public PureSystem class PlayerMovementSystem : public ImpureSystem, PureSystem
{ {
public: public:
PlayerMovementSystem(World* world, EventBroker* eventBroker) PlayerMovementSystem(World* world, EventBroker* eventBroker);
: System(world, eventBroker) ~PlayerMovementSystem();
, PureSystem("Player")
{ }
virtual void Update(double dt) override;
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt); virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt);
private:
// State
std::unordered_map<EntityWrapper, FirstPersonInputController<PlayerMovementSystem>*> m_PlayerInputControllers;
EventRelay<PlayerMovementSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(Events::PlayerSpawned& e);
}; };
+15 -2
View File
@@ -2,6 +2,9 @@
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include "Systems/SpawnerSystem.h" #include "Systems/SpawnerSystem.h"
#include "Events/ESpawnerSpawn.h" #include "Events/ESpawnerSpawn.h"
#include "Core/EPlayerSpawned.h"
#include "Rendering/ESetCamera.h"
#include "Core/ConfigFile.h"
class PlayerSpawnSystem : public ImpureSystem class PlayerSpawnSystem : public ImpureSystem
{ {
@@ -11,8 +14,18 @@ public:
virtual void Update(double dt) override; virtual void Update(double dt) override;
private: private:
struct SpawnRequest
{
int PlayerID;
ComponentInfo::EnumType Team;
};
bool m_NetworkEnabled = false;
std::vector<SpawnRequest> m_SpawnRequests;
std::map<int, EntityWrapper> m_PlayerEntities;
EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand; EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand;
bool OnInputCommand(const Events::InputCommand& e); bool OnInputCommand(const Events::InputCommand& e);
EventRelay<PlayerSpawnSystem, Events::PlayerSpawned> m_OnPlayerSpawnerd;
std::vector<int> m_SpawnRequests; bool OnPlayerSpawned(Events::PlayerSpawned& e);
}; };
+11 -8
View File
@@ -9,6 +9,7 @@
#include "Core/System.h" #include "Core/System.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Core/EShoot.h" #include "Core/EShoot.h"
#include "Core/EPlayerSpawned.h"
#include "Input/EInputCommand.h" #include "Input/EInputCommand.h"
#include <tuple> #include <tuple>
@@ -23,16 +24,18 @@ public:
virtual void Update(double dt) override; virtual void Update(double dt) override;
private: private:
//methods which will take care of specific events
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
bool WeaponSystem::OnShoot(const Events::Shoot& e);
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
IRenderer* m_Renderer; IRenderer* m_Renderer;
std::vector<std::tuple<EntityID, glm::vec2>> m_EShootVector; // State
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
// Events
EventRelay<WeaponSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool WeaponSystem::OnPlayerSpawned(const Events::PlayerSpawned& e);
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
bool WeaponSystem::OnShoot(const Events::Shoot& e);
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
}; };
#endif #endif
+8 -1
View File
@@ -1,11 +1,13 @@
[Debug] [Debug]
LogLevel=1 LogLevel=1
LoadMap= LoadMap=
EditorEnabled=false
; if true -> Pool allocation is not used when calling Allocate/Free, just use regular dynamic allocation. ; if true -> Pool allocation is not used when calling Allocate/Free, just use regular dynamic allocation.
; if false -> Use pool allocation. ; if false -> Use pool allocation.
DisableMemoryPool=false DisableMemoryPool=false
[Editor]
CameraSpeed=3
[Video] [Video]
Fullscreen=false Fullscreen=false
VSYNC=false VSYNC=false
@@ -19,6 +21,11 @@ IsServer=false
Name=Bob Name=Bob
Address=127.0.0.1 Address=127.0.0.1
Port=13 Port=13
MaxConnections=8
SnapshotInterval=0.05
SendInputIntervalMs=33
PingIntervalMs= 1000
TimeoutMs=15000
[Multithreading] [Multithreading]
ResourceLoading=true ResourceLoading=true
+2 -1
View File
@@ -21,4 +21,5 @@ F1=ToggleEditor
X=EditorToggleTransformSpace X=EditorToggleTransformSpace
C=ConnectToServer C=ConnectToServer
N=SwitchToServer N=SwitchToServer
M=SwitchToClient M=SwitchToClient
P=SwitchToPlayer
+1
View File
@@ -6,6 +6,7 @@
<xs:include schemaLocation="Components/Model.xsd"/> <xs:include schemaLocation="Components/Model.xsd"/>
<xs:include schemaLocation="Components/RaptorCopter.xsd"/> <xs:include schemaLocation="Components/RaptorCopter.xsd"/>
<xs:include schemaLocation="Components/Player.xsd"/> <xs:include schemaLocation="Components/Player.xsd"/>
<xs:include schemaLocation="Components/Text.xsd"/>
<xs:include schemaLocation="Components/Camera.xsd"/> <xs:include schemaLocation="Components/Camera.xsd"/>
<xs:include schemaLocation="Components/AABB.xsd"/> <xs:include schemaLocation="Components/AABB.xsd"/>
<xs:include schemaLocation="Components/PointLight.xsd"/> <xs:include schemaLocation="Components/PointLight.xsd"/>
+2 -5
View File
@@ -1,8 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Player.xsd"> <Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Player.xsd">
<Velocity X="0" Y="0" Z="0"/> <MovementSpeed>3</MovementSpeed>
<Forward>false</Forward> <CrouchSpeed>1.5</CrouchSpeed>
<Left>false</Left>
<Back>false</Back>
<Right>false</Right>
</Player> </Player>
+2 -5
View File
@@ -9,11 +9,8 @@
</xs:annotation> </xs:annotation>
<xs:complexType> <xs:complexType>
<xs:all> <xs:all>
<xs:element name="Velocity" type="t:Vector" minOccurs="0"/> <xs:element name="MovementSpeed" type="t:float" minOccurs="0"/>
<xs:element name="Forward" type="t:bool" minOccurs="0"/> <xs:element name="CrouchSpeed" type="t:float" minOccurs="0"/>
<xs:element name="Left" type="t:bool" minOccurs="0"/>
<xs:element name="Back" type="t:bool" minOccurs="0"/>
<xs:element name="Right" type="t:bool" minOccurs="0"/>
</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" ?>
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
<Content>Text</Content>
<Resource></Resource>
<Color R="1" G="1" B="1" A="1"/>
<Visible>true</Visible>
<Alignment><Center/></Alignment>
</Text>
+42
View File
@@ -0,0 +1,42 @@
<?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:complexType name="AlignmentEnum" mixed="true">
<xs:complexContent>
<xs:extension base="t:enum">
<xs:choice>
<xs:element name="Right" type="xs:integer" fixed="0" minOccurs="0"/>
<xs:element name="Left" type="xs:integer" fixed="1" minOccurs="0"/>
<xs:element name="Center" type="xs:integer" fixed="2" minOccurs="0"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Text">
<xs:annotation>
<xs:documentation>A visible font loaded from disk</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="Content" type="t:string" minOccurs="0">
<xs:annotation><xs:documentation>the content of the string printed</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Resource" type="t:string" minOccurs="0">
<xs:annotation><xs:documentation>The asset file, font resolution, example: Fonts/font.ttf,16</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Color" type="t:Color" minOccurs="0">
<xs:annotation><xs:documentation>Color</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Visible" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Wether the text is visible or not</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Alignment" type="AlignmentEnum" minOccurs="0">
<xs:annotation><xs:documentation>Text alignment</xs:documentation></xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+273
View File
@@ -0,0 +1,273 @@
<?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>
<Components>
<c:Camera/>
<c:Listener/>
<c:Transform>
<Position X="4.52910185" Y="5.50171423" Z="7.69566345"/>
<Orientation X="-0.453785568" Y="0.436270237" Z="-1.03594937e-06"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/dummyscene.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="-0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/animtest.</Resource>
</c:Model>
<c:Transform>
<Position X="-0.0966923237" Y="1.2939688" Z="0.399702221"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/animTest.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="1.31816244" Z="1.1888907"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/animTest.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.708824873" Y="1.30000007" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/animTest.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="1.36948848" Y="1.20000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:DirectionalLight>
<Intensity>0.13000047206878662</Intensity>
</c:DirectionalLight>
<c:Transform>
<Position X="0" Y="2.77622533" Z="0"/>
<Orientation X="0" Y="1.30900002" Z="1.73600006"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:RaptorCopter>
<Speed>0.30000001192092896</Speed>
<Axis X="0" Y="5" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="117.03714" Y="3023.50244" Z="3.03297734"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="1" Z="1.29999995"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="1" R="0"/>
<Radius>5</Radius>
<Intensity>0.80000001192092896</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0" Y="1" Z="-1.29999995"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="0" R="0.478431374"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="-1.30000007" Y="1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="1" R="1"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="1.29999995" Y="1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:RaptorCopter>
<Speed>0.50999981164932251</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Position X="0" Y="-0.100000001" Z="0"/>
<Orientation X="0" Y="191.457993" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0.301960796" G="0.0901960805" R="0.247058824"/>
<Radius>5</Radius>
<Intensity>5</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0" Y="3" Z="5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0.960784316" G="1" R="0"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="3" Z="-7.66608238"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0.00784313772" G="1" R="1"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="-3.47176075" Y="3" Z="-8.09415054"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="0" R="1"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="-9.50536728" Y="2" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="0" R="1"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="3" Z="4.40877533"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0.431372553" G="0.0745098069" R="1"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="5.83008432" Y="3" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="0.623529434" R="0.929411769"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="3.72500014" Y="3" Z="-4.26100016"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="3" Z="-7.50000048"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0.192156866" G="1" R="0"/>
<Radius>5</Radius>
</c:PointLight>
<c:Transform>
<Position X="-5.90153885" Y="3" Z="-5.40681458"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+7 -7
View File
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -41,7 +41,7 @@
<HomePointForTeam>3</HomePointForTeam> <HomePointForTeam>3</HomePointForTeam>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="0.200000003" R="0"/> <Color A="1" B="1" G="0.200000003" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -61,7 +61,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -81,7 +81,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -102,7 +102,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -120,7 +120,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -138,7 +138,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -42,7 +42,7 @@
<CaptureTimer>6.9158446328696002</CaptureTimer> <CaptureTimer>6.9158446328696002</CaptureTimer>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -63,7 +63,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -83,7 +83,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -104,7 +104,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -122,7 +122,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -140,7 +140,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -41,7 +41,7 @@
<HomePointForTeam>3</HomePointForTeam> <HomePointForTeam>3</HomePointForTeam>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="0.200000003" R="0"/> <Color A="1" B="1" G="0.200000003" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -61,7 +61,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -79,7 +79,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -98,7 +98,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -116,7 +116,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -134,7 +134,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
+10 -10
View File
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -41,7 +41,7 @@
<HomePointForTeam>3</HomePointForTeam> <HomePointForTeam>3</HomePointForTeam>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="0.200000003" R="0"/> <Color A="1" B="1" G="0.200000003" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -61,7 +61,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -81,7 +81,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -101,7 +101,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -122,7 +122,7 @@
<CapturePointNumber>4</CapturePointNumber> <CapturePointNumber>4</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -140,7 +140,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -158,7 +158,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -176,7 +176,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -194,7 +194,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
+10 -10
View File
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -41,7 +41,7 @@
<HomePointForTeam>3</HomePointForTeam> <HomePointForTeam>3</HomePointForTeam>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="0.200000003" R="0"/> <Color A="1" B="1" G="0.200000003" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -61,7 +61,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -79,7 +79,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
<c:Transform> <c:Transform>
@@ -96,7 +96,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -115,7 +115,7 @@
<CapturePointNumber>4</CapturePointNumber> <CapturePointNumber>4</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -133,7 +133,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -151,7 +151,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -169,7 +169,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -187,7 +187,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.196078435" R="0.196078435"/> <Color A="1" B="1" G="0.196078435" R="0.196078435"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -0,0 +1,15 @@
<?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:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
+1 -1
View File
@@ -24,7 +24,7 @@
<Static>false</Static> <Static>false</Static>
</c:Collidable> </c:Collidable>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="1" R="0"/> <Color A="1" B="0" G="1" R="0"/>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
@@ -6,7 +6,7 @@
<Orientation X="0" Y="0" Z="0"/> <Orientation X="0" Y="0" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/DummyScene.obj</Resource> <Resource>Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
</Components> </Components>
<Children> <Children>
@@ -17,7 +17,7 @@
<Scale X="1" Y="1" Z="1"/> <Scale X="1" Y="1" Z="1"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.obj</Resource> <Resource>Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
</Components> </Components>
</Entity> </Entity>
@@ -28,7 +28,7 @@
<Scale X="2" Y="2" Z="2"/> <Scale X="2" Y="2" Z="2"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/RotationWidgetX.obj</Resource> <Resource>Models/RotationWidgetX.mesh</Resource>
</c:Model> </c:Model>
<c:Trigger> <c:Trigger>
</c:Trigger> </c:Trigger>
@@ -43,7 +43,7 @@
<Position X="2.5"/> <Position X="2.5"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model> </c:Model>
<c:AABB> <c:AABB>
</c:AABB> </c:AABB>
@@ -69,7 +69,7 @@
<Orientation X="0.0" Y="0" Z="1.0"/> <Orientation X="0.0" Y="0" Z="1.0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitRaptor.obj</Resource> <Resource>Models/Core/UnitRaptor.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -94,7 +94,7 @@
<Orientation X="0" Y="0" Z="0"/> <Orientation X="0" Y="0" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -107,7 +107,7 @@
<Orientation X="0" Y="1.57" Z="0"/> <Orientation X="0" Y="1.57" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Scale X="100" Y="1" Z="100"/> <Scale X="100" Y="1" Z="100"/>
@@ -58,7 +58,7 @@
<Components> <Components>
<c:DirectionalLight/> <c:DirectionalLight/>
<c:Model> <c:Model>
<Resource>Models/DirectionalLightWidget.obj</Resource> <Resource>Models/DirectionalLightWidget.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/> <Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
@@ -70,7 +70,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Assault.obj</Resource> <Resource>Models/Assault.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="-2.00568962" Y="0.527161121" Z="0"/> <Position X="-2.00568962" Y="0.527161121" Z="0"/>
@@ -94,7 +94,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.obj</Resource> <Resource>Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="3.70000029" Z="0"/> <Position X="0" Y="3.70000029" Z="0"/>
@@ -18,7 +18,7 @@
<Axis X="1" Y="0" Z="0"/> <Axis X="1" Y="0" Z="0"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/RotationWidgetX.obj</Resource> <Resource>Models/RotationWidgetX.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -33,7 +33,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/RotationWidgetY.obj</Resource> <Resource>Models/RotationWidgetY.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -48,7 +48,7 @@
<Axis X="0" Y="0" Z="1"/> <Axis X="0" Y="0" Z="1"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/RotationWidgetZ.obj</Resource> <Resource>Models/RotationWidgetZ.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -3,7 +3,7 @@
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/ScaleWidgetOrigin.obj</Resource> <Resource>Models/ScaleWidgetOrigin.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
<c:UniformScale> <c:UniformScale>
@@ -20,7 +20,7 @@
</Type> </Type>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/ScaleWidgetX.obj</Resource> <Resource>Models/ScaleWidgetX.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -34,7 +34,7 @@
</Type> </Type>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/ScaleWidgetY.obj</Resource> <Resource>Models/ScaleWidgetY.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -48,7 +48,7 @@
</Type> </Type>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/ScaleWidgetZ.obj</Resource> <Resource>Models/ScaleWidgetZ.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -3,7 +3,7 @@
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/TranslationWidgetOrigin.obj</Resource> <Resource>Models/TranslationWidgetOrigin.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
<c:UniformScale> <c:UniformScale>
@@ -18,7 +18,7 @@
<Axis X="1" Y="0" Z="0"/> <Axis X="1" Y="0" Z="0"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/TranslationWidgetX.obj</Resource> <Resource>Models/TranslationWidgetX.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -30,7 +30,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/TranslationWidgetY.obj</Resource> <Resource>Models/TranslationWidgetY.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -42,7 +42,7 @@
<Axis X="0" Y="0" Z="1"/> <Axis X="0" Y="0" Z="1"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/TranslationWidgetZ.obj</Resource> <Resource>Models/TranslationWidgetZ.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -54,7 +54,7 @@
<Axis X="0" Y="1" Z="1"/> <Axis X="0" Y="1" Z="1"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/WidgetPlaneX.obj</Resource> <Resource>Models/WidgetPlaneX.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -66,7 +66,7 @@
<Axis X="1" Y="0" Z="1"/> <Axis X="1" Y="0" Z="1"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/WidgetPlaneY.obj</Resource> <Resource>Models/WidgetPlaneY.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -78,7 +78,7 @@
<Axis X="1" Y="1" Z="0"/> <Axis X="1" Y="1" Z="0"/>
</c:EditorWidget> </c:EditorWidget>
<c:Model> <c:Model>
<Resource>Models/WidgetPlaneZ.obj</Resource> <Resource>Models/WidgetPlaneZ.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
+11 -1
View File
@@ -5,6 +5,16 @@
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity>
<Components>
<c:Model>
<Resource></Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
+128
View File
@@ -0,0 +1,128 @@
<?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="Scenemesh">
<Components>
<c:Model>
<Resource>Models\MapVersion1.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DirectionalLight">
<Components>
<c:DirectionalLight>
<Intensity>2</Intensity>
</c:DirectionalLight>
<c:Model>
<Resource>Models/DirectionalLightWidget.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="61.9050903" Z="0"/>
<Scale X="50" Y="50" Z="50"/>
<Orientation X="4.42700005" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="PointLight">
<Components>
<c:PointLight>
<Radius>8</Radius>
<Intensity>2.7999999523162842</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0.370978802" Y="1.88588905" Z="-0.55370003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="PointLight">
<Components>
<c:PointLight>
<Radius>8</Radius>
<Intensity>2.7999999523162842</Intensity>
</c:PointLight>
<c:Transform>
<Position X="38.0347443" Y="1.88588905" Z="62.7340622"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-0.904668212" Y="0" Z="8.48177528"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-4.61666441" Y="0" Z="-8.51156044"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-7.56803513" Y="-0.0658408776" Z="0.59418112"/>
<Scale X="1.20000005" Y="0.900000036" Z="1.30000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="10.460474" Y="0" Z="-3.92580295"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="1.09146011" Y="-0.315138876" Z="-0.333906144"/>
<Scale X="150" Y="1" Z="180"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+30
View File
@@ -0,0 +1,30 @@
<?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>
<Components>
<c:Camera/>
<c:Listener/>
<c:Transform>
<Orientation X="0" Y="-0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>models/animTest.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+147 -35
View File
@@ -6,66 +6,178 @@
</Components> </Components>
<Children> <Children>
<Entity> <Entity name="Ground">
<Components> <Components>
<c:Camera/> <c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.513725519" G="0" R="1"/>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="7" Y="-0.727000058" Z="-1.22800004"/>
<Scale X="50" Y="1.45100009" Z="50"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="RedSpawn">
<Components>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/Player.xml</EntityFile>
</c:Spawner>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="0.300000012" Y="0.0270000007" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
<Color A="1" B="0" G="0" R="1"/>
</c:Model>
<c:Transform>
<Position X="0.800000012" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
<Color A="1" B="0.0117647061" G="0" R="1"/>
</c:Model>
<c:Transform>
<Position X="-0.600000024" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="DirectionalLight">
<Components>
<c:DirectionalLight/>
<c:Model>
<Resource>Models/DirectionalLightWidget.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-6.00145912" Y="1.42697716" Z="3.04144025"/>
<Orientation X="5.69400024" Y="841.179565" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ObstacleCourse">
<Components>
<c:Model>
<Resource>Models/Test/ObstacleCourse.mesh</Resource>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity> <Entity name="ObstacleCoursePlayerBox">
<Components> <Components>
<c:AABB/> <c:AABB/>
<c:Collidable/> <c:Collidable/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.513725519" G="0" R="1"/> <Visible>false</Visible>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="2" Z="0"/> <Position X="6.32800007" Y="0.807000041" Z="-2.2750001"/>
<Scale X="5" Y="1" Z="5"/> <Scale X="1" Y="1.60000002" Z="1"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Player"> <Entity name="ObstacleCourse1uHigh">
<Components>
<c:AABB>
<Origin X="0" Y="0.773000062" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/>
</c:AABB>
<c:Collidable/>
<c:Physics/>
<c:Model>
<Resource>Models/Assault.obj</Resource>
<Color A="1" B="1" G="0" R="0"/>
</c:Model>
<c:Player/>
<c:Transform>
<Position X="0" Y="2.52699995" Z="0.0542778969"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components> <Components>
<c:AABB/> <c:AABB/>
<c:Collidable/> <c:Collidable/>
<c:Physics>
<Velocity X="0" Y="-0.0934068039" Z="0"/>
</c:Physics>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Visible>false</Visible>
</c:Model> </c:Model>
<c:Player/>
<c:Transform> <c:Transform>
<Position X="0" Y="4.15580511" Z="0"/> <Position X="9.11900043" Y="0.5" Z="-2.10900021"/>
<Scale X="0.704558551" Y="0.115156889" Z="1"/> <Scale X="1" Y="1" Z="8.1960001"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="ObstacleCourseWhoTheFuckKnows">
<Components>
<c:AABB/>
<c:Collidable/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="13.2370005" Y="1.28600001" Z="-1.71700013"/>
<Scale X="2.58000016" Y="2.58300018" Z="21.1860008"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BlueSpawn">
<Components>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/Player.xml</EntityFile>
</c:Spawner>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform>
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
<Orientation X="0" Y="3.20700026" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
<Color A="1" B="1" G="0.254901975" R="0"/>
</c:Model>
<c:Transform>
<Position X="0.800000012" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
<Color A="1" B="1" G="0.254901975" R="0"/>
</c:Model>
<c:Transform>
<Position X="-0.600000024" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
+3 -3
View File
@@ -11,7 +11,7 @@
<c:AABB/> <c:AABB/>
<c:Collidable/> <c:Collidable/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0" R="0"/> <Color A="1" B="1" G="0" R="0"/>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
@@ -27,7 +27,7 @@
<Static>false</Static> <Static>false</Static>
</c:Collidable> </c:Collidable>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="0" R="1"/> <Color A="1" B="0" G="0" R="1"/>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
@@ -42,7 +42,7 @@
<Static>false</Static> <Static>false</Static>
</c:Collidable> </c:Collidable>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="1" R="0"/> <Color A="1" B="0" G="1" R="0"/>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
+110 -9
View File
@@ -2,17 +2,118 @@
<Entity name="Player" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="Player" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:AABB/> <c:AABB>
<c:Physics/> <Origin X="0" Y="0.772000015" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/>
</c:AABB>
<c:Collidable/> <c:Collidable/>
<c:Model> <c:Model/>
<Resource>Models/Core/UnitSphere.obj</Resource> <c:Physics/>
<Color A="1" B="1" G="0" R="0"/> <c:Player>
</c:Model> <MovementSpeed>5</MovementSpeed>
<c:Player/> </c:Player>
<c:Transform/> <c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="-0.246963501" Y="0.0265000071" Z="3.01600003"/>
<Orientation X="0" Y="2.14675093" Z="0"/>
</c:Transform>
</Components> </Components>
<Children/> <Children>
<Entity name="Camera">
<Components>
<c:Camera/>
<c:Transform>
<Position X="0" Y="1.37700009" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlayerName">
<Components>
<c:Text>
<Resource>Fonts/DroidSans.ttf,100</Resource>
<Color A="1" B="0" G="1" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0" Y="0.247910097" Z="-0.447844714"/>
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
<Orientation X="0" Y="3.14199996" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="CameraModel">
<Components>
<c:Model>
<Resource>Models/Camera.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
<Scale X="1.30000007" Y="1.50000012" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ThirdPersonCamera">
<Components>
<c:Camera/>
<c:Model>
<Resource>Models/Camera.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="-0.284000009" Y="1.83800006" Z="1.18900001"/>
<Orientation X="5.95600033" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="PlayerModel">
<Components>
<c:Model>
<Resource>Models/AssaultHeadless.mesh</Resource>
<Color A="1" B="0" G="0" R="1"/>
</c:Model>
<c:Transform>
<Orientation X="0" Y="3.14159274" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AABBStanding">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.427450985" B="1" G="1" R="1"/>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="0.772000015" Z="0"/>
<Scale X="1" Y="1.60000002" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AABBCrouching">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.745098054" B="1" G="0" R="1"/>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="0.772000015" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="PointLight" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:PointLight>
<Radius>8</Radius>
<Intensity>2.7999999523162842</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0.370978802" Y="1.88588905" Z="-0.55370003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
+4 -4
View File
@@ -7,7 +7,7 @@
<Orientation X="0.0" Y="0" Z="0.0"/> <Orientation X="0.0" Y="0" Z="0.0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitRaptor.obj</Resource> <Resource>Models/Core/UnitRaptor.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -31,7 +31,7 @@
<Scale X="0.1" Y="0.4" Z="0.1"/> <Scale X="0.1" Y="0.4" Z="0.1"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCylinder.obj</Resource> <Resource>Models/Core/UnitCylinder.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -44,7 +44,7 @@
<Orientation X="0" Y="0" Z="0"/> <Orientation X="0" Y="0" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
@@ -57,7 +57,7 @@
<Orientation X="0" Y="1.57" Z="0"/> <Orientation X="0" Y="1.57" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color R="1" G="0.4" B="0.8"/> <Color R="1" G="0.4" B="0.8"/>
</c:Model> </c:Model>
</Components> </Components>
+260 -56
View File
@@ -1,58 +1,262 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd" xmlns:c="components"> <Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Transform> <c:Transform/>
<Position X="0" Y="0" Z="0"/> </Components>
<Orientation X="0" Y="0" Z="0"/>
</c:Transform> <Children>
</Components> <Entity>
<Children> <Components>
<Entity> <c:Camera>
<Components> <Name>ActionCamera</Name>
<c:Transform> </c:Camera>
<Position X="0" Y="1" Z="10"/> <c:Model>
</c:Transform> <Resource>Models/Camera.mesh</Resource>
<c:Model> </c:Model>
<Resource>Models/Camera.obj</Resource> <c:Transform>
</c:Model> <Position X="-0.504807115" Y="6.00582743" Z="9.68687439"/>
<c:Camera> <Orientation X="-0.733036518" Y="0.000105090476" Z="5.12391125e-07"/>
<Name>MainCamera</Name> </c:Transform>
</c:Camera> </Components>
</Components> <Children>
</Entity> <Entity>
<Entity> <Components>
<Components> <c:Text>
<c:Transform> <Content>Camera #2</Content>
<Position X="5" Y="1" Z="5"/> <Resource>Fonts/DroidSans.ttf,64</Resource>
</c:Transform> <Alignment>0</Alignment>
<c:Model> </c:Text>
<Resource>Models/Camera.obj</Resource> <c:Transform>
</c:Model> <Position X="0.700063765" Y="0.310270816" Z="-1"/>
<c:Camera> <Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
<Name>ActionCamera</Name> </c:Transform>
</c:Camera> </Components>
</Components> <Children/>
</Entity> </Entity>
<Entity> </Children>
<Components> </Entity>
<c:Transform> <Entity>
<Position X="0" Y="-1" Z="0"/> <Components>
<Scale X="100" Y="1" Z="100"/> <c:Model>
</c:Transform> <Resource>Models/Core/UnitPlane.mesh</Resource>
<c:Model> </c:Model>
<Resource>Models/Core/UnitPlane.obj</Resource> <c:Transform>
</c:Model> <Position X="0" Y="-1" Z="0.600000024"/>
</Components> <Scale X="100" Y="1" Z="100"/>
</Entity> </c:Transform>
<Entity> </Components>
<Components> <Children/>
<c:Transform> </Entity>
<Position X="0" Y="0" Z="0"/> <Entity>
</c:Transform> <Components>
<c:Model> <c:Model>
<Resource>An error</Resource> <Resource>Models/Assault.mesh</Resource>
</c:Model> </c:Model>
</Components> <c:Transform>
</Entity> <Position X="-2.5" Y="0" Z="1"/>
</Children> </c:Transform>
</Entity> </Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Text>
<Content>Welcome!</Content>
<Resource>Fonts/DroidSans.ttf,1280</Resource>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="0.700000048"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:RaptorCopter>
<Speed>2</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Position X="0" Y="2.37320328" Z="0"/>
<Orientation X="0" Y="8252.15918" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="0" R="1"/>
<Radius>6</Radius>
<Intensity>0.5</Intensity>
</c:PointLight>
<c:Transform>
<Position X="-2.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="0" R="1"/>
<Radius>8</Radius>
</c:PointLight>
<c:Transform>
<Position X="-5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="1" R="1"/>
<Radius>6</Radius>
<Intensity>0.5</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0" Y="0" Z="-2.5"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="0" G="1" R="0"/>
<Radius>8</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="0" Z="-5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
<Radius>6</Radius>
<Intensity>0.5</Intensity>
</c:PointLight>
<c:Transform>
<Position X="0" Y="0" Z="2.5"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Color A="1" B="1" G="0.00784313772" R="0"/>
<Radius>8</Radius>
</c:PointLight>
<c:Transform>
<Position X="0" Y="0" Z="5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:PointLight>
<Radius>6</Radius>
<Intensity>0.5</Intensity>
</c:PointLight>
<c:Transform>
<Position X="2.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:PointLight>
<Radius>8</Radius>
</c:PointLight>
<c:Transform>
<Position X="5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="2.5" Y="0" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Camera>
<Name>MainCamera</Name>
</c:Camera>
<c:Listener/>
<c:Model>
<Resource>Models/Camera.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="-1.27354908" Y="5.18422079" Z="10.6223917"/>
<Orientation X="-0.436328411" Y="-0.0523675606" Z="1.67869363e-08"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Text>
<Content>Taiwan #1</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>0</Alignment>
</c:Text>
<c:Transform>
<Position X="0.716896772" Y="0.296712071" Z="-1"/>
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity>
<Components>
<c:DirectionalLight>
<Color A="1" B="0.996078432" G="1" R="1"/>
<Intensity>0.80000001192092896</Intensity>
</c:DirectionalLight>
<c:Model>
<Resource>Models/DirectionalLightWidget.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-0.0013256073" Y="1.89540339" Z="6.53467274"/>
<Orientation X="-0.859663308" Y="-0.100310192" Z="-0.404723018"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-5.4082036" Y="0" Z="-1.84950542"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+10 -10
View File
@@ -9,7 +9,7 @@
<Entity> <Entity>
<Components> <Components>
<c:Model> <c:Model>
<Resource>../assets/Models/DummyScene.obj</Resource> <Resource>../assets/Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -41,7 +41,7 @@
<HomePointForTeam>3</HomePointForTeam> <HomePointForTeam>3</HomePointForTeam>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="0.200000003" R="0"/> <Color A="1" B="1" G="0.200000003" R="0"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -61,7 +61,7 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/> <Color A="1" B="1" G="1" R="0"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -79,7 +79,7 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
<c:Transform> <c:Transform>
@@ -96,7 +96,7 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="1" R="1"/> <Color A="1" B="0" G="1" R="1"/>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -115,7 +115,7 @@
<CapturePointNumber>4</CapturePointNumber> <CapturePointNumber>4</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitSphere.obj</Resource> <Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="0" G="0.200000003" R="1"/> <Color A="1" B="0" G="0.200000003" R="1"/>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -133,7 +133,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -151,7 +151,7 @@
<c:Health/> <c:Health/>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0.482352942" G="0.490196079" R="1"/> <Color A="1" B="0.482352942" G="0.490196079" R="1"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -171,7 +171,7 @@
</c:Health> </c:Health>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="0" R="2.25"/> <Color A="1" B="0" G="0" R="2.25"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
@@ -191,7 +191,7 @@
</c:Health> </c:Health>
<c:AABB/> <c:AABB/>
<c:Model> <c:Model>
<Resource>../assets/Models/Core/UnitCube.obj</Resource> <Resource>../assets/Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="0" R="4.5"/> <Color A="1" B="0" G="0" R="4.5"/>
</c:Model> </c:Model>
<c:Player/> <c:Player/>
+1 -1
View File
@@ -12,7 +12,7 @@
<FilePath></FilePath> <FilePath></FilePath>
</c:SoundEmitter> </c:SoundEmitter>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.obj</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.58431375" R="0.43921569"/> <Color A="1" B="1" G="0.58431375" R="0.43921569"/>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
+2 -2
View File
@@ -24,7 +24,7 @@
<Components> <Components>
<c:SpawnPoint/> <c:SpawnPoint/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.obj</Resource> <Resource>Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="1.26689196"/> <Position X="0" Y="0" Z="1.26689196"/>
@@ -37,7 +37,7 @@
<Components> <Components>
<c:SpawnPoint/> <c:SpawnPoint/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.obj</Resource> <Resource>Models/Core/UnitSphere.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="-1.14786315"/> <Position X="0" Y="0" Z="-1.14786315"/>
+2 -2
View File
@@ -6,7 +6,7 @@
<Orientation X="0" Y="0" Z="0"/> <Orientation X="0" Y="0" Z="0"/>
</c:Transform> </c:Transform>
<c:Model> <c:Model>
<Resource>Models/DummyScene.obj</Resource> <Resource>Models/DummyScene.mesh</Resource>
</c:Model> </c:Model>
</Components> </Components>
<Children> <Children>
@@ -19,7 +19,7 @@
<c:Camera> <c:Camera>
</c:Camera> </c:Camera>
<c:Model> <c:Model>
<Resource>Models/Camera.obj</Resource> <Resource>Models/Camera.mesh</Resource>
</c:Model> </c:Model>
</Components> </Components>
</Entity> </Entity>
+3
View File
@@ -16,6 +16,9 @@
<xs:simpleType name="double"> <xs:simpleType name="double">
<xs:restriction base="xs:decimal"></xs:restriction> <xs:restriction base="xs:decimal"></xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="float">
<xs:restriction base="xs:decimal"></xs:restriction>
</xs:simpleType>
<xs:simpleType name="string"> <xs:simpleType name="string">
<xs:restriction base="xs:string"></xs:restriction> <xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType> </xs:simpleType>
+1
View File
@@ -16,6 +16,7 @@
<xs:element ref="c:RaptorCopter" minOccurs="0"/> <xs:element ref="c:RaptorCopter" minOccurs="0"/>
<xs:element ref="c:Player" minOccurs="0"/> <xs:element ref="c:Player" minOccurs="0"/>
<xs:element ref="c:Camera" minOccurs="0"/> <xs:element ref="c:Camera" minOccurs="0"/>
<xs:element ref="c:Text" minOccurs="0"/>
<xs:element ref="c:AABB" minOccurs="0"/> <xs:element ref="c:AABB" minOccurs="0"/>
<xs:element ref="c:Trigger" minOccurs="0"/> <xs:element ref="c:Trigger" minOccurs="0"/>
<xs:element ref="c:Health" minOccurs="0"/> <xs:element ref="c:Health" minOccurs="0"/>
+3 -8
View File
@@ -9,18 +9,14 @@ layout(location = 1) in vec3 Normal;
layout(location = 2) in vec3 Tangent; layout(location = 2) in vec3 Tangent;
layout(location = 3) in vec3 BiTangent; layout(location = 3) in vec3 BiTangent;
layout(location = 4) in vec2 TextureCoords; layout(location = 4) in vec2 TextureCoords;
layout(location = 5) in vec4 DiffuseVertexColor; layout(location = 5) in vec4 BoneIndices;
layout(location = 6) in vec4 SpecularVertexColor; layout(location = 6) in vec4 BoneWeights;
layout(location = 7) in vec4 BoneIndices1;
layout(location = 8) in vec4 BoneIndices2;
layout(location = 9) in vec4 BoneWeights1;
layout(location = 10) in vec4 BoneWeights2;
out VertexData{ out VertexData{
vec3 Position; vec3 Position;
vec3 Normal; vec3 Normal;
vec2 TextureCoordinate; vec2 TextureCoordinate;
vec4 DiffuseColor;
}Output; }Output;
void main() void main()
@@ -30,5 +26,4 @@ void main()
Output.Position = Position; Output.Position = Position;
Output.TextureCoordinate = TextureCoords; Output.TextureCoordinate = TextureCoords;
Output.Normal = Normal; Output.Normal = Normal;
Output.DiffuseColor = DiffuseVertexColor;
} }
@@ -0,0 +1,32 @@
#version 430
layout (binding = 0) uniform sampler2D SceneTexture;
layout (binding = 1) uniform sampler2D BloomTexture;
uniform float Exposure;
in VertexData{
vec2 TextureCoordinate;
}Input;
out vec4 fragmentColor;
void main()
{
const float gamma = 2.2;
vec4 hdrColor = texture(SceneTexture, Input.TextureCoordinate);
vec4 bloomColor = texture(BloomTexture, Input.TextureCoordinate);
hdrColor += bloomColor;
//Toon mapping thingy
vec3 result = vec3(1.0) - exp(-hdrColor.rgb * Exposure);
//gamme correction
result = pow(result, vec3(1.0 / gamma));
fragmentColor = vec4(result, 1.0);
//fragmentColor = hdrColor;
//fragmentColor = bloomColor;
//fragmentColor = vec4(1,0.5,0.7,1);
}
@@ -0,0 +1,13 @@
#version 430
layout (location = 0) in vec3 Position;
out VertexData{
vec2 TextureCoordinate;
}Output;
void main()
{
gl_Position = vec4(Position, 1.0);
Output.TextureCoordinate = (vec2(Position) + 1) / 2;
}
+34 -19
View File
@@ -4,8 +4,10 @@ uniform mat4 M;
uniform mat4 V; uniform mat4 V;
uniform mat4 P; uniform mat4 P;
uniform vec4 Color; uniform vec4 Color;
uniform vec4 DiffuseColor;
uniform vec2 ScreenDimensions; uniform vec2 ScreenDimensions;
uniform sampler2D texture0; layout (binding = 0) uniform sampler2D DiffuseTexture;
layout (binding = 1) uniform sampler2D GlowMap;
#define TILE_SIZE 16 #define TILE_SIZE 16
@@ -45,10 +47,10 @@ in VertexData{
vec3 Position; vec3 Position;
vec3 Normal; vec3 Normal;
vec2 TextureCoordinate; vec2 TextureCoordinate;
vec4 DiffuseColor;
}Input; }Input;
out vec4 fragmentColor; out vec4 sceneColor;
out vec4 bloomColor;
vec4 scene_ambient = vec4(0.3,0.3,0.3,1); vec4 scene_ambient = vec4(0.3,0.3,0.3,1);
@@ -99,9 +101,10 @@ LightResult CalcDirectionalLightSource(vec4 direction, vec4 color, float intensi
void main() void main()
{ {
vec4 texel = texture2D(texture0, Input.TextureCoordinate); vec4 diffuseTexel = texture2D(DiffuseTexture, Input.TextureCoordinate);
vec4 glowTexel = texture2D(GlowMap, Input.TextureCoordinate);
vec4 position = V * M * vec4(Input.Position, 1.0); vec4 position = V * M * vec4(Input.Position, 1.0);
vec4 normal = V * vec4(Input.Normal, 0.0); vec4 normal = normalize(V * vec4(Input.Normal, 0.0));
vec4 viewVec = normalize(-position); vec4 viewVec = normalize(-position);
vec2 tilePos; vec2 tilePos;
@@ -120,30 +123,42 @@ void main()
int l = int(LightIndex[i]); int l = int(LightIndex[i]);
LightSource light = LightSources.List[l]; LightSource light = LightSources.List[l];
LightResult result; LightResult light_result;
//These if statements should be removed.
if(light.Type == 1) { // point if(light.Type == 1) { // point
result = CalcPointLightSource(V * light.Position, light.Radius, light.Color, light.Intensity, viewVec, position, normal, light.Falloff); light_result = CalcPointLightSource(V * light.Position, light.Radius, light.Color, light.Intensity, viewVec, position, normal, light.Falloff);
} else if (light.Type == 2) { //Directional } else if (light.Type == 2) { //Directional
result = CalcDirectionalLightSource(V * light.Direction, light.Color, light.Intensity, viewVec, normal); light_result = CalcDirectionalLightSource(V * light.Direction, light.Color, light.Intensity, viewVec, normal);
} }
totalLighting.Diffuse += result.Diffuse; totalLighting.Diffuse += light_result.Diffuse;
totalLighting.Specular += result.Specular; totalLighting.Specular += light_result.Specular;
} }
//sceneColor += Input.DiffuseColor;
//fragmentColor += Input.DiffuseColor; vec4 color_result = DiffuseColor * (totalLighting.Diffuse + totalLighting.Specular) * diffuseTexel * Color;
fragmentColor += Input.DiffuseColor * (totalLighting.Diffuse + totalLighting.Specular) * texel * Color; //bloomColor = vec4(0.3, 0.8, 0.6, 1.0);
//fragmentColor += Input.DiffuseColor * (totalLighting.Diffuse) * texel * Color; sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
//fragmentColor += Input.DiffuseColor + vec4(0.0, LightGrids.Data[currentTile].Amount/3, 0, 1); //These if statements should be removed if they are slow.
//fragmentColor = texel * Input.DiffuseColor * Color; color_result += glowTexel;
//fragmentColor += vec4(currentTile/3600.f, 0, 0, 1); bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0);
/*
if(color_result.x > 1 || color_result.y > 1 || color_result.z > 1) {
bloomColor = vec4(color_result.xyz, 1.0);
} else {
bloomColor = vec4(0.0, 0.0, 0.0, 1.0);
} */
//sceneColor += Input.DiffuseColor * (totalLighting.Diffuse) * diffuseTexel * Color;
//sceneColor += Input.DiffuseColor + vec4(0.0, LightGrids.Data[currentTile].Amount/3, 0, 1);
//sceneColor = diffuseTexel * Input.DiffuseColor * Color;
//sceneColor += vec4(currentTile/3600.f, 0, 0, 1);
//Tiled Debug Code //Tiled Debug Code
/* /*
if(int(gl_FragCoord.x)%16 == 0 || int(gl_FragCoord.y)%16 == 0 ) { if(int(gl_FragCoord.x)%16 == 0 || int(gl_FragCoord.y)%16 == 0 ) {
fragmentColor += vec4(0.5, 0, 0, 0); sceneColor += vec4(0.5, 0, 0, 0);
} else { } else {
fragmentColor += vec4(LightGrids.Data[int(tilePos.x + tilePos.y*80)].Amount/LightSources.List.length(), 0, 0, 1); sceneColor += vec4(LightGrids.Data[int(tilePos.x + tilePos.y*80)].Amount/LightSources.List.length(), 0, 0, 1);
} }
*/ */
} }
+15 -10
View File
@@ -3,32 +3,37 @@
uniform mat4 M; uniform mat4 M;
uniform mat4 V; uniform mat4 V;
uniform mat4 P; uniform mat4 P;
uniform mat4 Bones[100];
layout(location = 0) in vec3 Position; layout(location = 0) in vec3 Position;
layout(location = 1) in vec3 Normal; layout(location = 1) in vec3 Normal;
layout(location = 2) in vec3 Tangent; layout(location = 2) in vec3 Tangent;
layout(location = 3) in vec3 BiTangent; layout(location = 3) in vec3 BiTangent;
layout(location = 4) in vec2 TextureCoords; layout(location = 4) in vec2 TextureCoords;
layout(location = 5) in vec4 DiffuseVertexColor; layout(location = 5) in vec4 BoneIndices;
layout(location = 6) in vec4 SpecularVertexColor; layout(location = 6) in vec4 BoneWeights;
layout(location = 7) in vec4 BoneIndices1;
layout(location = 8) in vec4 BoneIndices2;
layout(location = 9) in vec4 BoneWeights1;
layout(location = 10) in vec4 BoneWeights2;
out VertexData{ out VertexData{
vec3 Position; vec3 Position;
vec3 Normal; vec3 Normal;
vec2 TextureCoordinate; vec2 TextureCoordinate;
vec4 DiffuseColor;
}Output; }Output;
void main() void main()
{ {
gl_Position = P*V*M * vec4(Position, 1.0);
Output.Position = Position;
mat4 boneTransform = mat4(1);
if(BoneWeights[0] > 0.0f){
boneTransform = BoneWeights[0] * Bones[int(BoneIndices[0])]
+ BoneWeights[1] * Bones[int(BoneIndices[1])]
+ BoneWeights[2] * Bones[int(BoneIndices[2])]
+ BoneWeights[3] * Bones[int(BoneIndices[3])];
}
gl_Position = P*V*M*boneTransform * vec4(Position, 1.0);
Output.Position = (boneTransform * vec4(Position, 1.0)).xyz;
Output.TextureCoordinate = TextureCoords; Output.TextureCoordinate = TextureCoords;
Output.Normal = vec3(M * vec4(Normal, 0.0)); Output.Normal = vec3(M * vec4(Normal, 0.0));
Output.DiffuseColor = DiffuseVertexColor;
} }
@@ -0,0 +1,23 @@
#version 430
layout (binding = 0) uniform sampler2D Texture;
in VertexData{
vec2 TextureCoordinate;
}Input;
out vec4 fragmentColor;
uniform float weight[5] = float[](0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
void main()
{
vec2 tex_offset = 1.0 / textureSize(Texture, 0);
vec3 result = texture(Texture, Input.TextureCoordinate).rgb * weight[0];
for(int i = 1; i < 5; ++i) {
result += texture(Texture, Input.TextureCoordinate + vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
result += texture(Texture, Input.TextureCoordinate - vec2(tex_offset.x * i, 0.0)).rgb * weight[i];
}
fragmentColor = vec4(result, 1.0);
}
@@ -0,0 +1,13 @@
#version 430
layout (location = 0) in vec3 Position;
out VertexData{
vec2 TextureCoordinate;
}Output;
void main()
{
gl_Position = vec4(Position, 1.0);
Output.TextureCoordinate = (vec2(Position) + 1) / 2;
}
+23
View File
@@ -0,0 +1,23 @@
#version 430
layout (binding = 0) uniform sampler2D Texture;
in VertexData{
vec2 TextureCoordinate;
}Input;
out vec4 fragmentColor;
uniform float weight[5] = float[](0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
void main()
{
vec2 tex_offset = 1.0 / textureSize(Texture, 0);
vec3 result = texture(Texture, Input.TextureCoordinate).rgb * weight[0];
for(int i = 1; i < 5; ++i) {
result += texture(Texture, Input.TextureCoordinate + vec2(0.0, tex_offset.y * i)).rgb * weight[i];
result += texture(Texture, Input.TextureCoordinate - vec2(0.0, tex_offset.y * i)).rgb * weight[i];
}
fragmentColor = vec4(result, 1.0);
}
+13
View File
@@ -0,0 +1,13 @@
#version 430
layout (location = 0) in vec3 Position;
out VertexData{
vec2 TextureCoordinate;
}Output;
void main()
{
gl_Position = vec4(Position, 1.0);
Output.TextureCoordinate = (vec2(Position) + 1) / 2;
}
+17
View File
@@ -0,0 +1,17 @@
#version 430
in vec2 TexCoords;
out vec4 color;
uniform sampler2D text;
uniform vec4 textColor;
out vec4 sceneColor;
out vec4 bloomColor;
void main()
{
vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r);
vec4 color_result = textColor * sampled;
sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0) * sampled;
}
+13
View File
@@ -0,0 +1,13 @@
#version 430
layout (location = 0) in vec4 vertex; // <vec2 pos, vec2 tex>
out vec2 TexCoords;
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
void main()
{
gl_Position = P * V * M * vec4(vertex.xy, 0.0, 1.0);
TexCoords = vertex.zw;
}
+3
View File
@@ -8,6 +8,7 @@ find_package(assimp REQUIRED)
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
find_package(Xerces REQUIRED) find_package(Xerces REQUIRED)
find_package(Freetype REQUIRED)
# Because FindOpenAL is retarded # Because FindOpenAL is retarded
set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${CMAKE_SOURCE_DIR}/deps/include/OpenAL") set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${CMAKE_SOURCE_DIR}/deps/include/OpenAL")
find_package(OpenAL REQUIRED) find_package(OpenAL REQUIRED)
@@ -25,6 +26,7 @@ include_directories(
${assimp_INCLUDE_DIRS} ${assimp_INCLUDE_DIRS}
${PNG_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS}
${Xerces_INCLUDE_DIRS} ${Xerces_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
${OPENAL_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR}
${X11_INCLUDE_DIRS} ${X11_INCLUDE_DIRS}
) )
@@ -126,6 +128,7 @@ set(LIBRARIES
${assimp_LIBRARIES} ${assimp_LIBRARIES}
${PNG_LIBRARIES} ${PNG_LIBRARIES}
${Xerces_LIBRARIES} ${Xerces_LIBRARIES}
${FREETYPE_LIBRARIES}
${OPENAL_LIBRARY} ${OPENAL_LIBRARY}
${X11_LIBRARIES} ${X11_LIBRARIES}
) )
+1 -1
View File
@@ -31,7 +31,7 @@ void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
} }
if (Collision::AABBVsAABB(boxA, boxB, resolutionVector)) { if (Collision::AABBVsAABB(boxA, boxB, resolutionVector)) {
(glm::vec3&)cTransform["Position"] += resolutionVector; (glm::vec3&)cTransform["Position"] += resolutionVector;
cPhysics["Velocity"] = glm::vec3(0, 0, 0); ((glm::vec3&)cPhysics["Velocity"]).y = 0.f;
} }
} }

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