Compare commits
280 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fe87aa8e90 | |||
| 483091a1de | |||
| 0e9be1d650 | |||
| 5679a88ddb | |||
| 289bde0395 | |||
| a3fef7bcd1 | |||
| 04fbd0d517 | |||
| 9308e60932 | |||
| fc97c4e8ea | |||
| e3767996a1 | |||
| 809d164eba | |||
| 5879cb0de4 | |||
| 832a901bf6 | |||
| 407149fbb0 | |||
| 4c52f55bf0 | |||
| 8449818cb7 | |||
| 94a10c3a8f | |||
| cbb2eee003 | |||
| f6d85c86c4 | |||
| 8a24a16232 | |||
| d850e116fb | |||
| a4c35e5908 | |||
| ff881e1f78 | |||
| eb2e79e4cb | |||
| f632b45c9b | |||
| 788d80f721 | |||
| 0b485163c9 | |||
| e527badab4 | |||
| 8cef422ea7 | |||
| 54a03ddc0f | |||
| a65d8c86d1 | |||
| d492b54687 | |||
| c1395355c6 | |||
| f62f8d53db | |||
| 51c7e92fce | |||
| 0764c9bab2 | |||
| 7e6830af35 | |||
| c61d33ebd9 | |||
| 1b1963e6d2 | |||
| dea57b4872 | |||
| 3994c0f7ad | |||
| 1345889e62 | |||
| 50abeda99a | |||
| fe6f294986 | |||
| 424dffd1e0 | |||
| 33ed59fc3a | |||
| 562afac9d1 | |||
| d1c11f20f2 | |||
| 1bba40449f | |||
| fd482dd670 | |||
| f5343251c5 | |||
| c493ebca8e | |||
| ef9a449077 | |||
| 5207248a49 | |||
| 12d0c68fbf | |||
| 1bf65d896a | |||
| 7855cf03d2 | |||
| b89f68ae2f | |||
| 36185b43ef | |||
| 4adf7dc507 | |||
| e2686abb16 | |||
| be91fc5005 | |||
| 0084224e18 | |||
| 73bcc6e382 | |||
| f393a22011 | |||
| 9d2ce5af8a | |||
| e4145cf292 | |||
| 03dab9ca9a | |||
| fc7f57fd5d | |||
| c20830572c | |||
| 00d77607b4 | |||
| 1a120ef345 | |||
| a715f7fe86 | |||
| 0d823421d8 | |||
| d587c9a692 | |||
| 7d32909122 | |||
| ce2fcd9109 | |||
| 77bb7a0f5c | |||
| 78c7d777e3 | |||
| 98bd447084 | |||
| fd50ea3a12 | |||
| 83ae87594f | |||
| 53dd96d44d | |||
| d9b47ddb62 | |||
| bc3e699ddb | |||
| 412c92aa7f | |||
| b76bc74c4b | |||
| 8c48e96ad1 | |||
| fe9c5bd686 | |||
| 7fa634ef7c | |||
| 080f5ac856 | |||
| 4ecbef59bf | |||
| 8a1217e8b5 | |||
| f59a9e1d2b | |||
| 5796d07b56 | |||
| 8e150da7ff | |||
| 148d60f8f8 | |||
| 066ca6075d | |||
| 93f4384da6 | |||
| 3a0cff7a83 | |||
| c790b952fb | |||
| 27443d4e08 | |||
| 20e48eeb08 | |||
| e929ecab50 | |||
| be3d75a5cf | |||
| b3c935c7cc | |||
| ee8d7574b2 | |||
| 1da3ec3c74 | |||
| f05b09ca7a | |||
| e76740d72b | |||
| d3927de7cc | |||
| 5aaefc6e53 | |||
| 6bfed76e06 | |||
| 389d27973f | |||
| fe090504cf | |||
| fc5ad2d380 | |||
| a9d5c5d9d2 | |||
| 0d287ad5d1 | |||
| 3cee4e4248 | |||
| 5f11d1e066 | |||
| 672d6f884d | |||
| 17007a2a41 | |||
| 5ea0f04b20 | |||
| 9b5e4c10fd | |||
| 041050ab2f | |||
| 9f752ad3e9 | |||
| 04288e5243 | |||
| fb400bb743 | |||
| aa2475dfd6 | |||
| 36c4837813 | |||
| 741ed01930 | |||
| 2fa3637018 | |||
| 52e5e2527a | |||
| 36253a8afd | |||
| 44f46cda8d | |||
| 5c343cb254 | |||
| b73595eed0 | |||
| 7d899a989c | |||
| bb3a8dba6a | |||
| f9e640ffc6 | |||
| f2c7a9f27a | |||
| 0f4f32188c | |||
| 0516794db6 | |||
| ac20e41a5d | |||
| 0963f61976 | |||
| bfb7a4139d | |||
| 4f99f6ef74 | |||
| d0a083a1e3 | |||
| d5f06fa8c2 | |||
| 8bb8ebbea3 | |||
| 60c6aa2486 | |||
| 8d809f30f7 | |||
| bbe61f300c | |||
| ec7ab417e6 | |||
| 4bd2e7995a | |||
| 799fd31844 | |||
| 45bfc374de | |||
| 13f44c2086 | |||
| f6a8534c15 | |||
| 95f9065037 | |||
| 993e56ec59 | |||
| a1fda82d3a | |||
| 20d46f63c8 | |||
| f6113b9d9c | |||
| 2e89227061 | |||
| 958850903a | |||
| 7ea90bede7 | |||
| 2bfbd72189 | |||
| 1e7f6941ba | |||
| 5146d21173 | |||
| 8c90c39680 | |||
| b7d88808e2 | |||
| f8f536802f | |||
| 91bad517d3 | |||
| 60df30fa59 | |||
| c0fc36845f | |||
| 51b8846b3a | |||
| ba93ebbe88 | |||
| 70b0ca8776 | |||
| 90d848e8d9 | |||
| a3b3351e55 | |||
| ce0d3b9fbe | |||
| 674604d0df | |||
| 8e9ddc7b9d | |||
| 36b84f7cc3 | |||
| c544f349fd | |||
| dfc30f4693 | |||
| 944d10f4bb | |||
| f7363eeea4 | |||
| beee2db5fb | |||
| 1bc4b89a53 | |||
| d51ea3cabd | |||
| 548efeb11e | |||
| 4ba011a098 | |||
| 01cb3afb4b | |||
| 0b26f23188 | |||
| 8c2a665ccb | |||
| cc10e5500b | |||
| 068e151741 | |||
| e7a3793486 | |||
| 9bac141a6b | |||
| 4334ea067e | |||
| 8e266984f4 | |||
| 0c1a2d3160 | |||
| eb5fcd6d19 | |||
| 9942747d41 | |||
| 24bb05ec67 | |||
| df7b4faf24 | |||
| 01db8e0615 | |||
| 5baac926aa | |||
| 060585a388 | |||
| ee5c13d463 | |||
| 671079764e | |||
| 9b98bbbea8 | |||
| 80649ce51d | |||
| a4b0b108d4 | |||
| 2a209c5d8e | |||
| 28d576bfc0 | |||
| 66d0f9fa47 | |||
| dc09ba9158 | |||
| e0a6b09d36 | |||
| 1ad087dc75 | |||
| 157a54e845 | |||
| 7759af2c5a | |||
| ac096bbf77 | |||
| 81634578d9 | |||
| 2f61171d16 | |||
| aa16a15693 | |||
| 4df936ca70 | |||
| 266aca467e | |||
| cc127ad772 | |||
| 1992b6cde1 | |||
| c82be79bb8 | |||
| 35a8d45fa4 | |||
| 0d2e8c1cbe | |||
| b3ea26779a | |||
| 59e487f9bb | |||
| 6c072aae45 | |||
| 68634126e5 | |||
| e444a86ec5 | |||
| 981dc3467e | |||
| 42af029a26 | |||
| 2e5dfc609a | |||
| ba6d2b758d | |||
| 12dd1d21de | |||
| e0de91cce3 | |||
| b7d93058b1 | |||
| ab2b28264f | |||
| 5d53fc74cb | |||
| ecc8d998cf | |||
| e3c0fb2178 | |||
| 090bd806ce | |||
| ec3ed1f46f | |||
| ee99821164 | |||
| 53ea5bd37d | |||
| 243276707a | |||
| 16124b7aa7 | |||
| a7c57da2c9 | |||
| 1227a795d7 | |||
| 1cc92f4800 | |||
| 3613d66d32 | |||
| 20c6caa408 | |||
| 7b32d92170 | |||
| 46eaedb186 | |||
| b7fac7103d | |||
| 0cf92e99ff | |||
| 3ba73b8206 | |||
| d3ffb9768b | |||
| fcf5117952 | |||
| 2c56b03b2b | |||
| 4fd578c764 | |||
| 67dffafe5a | |||
| bb6e491eed | |||
| 669a7d13cf | |||
| 9229b77893 | |||
| 7dbb9e452b | |||
| cf3d1b5b00 | |||
| 9783f9c650 | |||
| f72dea3852 | |||
| fb80d088e4 |
+1
-1
Submodule assets updated: 33455a9d10...ed93148764
+1
-1
Submodule deps updated: ed45883a44...49ef585366
@@ -12,7 +12,7 @@
|
|||||||
#include "../Core/AABB.h"
|
#include "../Core/AABB.h"
|
||||||
#include "Rendering/RawModelCustom.h"
|
#include "Rendering/RawModelCustom.h"
|
||||||
//#include "Rendering/RawModelAssimp.h"
|
//#include "Rendering/RawModelAssimp.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/Entity.h"
|
||||||
#include "../Core/EntityWrapper.h"
|
#include "../Core/EntityWrapper.h"
|
||||||
#include "EntityAABB.h"
|
#include "EntityAABB.h"
|
||||||
@@ -48,13 +48,13 @@ bool RayVsTriangle(const Ray& ray,
|
|||||||
bool trueOnNegativeDistance = false);
|
bool trueOnNegativeDistance = false);
|
||||||
//Return true if the ray hits any of the triangles in the model. Stops checking when a hit is detected.
|
//Return true if the ray hits any of the triangles in the model. Stops checking when a hit is detected.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
//Return true if the ray hits any of the triangles in the model.
|
//Return true if the ray hits any of the triangles in the model.
|
||||||
//Also returns the position of the intersection point. Will loop through all the whole model indices.
|
//Also returns the position of the intersection point. Will loop through all the whole model indices.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& outHitPosition);
|
glm::vec3& outHitPosition);
|
||||||
@@ -62,7 +62,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
//Also returns the distance from the ray origin to the closest
|
//Also returns the distance from the ray origin to the closest
|
||||||
//intersection point, and the barycentric u,v-coordinates. Will loop through all the whole model indices.
|
//intersection point, and the barycentric u,v-coordinates. Will loop through all the whole model indices.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
float& outDistance,
|
float& outDistance,
|
||||||
@@ -70,7 +70,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
float& outVCoord);
|
float& outVCoord);
|
||||||
|
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& boxVelocity,
|
glm::vec3& boxVelocity,
|
||||||
@@ -80,7 +80,7 @@ bool AABBvsTriangles(const AABB& box,
|
|||||||
|
|
||||||
//Detects collision, but does not resolve.
|
//Detects collision, but does not resolve.
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ enum Output
|
|||||||
};
|
};
|
||||||
//Detects intersection and containment.
|
//Detects intersection and containment.
|
||||||
Output AABBvsTrianglesWContainment(const AABB& box,
|
Output AABBvsTrianglesWContainment(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define ComponentInfo_h__
|
#define ComponentInfo_h__
|
||||||
|
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
|
#include "Entity.h"
|
||||||
#include <boost/shared_array.hpp>
|
#include <boost/shared_array.hpp>
|
||||||
|
|
||||||
struct ComponentInfo
|
struct ComponentInfo
|
||||||
@@ -21,6 +22,7 @@ struct ComponentInfo
|
|||||||
{
|
{
|
||||||
std::string Name;
|
std::string Name;
|
||||||
std::string Type;
|
std::string Type;
|
||||||
|
unsigned char Index;
|
||||||
unsigned int Offset;
|
unsigned int Offset;
|
||||||
unsigned int Stride;
|
unsigned int Stride;
|
||||||
};
|
};
|
||||||
@@ -32,6 +34,16 @@ struct ComponentInfo
|
|||||||
unsigned int Stride = 0;
|
unsigned int Stride = 0;
|
||||||
boost::shared_array<char> Defaults = nullptr;
|
boost::shared_array<char> Defaults = nullptr;
|
||||||
std::shared_ptr<Meta_t> Meta = nullptr;
|
std::shared_ptr<Meta_t> Meta = nullptr;
|
||||||
|
|
||||||
|
std::size_t GetHeaderSize() const
|
||||||
|
{
|
||||||
|
std::size_t size = 0;
|
||||||
|
|
||||||
|
// A component block starts with an entity ID
|
||||||
|
size += sizeof(EntityID);
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|||||||
@@ -5,16 +5,15 @@
|
|||||||
#include "MemoryPool.h"
|
#include "MemoryPool.h"
|
||||||
#include "ComponentInfo.h"
|
#include "ComponentInfo.h"
|
||||||
#include "ComponentWrapper.h"
|
#include "ComponentWrapper.h"
|
||||||
|
#include "DirtySet.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ComponentPool;
|
||||||
class ComponentPoolForwardIterator
|
class ComponentPoolForwardIterator
|
||||||
: public std::iterator<std::forward_iterator_tag, ComponentWrapper>
|
: public std::iterator<std::forward_iterator_tag, ComponentWrapper>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ComponentPoolForwardIterator(const ComponentInfo& componentInfo, const MemoryPool<char>::iterator begin, const MemoryPool<char>::iterator end)
|
ComponentPoolForwardIterator(ComponentPool* pool, const MemoryPool<char>::iterator begin, const MemoryPool<char>::iterator end);
|
||||||
: m_ComponentInfo(componentInfo)
|
|
||||||
, m_MemoryPoolIterator(begin)
|
|
||||||
, m_MemoryPoolEnd(end)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
ComponentPoolForwardIterator(const ComponentPoolForwardIterator& other) = default;
|
ComponentPoolForwardIterator(const ComponentPoolForwardIterator& other) = default;
|
||||||
ComponentPoolForwardIterator(ComponentPoolForwardIterator&& other) = default;
|
ComponentPoolForwardIterator(ComponentPoolForwardIterator&& other) = default;
|
||||||
@@ -27,6 +26,7 @@ public:
|
|||||||
ComponentWrapper operator*() const;
|
ComponentWrapper operator*() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
ComponentPool* m_ComponentPool;
|
||||||
const ComponentInfo& m_ComponentInfo;
|
const ComponentInfo& m_ComponentInfo;
|
||||||
MemoryPool<char>::iterator m_MemoryPoolIterator;
|
MemoryPool<char>::iterator m_MemoryPoolIterator;
|
||||||
const MemoryPool<char>::iterator m_MemoryPoolEnd;
|
const MemoryPool<char>::iterator m_MemoryPoolEnd;
|
||||||
@@ -34,6 +34,7 @@ private:
|
|||||||
|
|
||||||
class ComponentPool
|
class ComponentPool
|
||||||
{
|
{
|
||||||
|
friend class ComponentPoolForwardIterator;
|
||||||
public:
|
public:
|
||||||
typedef ComponentPoolForwardIterator iterator;
|
typedef ComponentPoolForwardIterator iterator;
|
||||||
typedef ptrdiff_t difference_type;
|
typedef ptrdiff_t difference_type;
|
||||||
@@ -42,9 +43,10 @@ public:
|
|||||||
typedef ComponentWrapper* pointer;
|
typedef ComponentWrapper* pointer;
|
||||||
typedef ComponentWrapper& reference;
|
typedef ComponentWrapper& reference;
|
||||||
|
|
||||||
ComponentPool(const ::ComponentInfo& ci)
|
ComponentPool(const ::ComponentInfo& ci, World* world)
|
||||||
: m_ComponentInfo(ci)
|
: m_ComponentInfo(ci)
|
||||||
, m_Pool(ci.Meta->Allocation, sizeof(EntityID) + ci.Stride)
|
, m_Pool(ci.Meta->Allocation, ci.GetHeaderSize() + ci.Stride)
|
||||||
|
, m_World(world)
|
||||||
{ }
|
{ }
|
||||||
~ComponentPool();
|
~ComponentPool();
|
||||||
ComponentPool(const ComponentPool& other);
|
ComponentPool(const ComponentPool& other);
|
||||||
@@ -61,8 +63,8 @@ public:
|
|||||||
// Delete a component and free its memory
|
// Delete a component and free its memory
|
||||||
void Delete(ComponentWrapper& wrapper);
|
void Delete(ComponentWrapper& wrapper);
|
||||||
|
|
||||||
iterator begin() const;
|
iterator begin();
|
||||||
iterator end() const;
|
iterator end();
|
||||||
size_t size() const;
|
size_t size() const;
|
||||||
|
|
||||||
//Dumps information about what the pool memory looks like right now
|
//Dumps information about what the pool memory looks like right now
|
||||||
@@ -80,6 +82,8 @@ private:
|
|||||||
::ComponentInfo m_ComponentInfo;
|
::ComponentInfo m_ComponentInfo;
|
||||||
MemoryPool<char> m_Pool;
|
MemoryPool<char> m_Pool;
|
||||||
std::unordered_map<EntityID, char*> m_EntityToComponent;
|
std::unordered_map<EntityID, char*> m_EntityToComponent;
|
||||||
|
DirtySet m_DirtySet;
|
||||||
|
World* m_World;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,46 +4,32 @@
|
|||||||
#include <boost/shared_array.hpp>
|
#include <boost/shared_array.hpp>
|
||||||
#include <boost/any.hpp>
|
#include <boost/any.hpp>
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "ComponentInfo.h"
|
#include "ComponentInfo.h"
|
||||||
|
#include "DirtySet.h"
|
||||||
#include "Util/Any.h"
|
#include "Util/Any.h"
|
||||||
|
|
||||||
template <typename T, typename Enable = void>
|
class World;
|
||||||
struct ComponentField { };
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct ComponentField<T, typename std::enable_if<std::is_trivially_copyable<T>::value>::type>
|
|
||||||
{
|
|
||||||
static T& Get(const ComponentInfo::Field_t& info, char* data) { return *reinterpret_cast<T*>(data); }
|
|
||||||
static void Set(const ComponentInfo::Field_t& info, char* data, const T& value) { Get(data) = value; }
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct ComponentField<std::string, void>
|
|
||||||
{
|
|
||||||
static std::string& Get(const ComponentInfo::Field_t& info, char* data) { return **reinterpret_cast<std::string**>(data); }
|
|
||||||
static void Set(const ComponentInfo::Field_t& info, char* data, const std::string& value) { Get(info, data) = value; }
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ComponentWrapper
|
struct ComponentWrapper
|
||||||
{
|
{
|
||||||
ComponentWrapper(const ComponentInfo& componentInfo, char* data)
|
ComponentWrapper(const ComponentInfo& componentInfo, char* data, ::DirtyBitField* dirtyBitField, World* world);
|
||||||
: Info(componentInfo)
|
|
||||||
, EntityID(*reinterpret_cast<::EntityID*>(data))
|
|
||||||
, Data(data + sizeof(::EntityID))
|
|
||||||
{ }
|
|
||||||
|
|
||||||
|
World* m_World;
|
||||||
const ComponentInfo& Info;
|
const ComponentInfo& Info;
|
||||||
const ::EntityID EntityID;
|
const ::EntityID EntityID;
|
||||||
char* Data;
|
char* Data;
|
||||||
|
::DirtyBitField* DirtyBitField = nullptr;
|
||||||
|
|
||||||
ComponentInfo::EnumType Enum(const char* fieldName, const char* enumKey)
|
ComponentInfo::EnumType Enum(const char* fieldName, const char* enumKey);
|
||||||
{
|
|
||||||
return Info.Meta->FieldEnumDefinitions.at(fieldName).at(enumKey);
|
bool Dirty(DirtySetType type, const std::string& fieldName);
|
||||||
}
|
void SetDirty(DirtySetType type, const std::string& fieldName, bool dirty = true);
|
||||||
|
void SetAllDirty(const std::string& fieldName, bool dirty = true);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T& Field(std::string name)
|
T& Field(const std::string& name)
|
||||||
{
|
{
|
||||||
const ComponentInfo::Field_t& field = Info.Fields.at(name);
|
const ComponentInfo::Field_t& field = Info.Fields.at(name);
|
||||||
if (sizeof(T) > field.Stride) {
|
if (sizeof(T) > field.Stride) {
|
||||||
@@ -55,13 +41,15 @@ struct ComponentWrapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void SetField(std::string name, const T value) { Field<T>(name) = value; }
|
void SetField(const std::string& name, const T& value)
|
||||||
//template <typename T>
|
{
|
||||||
//void SetField(std::string name, T& value) { Field<T>(name) = value; }
|
Field<T>(name) = value;
|
||||||
|
SetAllDirty(name);
|
||||||
|
}
|
||||||
|
|
||||||
// Specialization for string literals
|
// Specialization for string literals
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
void SetField(std::string name, const char(&value)[N]) { Field<std::string>(name) = std::string(value); }
|
void SetField(const std::string& name, const char(&value)[N]) { SetField(name, std::string(value)); }
|
||||||
|
|
||||||
void Copy(ComponentWrapper& destination)
|
void Copy(ComponentWrapper& destination)
|
||||||
{
|
{
|
||||||
@@ -95,40 +83,163 @@ struct ComponentWrapper
|
|||||||
struct SubscriptProxy
|
struct SubscriptProxy
|
||||||
{
|
{
|
||||||
friend struct ComponentWrapper;
|
friend struct ComponentWrapper;
|
||||||
private:
|
|
||||||
SubscriptProxy(ComponentWrapper* component, std::string propertyName)
|
public:
|
||||||
|
SubscriptProxy(ComponentWrapper* component, std::string fieldName)
|
||||||
: m_Component(component)
|
: m_Component(component)
|
||||||
, m_PropertyName(propertyName)
|
, m_FieldName(fieldName)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
ComponentWrapper* m_Component;
|
ComponentWrapper* m_Component;
|
||||||
std::string m_PropertyName;
|
std::string m_FieldName;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Return the integer value of an enum type key for this field
|
// Return the integer value of an enum type key for this field
|
||||||
ComponentInfo::EnumType Enum(const char* enumKey) { return m_Component->Enum(m_PropertyName.c_str(), enumKey); }
|
ComponentInfo::EnumType Enum(const char* enumKey) { return m_Component->Enum(m_FieldName.c_str(), enumKey); }
|
||||||
|
bool Dirty(DirtySetType type) { return m_Component->Dirty(type, m_FieldName); }
|
||||||
|
void SetDirty(DirtySetType type, bool dirty = true) { m_Component->SetDirty(type, m_FieldName, dirty); }
|
||||||
|
void SetAllDirty(bool dirty = true) { m_Component->SetAllDirty(m_FieldName, dirty); }
|
||||||
|
|
||||||
template <typename T>
|
operator const double&() { return m_Component->Field<double>(m_FieldName); }
|
||||||
operator T&() { return m_Component->Field<T>(m_PropertyName); }
|
operator const float&() { return m_Component->Field<float>(m_FieldName); }
|
||||||
|
operator const int&() { return m_Component->Field<int>(m_FieldName); }
|
||||||
|
operator const glm::vec3&() { return m_Component->Field<glm::vec3>(m_FieldName); }
|
||||||
|
operator const glm::vec4&() { return m_Component->Field<glm::vec4>(m_FieldName); }
|
||||||
|
operator const glm::quat&() { return m_Component->Field<glm::quat>(m_FieldName); }
|
||||||
|
operator const bool&() { return m_Component->Field<bool>(m_FieldName); }
|
||||||
|
operator const std::string&() { return m_Component->Field<std::string>(m_FieldName); }
|
||||||
|
|
||||||
|
// Don't allow non-const references
|
||||||
|
// If this wasn't deleted, the above overloads would still get called for some reason...
|
||||||
|
template <
|
||||||
|
typename T,
|
||||||
|
typename = typename std::enable_if<!std::is_base_of<::FIELDLOL, T>::value>::type
|
||||||
|
>
|
||||||
|
//operator T&() = delete;
|
||||||
|
operator T&() { static_assert(constexpr(false), "https://github.com/teamfisk/TacticalZ/pull/212"); }
|
||||||
|
|
||||||
|
// Value assignment
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void operator=(const T val) { m_Component->SetField<T>(m_PropertyName, val); }
|
void operator=(const T& val) { m_Component->SetField<T>(m_FieldName, val); }
|
||||||
// TODO: Pass by reference and rvalue (universal reference?)
|
|
||||||
//template <typename T>
|
|
||||||
//void operator=(T& val) { m_Component->SetField<T>(m_PropertyName, val); }
|
|
||||||
|
|
||||||
// Specialization for string literals
|
// Specialization for string literals
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
void operator=(const char(&val)[N]) { m_Component->SetField<N>(m_PropertyName, val); }
|
void operator=(const char(&val)[N]) { m_Component->SetField<N>(m_FieldName, val); }
|
||||||
};
|
};
|
||||||
SubscriptProxy operator[](std::string propertyName) { return SubscriptProxy(this, propertyName); }
|
SubscriptProxy operator[](const std::string& propertyName) { return SubscriptProxy(this, propertyName); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FIELDLOL { }; // lol
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct FieldBase : FIELDLOL
|
||||||
|
{
|
||||||
|
FieldBase(ComponentWrapper::SubscriptProxy& Proxy)
|
||||||
|
: Proxy(Proxy)
|
||||||
|
, Data(Proxy.m_Component->Field<T>(Proxy.m_FieldName))
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void SetAllDirty() { Proxy.SetAllDirty(); }
|
||||||
|
|
||||||
|
FieldBase& operator=(const FieldBase& rhs) { Data = rhs.Data; SetAllDirty(); return *this; }
|
||||||
|
FieldBase& operator=(const T& rhs) { Data = rhs; SetAllDirty(); return *this; }
|
||||||
|
|
||||||
|
template <typename T2> FieldBase& operator+=(const T2& rhs) { Data += rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator-=(const T2& rhs) { Data -= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator*=(const T2& rhs) { Data *= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator/=(const T2& rhs) { Data /= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator%=(const T2& rhs) { Data %= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator&=(const T2& rhs) { Data &= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator|=(const T2& rhs) { Data |= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator^=(const T2& rhs) { Data ^= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator<<=(const T2& rhs) { Data <<= rhs; SetAllDirty(); return *this; }
|
||||||
|
template <typename T2> FieldBase& operator>>=(const T2& rhs) { Data >>= rhs; SetAllDirty(); return *this; }
|
||||||
|
|
||||||
|
T operator+() const { return +Data; }
|
||||||
|
T operator-() const { return -Data; }
|
||||||
|
T operator~() const { return ~Data; }
|
||||||
|
|
||||||
|
FieldBase& operator++() { Data++; SetAllDirty(); return *this; }
|
||||||
|
T operator++(int) { T tmp = Data; operator++(); return tmp; }
|
||||||
|
FieldBase& operator--() { Data--; SetAllDirty(); return *this; }
|
||||||
|
T operator--(int) { T tmp = Data; operator--(); return tmp; }
|
||||||
|
|
||||||
|
operator const T&() const { return Data; }
|
||||||
|
const T& operator*() const { return operator const T&(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ComponentWrapper::SubscriptProxy Proxy;
|
||||||
|
T& Data;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct Field : FieldBase<T>
|
||||||
|
{
|
||||||
|
using FieldBase<T>::FieldBase;
|
||||||
|
using FieldBase<T>::operator=;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Field<glm::vec3> : FieldBase<glm::vec3>
|
||||||
|
{
|
||||||
|
using FieldBase<glm::vec3>::FieldBase;
|
||||||
|
using FieldBase<glm::vec3>::operator=;
|
||||||
|
|
||||||
|
glm::vec3::value_type x() const { return Data.x; }
|
||||||
|
void x(glm::vec3::value_type val) { Data.x = val; SetAllDirty(); }
|
||||||
|
glm::vec3::value_type y() const { return Data.y; }
|
||||||
|
void y(glm::vec3::value_type val) { Data.y = val; SetAllDirty(); }
|
||||||
|
glm::vec3::value_type z() const { return Data.z; }
|
||||||
|
void z(glm::vec3::value_type val) { Data.z = val; SetAllDirty(); }
|
||||||
|
|
||||||
|
template <typename T> friend glm::vec3 operator+(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) + glm::vec3(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator-(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) - glm::vec3(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator*(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) * glm::vec3(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator/(const Field<glm::vec3>& lhs, const T& rhs) { return static_cast<glm::vec3>(lhs) / glm::vec3(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator+(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) + static_cast<glm::vec3>(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator-(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) - static_cast<glm::vec3>(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator*(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) * static_cast<glm::vec3>(rhs); }
|
||||||
|
template <typename T> friend glm::vec3 operator/(const T& lhs, const Field<glm::vec3>& rhs) { return glm::vec3(lhs) / static_cast<glm::vec3>(rhs); }
|
||||||
|
|
||||||
|
friend glm::vec3& operator+=(glm::vec3& lhs, const Field<glm::vec3>& rhs) { lhs += *rhs; return lhs; }
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Field<glm::vec4> : FieldBase<glm::vec4>
|
||||||
|
{
|
||||||
|
//Field(glm::vec4& Data)
|
||||||
|
// : FieldBase(Data)
|
||||||
|
//{ }
|
||||||
|
using FieldBase<glm::vec4>::FieldBase;
|
||||||
|
using FieldBase<glm::vec4>::operator=;
|
||||||
|
|
||||||
|
glm::vec4::value_type x() const { return Data.x; }
|
||||||
|
void x(glm::vec4::value_type val) { Data.x = val; SetAllDirty(); }
|
||||||
|
glm::vec4::value_type y() const { return Data.y; }
|
||||||
|
void y(glm::vec4::value_type val) { Data.y = val; SetAllDirty(); }
|
||||||
|
glm::vec4::value_type z() const { return Data.z; }
|
||||||
|
void z(glm::vec4::value_type val) { Data.z = val; SetAllDirty(); }
|
||||||
|
glm::vec4::value_type w() const { return Data.w; }
|
||||||
|
void w(glm::vec4::value_type val) { Data.w = val; SetAllDirty(); }
|
||||||
|
|
||||||
|
template <typename T> friend glm::vec4 operator+(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) + glm::vec4(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator-(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) - glm::vec4(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator*(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) * glm::vec4(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator/(const Field<glm::vec4>& lhs, const T& rhs) { return static_cast<glm::vec4>(lhs) / glm::vec4(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator+(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) + static_cast<glm::vec4>(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator-(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) - static_cast<glm::vec4>(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator*(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) * static_cast<glm::vec4>(rhs); }
|
||||||
|
template <typename T> friend glm::vec4 operator/(const T& lhs, const Field<glm::vec4>& rhs) { return glm::vec4(lhs) / static_cast<glm::vec4>(rhs); }
|
||||||
|
|
||||||
|
friend glm::vec4& operator+=(glm::vec4& lhs, const Field<glm::vec4>& rhs) { lhs += *rhs; return lhs; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// A component wrapper that "owns" its data through a shared pointer
|
// A component wrapper that "owns" its data through a shared pointer
|
||||||
struct SharedComponentWrapper : ComponentWrapper
|
struct SharedComponentWrapper : ComponentWrapper
|
||||||
{
|
{
|
||||||
SharedComponentWrapper(const ComponentInfo& componentInfo, boost::shared_array<char> data)
|
SharedComponentWrapper(const ComponentInfo& componentInfo, boost::shared_array<char> data)
|
||||||
: ComponentWrapper(componentInfo, data.get())
|
: ComponentWrapper(componentInfo, data.get(), nullptr, nullptr)
|
||||||
, m_DataReference(data)
|
, m_DataReference(data)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef DirtySet_h__
|
||||||
|
#define DirtySet_h__
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
#include "ComponentInfo.h"
|
||||||
|
|
||||||
|
enum class DirtySetType
|
||||||
|
{
|
||||||
|
Transform,
|
||||||
|
Network
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::unordered_map<DirtySetType, std::set<decltype(ComponentInfo::Field_t::Index)>> DirtyBitField;
|
||||||
|
typedef std::unordered_map<EntityID, DirtyBitField> DirtySet;
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#ifndef ECaptured_h__
|
#ifndef Events_Captured_h__
|
||||||
#define ECaptured_h__
|
#define Events_Captured_h__
|
||||||
|
|
||||||
#include "EventBroker.h"
|
#include "EventBroker.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/Entity.h"
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
#define EEntityDeleted_h__
|
#define EEntityDeleted_h__
|
||||||
|
|
||||||
#include "Event.h"
|
#include "Event.h"
|
||||||
#include "Entity.h"
|
#include "EntityWrapper.h"
|
||||||
|
|
||||||
namespace Events
|
namespace Events
|
||||||
{
|
{
|
||||||
|
|
||||||
struct EntityDeleted : Event
|
struct EntityDeleted : Event
|
||||||
{
|
{
|
||||||
EntityID DeletedEntity;
|
EntityWrapper DeletedEntity;
|
||||||
// True if the entity deletion was triggered because the entity's parent was deleted before it
|
// True if the entity deletion was triggered because the entity's parent was deleted before it
|
||||||
bool Cascaded;
|
bool Cascaded;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -45,8 +45,9 @@ struct EntityWrapper
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent);
|
EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent);
|
||||||
EntityWrapper cloneRecursive(EntityWrapper entity, EntityWrapper parent);
|
|
||||||
void childrenWithComponentRecursive(const std::string& componentType, EntityWrapper& entity, std::vector<EntityWrapper>& childrenWithComponent);
|
void childrenWithComponentRecursive(const std::string& componentType, EntityWrapper& entity, std::vector<EntityWrapper>& childrenWithComponent);
|
||||||
|
static void fillRelationships(std::unordered_multimap<EntityWrapper, EntityWrapper>& relationMap, EntityWrapper entity);
|
||||||
|
static void recreateRelationships(const std::unordered_multimap<EntityWrapper, EntityWrapper>& relationMap, EntityWrapper templateEntity, EntityWrapper parent = EntityWrapper::Invalid);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|||||||
@@ -2,8 +2,11 @@
|
|||||||
#define PerformanceTimer_h__
|
#define PerformanceTimer_h__
|
||||||
|
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
#include <boost/timer/timer.hpp>
|
#include <boost/timer/timer.hpp>
|
||||||
using boost::timer::cpu_timer;
|
using boost::timer::cpu_timer;
|
||||||
|
#endif //DEBUG
|
||||||
|
|
||||||
class PerformanceTimer
|
class PerformanceTimer
|
||||||
{
|
{
|
||||||
@@ -17,9 +20,11 @@ public:
|
|||||||
static void CreateExcelData();
|
static void CreateExcelData();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifdef DEBUG
|
||||||
static std::map<std::string, cpu_timer> timers;
|
static std::map<std::string, cpu_timer> timers;
|
||||||
static cpu_timer m_Timer;
|
static cpu_timer m_Timer;
|
||||||
static std::string currentTimerRunning;
|
static std::string currentTimerRunning;
|
||||||
|
#endif //DEBUG
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class Resource
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
Resource() { }
|
Resource() { }
|
||||||
|
virtual ~Resource() = default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//Should be thrown in a Resource's constructor if it cannot complete because another resource is still loading.
|
//Should be thrown in a Resource's constructor if it cannot complete because another resource is still loading.
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ protected:
|
|||||||
|
|
||||||
const std::string m_ComponentType;
|
const std::string m_ComponentType;
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) = 0;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFade, double dt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImpureSystem : public virtual System
|
class ImpureSystem : public virtual System
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public:
|
|||||||
for (auto& pair : group.PureSystems) {
|
for (auto& pair : group.PureSystems) {
|
||||||
const std::string& componentName = pair.first;
|
const std::string& componentName = pair.first;
|
||||||
auto& systems = pair.second;
|
auto& systems = pair.second;
|
||||||
const ComponentPool* pool = m_World->GetComponents(componentName);
|
ComponentPool* pool = m_World->GetComponents(componentName);
|
||||||
if (pool == nullptr) {
|
if (pool == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
#ifndef Transform_h__
|
|
||||||
#define Transform_h__
|
|
||||||
|
|
||||||
#include "../GLM.h"
|
|
||||||
#include "World.h"
|
|
||||||
#include "EntityWrapper.h"
|
|
||||||
|
|
||||||
namespace Transform
|
|
||||||
{
|
|
||||||
|
|
||||||
glm::mat4 AbsoluteTransformation(EntityWrapper entity);
|
|
||||||
glm::vec3 AbsolutePosition(EntityWrapper entity);
|
|
||||||
glm::vec3 AbsolutePosition(World* world, EntityID entity);
|
|
||||||
glm::vec3 AbsoluteOrientationEuler(EntityWrapper entity);
|
|
||||||
glm::quat AbsoluteOrientation(EntityWrapper entity);
|
|
||||||
glm::quat AbsoluteOrientation(World* world, EntityID entity);
|
|
||||||
glm::vec3 AbsoluteScale(EntityWrapper entity);
|
|
||||||
glm::vec3 AbsoluteScale(World* world, EntityID entity);
|
|
||||||
glm::mat4 ModelMatrix(EntityWrapper entity);
|
|
||||||
glm::mat4 ModelMatrix(EntityID entity, World* world);
|
|
||||||
glm::vec3 TransformPoint(const glm::vec3& point, const glm::mat4& matrix);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#ifndef Transform_h__
|
||||||
|
#define Transform_h__
|
||||||
|
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "System.h"
|
||||||
|
#include "EEntityDeleted.h"
|
||||||
|
|
||||||
|
class TransformSystem : public System
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TransformSystem(SystemParams params);
|
||||||
|
|
||||||
|
//glm::mat4 AbsoluteTransformation(EntityWrapper entity);
|
||||||
|
static glm::vec3 AbsolutePosition(EntityWrapper entity);
|
||||||
|
static glm::vec3 AbsolutePosition(World* world, EntityID entity);
|
||||||
|
static glm::vec3 AbsoluteOrientationEuler(EntityWrapper entity);
|
||||||
|
static glm::quat AbsoluteOrientation(EntityWrapper entity);
|
||||||
|
static glm::quat AbsoluteOrientation(World* world, EntityID entity);
|
||||||
|
static glm::vec3 AbsoluteScale(EntityWrapper entity);
|
||||||
|
static glm::vec3 AbsoluteScale(World* world, EntityID entity);
|
||||||
|
static glm::mat4 ModelMatrix(EntityWrapper entity);
|
||||||
|
static glm::mat4 ModelMatrix(EntityID entity, World* world);
|
||||||
|
static glm::vec3 TransformPoint(const glm::vec3& point, const glm::mat4& matrix);
|
||||||
|
|
||||||
|
static int RecalculatedPositions;
|
||||||
|
static int RecalculatedOrientations;
|
||||||
|
static int RecalculatedScales;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::unordered_map<EntityWrapper, glm::vec3> PositionCache;
|
||||||
|
static std::unordered_map<EntityWrapper, glm::quat> OrientationCache;
|
||||||
|
static std::unordered_map<EntityWrapper, glm::vec3> ScaleCache;
|
||||||
|
static std::unordered_map<EntityWrapper, glm::mat4> MatrixCache;
|
||||||
|
|
||||||
|
EventRelay<TransformSystem, Events::EntityDeleted> m_EEntityDeleted;
|
||||||
|
bool OnEntityDeleted(const Events::EntityDeleted& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
// Delete a component off an entity
|
// Delete a component off an entity
|
||||||
void DeleteComponent(EntityID entity, const std::string& componentType);
|
void DeleteComponent(EntityID entity, const std::string& componentType);
|
||||||
// Get all components of the specified type
|
// Get all components of the specified type
|
||||||
const ComponentPool* GetComponents(const std::string& componentType);
|
ComponentPool* GetComponents(const std::string& componentType);
|
||||||
// Get entity parent
|
// Get entity parent
|
||||||
EntityID GetParent(EntityID entity);
|
EntityID GetParent(EntityID entity);
|
||||||
// Change the parent of an entity
|
// Change the parent of an entity
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public:
|
|||||||
virtual bool OnCommand(const Events::InputCommand& e) override;
|
virtual bool OnCommand(const Events::InputCommand& e) override;
|
||||||
virtual void Reset();
|
virtual void Reset();
|
||||||
|
|
||||||
void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID);
|
void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, Field<double> assaultDashCoolDownTimer, EntityID playerID);
|
||||||
virtual bool AssaultDashDoubleTapped() const { return m_AssaultDashDoubleTapped; }
|
virtual bool AssaultDashDoubleTapped() const { return m_AssaultDashDoubleTapped; }
|
||||||
virtual bool PlayerIsDashing() const { return m_PlayerIsDashing; }
|
virtual bool PlayerIsDashing() const { return m_PlayerIsDashing; }
|
||||||
bool SpecialAbilityKeyDown() const { return m_SpecialAbilityKeyDown; }
|
bool SpecialAbilityKeyDown() const { return m_SpecialAbilityKeyDown; }
|
||||||
@@ -166,6 +166,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
aeb.Duration = 0.1;
|
aeb.Duration = 0.1;
|
||||||
aeb.NodeName = "Run";
|
aeb.NodeName = "Run";
|
||||||
aeb.RootNode = firstPersonModel;
|
aeb.RootNode = firstPersonModel;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
aeb.Start = true;
|
aeb.Start = true;
|
||||||
m_EventBroker->Publish(aeb);
|
m_EventBroker->Publish(aeb);
|
||||||
}
|
}
|
||||||
@@ -175,6 +176,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
aeb.Duration = 0.1;
|
aeb.Duration = 0.1;
|
||||||
aeb.NodeName = "Run";
|
aeb.NodeName = "Run";
|
||||||
aeb.RootNode = firstPersonModel;
|
aeb.RootNode = firstPersonModel;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
aeb.Start = true;
|
aeb.Start = true;
|
||||||
aeb.Reverse = true;
|
aeb.Reverse = true;
|
||||||
m_EventBroker->Publish(aeb);
|
m_EventBroker->Publish(aeb);
|
||||||
@@ -210,14 +212,40 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
m_EventBroker->Publish(aeb);
|
m_EventBroker->Publish(aeb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EntityWrapper firstPersonModel = m_PlayerEntity.FirstChildByName("Hands");
|
||||||
|
if (firstPersonModel.Valid()) {
|
||||||
|
if (val > 0) { // Walk/Run
|
||||||
|
if (!m_Crouching) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
aeb.NodeName = "Run";
|
||||||
|
aeb.RootNode = firstPersonModel;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
|
aeb.Start = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
}
|
||||||
|
} else if (val < 0) { // Walk/run Backwards
|
||||||
|
if (!m_Crouching) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
aeb.NodeName = "Run";
|
||||||
|
aeb.RootNode = firstPersonModel;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
|
aeb.Start = true;
|
||||||
|
aeb.Reverse = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Animation
|
if (m_PlayerEntity.Valid()) {
|
||||||
if (glm::length2(m_Movement) < 0.25f) {
|
glm::vec2 movementXZ = glm::vec2(m_Movement.x, m_Movement.z);
|
||||||
//Blend to Idle
|
if (glm::length(movementXZ) < 0.1f) {
|
||||||
if (m_PlayerEntity.Valid()) {
|
//Blend to Idle
|
||||||
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
if (playerModel.Valid()) {
|
if (playerModel.Valid()) {
|
||||||
Events::AutoAnimationBlend aeb;
|
Events::AutoAnimationBlend aeb;
|
||||||
@@ -236,10 +264,8 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
aeb.Start = true;
|
aeb.Start = true;
|
||||||
m_EventBroker->Publish(aeb);
|
m_EventBroker->Publish(aeb);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
//Blend to movement
|
||||||
//Blend to movement
|
|
||||||
if (m_PlayerEntity.Valid()) {
|
|
||||||
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
if (playerModel.Valid()) {
|
if (playerModel.Valid()) {
|
||||||
Events::AutoAnimationBlend aeb;
|
Events::AutoAnimationBlend aeb;
|
||||||
@@ -251,8 +277,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (glm::length(m_Movement) > 0) {
|
||||||
if (glm::length2(m_Movement) > 0) {
|
|
||||||
m_Movement = glm::normalize(m_Movement);
|
m_Movement = glm::normalize(m_Movement);
|
||||||
|
|
||||||
//Animation
|
//Animation
|
||||||
@@ -358,7 +383,7 @@ bool FirstPersonInputController<EventContext>::OnLockMouse(const Events::LockMou
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID) {
|
void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, Field<double> assaultDashCoolDownTimer, EntityID playerID) {
|
||||||
m_AssaultDashDoubleTapDeltaTime += dt;
|
m_AssaultDashDoubleTapDeltaTime += dt;
|
||||||
assaultDashCoolDownTimer -= dt;
|
assaultDashCoolDownTimer -= dt;
|
||||||
//cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work)
|
//cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work)
|
||||||
|
|||||||
@@ -10,28 +10,34 @@
|
|||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/shared_array.hpp>
|
#include <boost/shared_array.hpp>
|
||||||
|
|
||||||
|
#include "Network/EKillDeath.h"
|
||||||
|
#include "Core/World.h"
|
||||||
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/ConfigFile.h"
|
||||||
|
#include "Core/EPlayerDeath.h"
|
||||||
|
#include "Core/EPlayerDamage.h"
|
||||||
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
#include "Core/EAmmoPickup.h"
|
||||||
|
#include "Game/Events/EDoubleJump.h"
|
||||||
|
#include "Game/Events/EDashAbility.h"
|
||||||
|
#include "Game/Events/EReset.h"
|
||||||
|
#include "Input/EInputCommand.h"
|
||||||
|
#include "imgui/imgui.h"
|
||||||
#include "Network/Network.h"
|
#include "Network/Network.h"
|
||||||
#include "Network/MessageType.h"
|
#include "Network/MessageType.h"
|
||||||
#include "Network/PlayerDefinition.h"
|
#include "Network/PlayerDefinition.h"
|
||||||
#include "Network/UDPClient.h"
|
#include "Network/UDPClient.h"
|
||||||
#include "Network/TCPClient.h"
|
#include "Network/TCPClient.h"
|
||||||
#include "Network/SnapshotDefinitions.h"
|
#include "Network/SnapshotDefinitions.h"
|
||||||
#include "Core/World.h"
|
|
||||||
#include "Core/EntityFile.h"
|
|
||||||
#include "Core/EventBroker.h"
|
|
||||||
#include "Core/ConfigFile.h"
|
|
||||||
#include "Core/EPlayerDeath.h"
|
|
||||||
#include "Input/EInputCommand.h"
|
|
||||||
#include "Core/EPlayerDamage.h"
|
|
||||||
#include "../Game/Events/EDoubleJump.h"
|
|
||||||
#include "Network/EInterpolate.h"
|
|
||||||
#include "Network/SnapshotFilter.h"
|
|
||||||
#include "Core/EPlayerSpawned.h"
|
|
||||||
#include "Core/EAmmoPickup.h"
|
|
||||||
#include "Network/ESearchForServers.h"
|
|
||||||
#include "../Game/Events/EDashAbility.h"
|
|
||||||
#include "Network/EDisplayServerlist.h"
|
#include "Network/EDisplayServerlist.h"
|
||||||
#include "Network/EConnectRequest.h"
|
#include "Network/EConnectRequest.h"
|
||||||
|
#include "Network/EPlayerDisconnected.h"
|
||||||
|
#include "Network/ESearchForServers.h"
|
||||||
|
#include "Network/EInterpolate.h"
|
||||||
|
#include "Network/SnapshotFilter.h"
|
||||||
|
#include "Core/EWin.h"
|
||||||
|
|
||||||
class Client : public Network
|
class Client : public Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -40,7 +46,7 @@ public:
|
|||||||
~Client();
|
~Client();
|
||||||
|
|
||||||
void Connect(std::string address, int port);
|
void Connect(std::string address, int port);
|
||||||
void Update() override;
|
void Update(double dt) override;
|
||||||
private:
|
private:
|
||||||
UDPClient m_Unreliable;
|
UDPClient m_Unreliable;
|
||||||
TCPClient m_Reliable;
|
TCPClient m_Reliable;
|
||||||
@@ -74,10 +80,10 @@ private:
|
|||||||
// Network logic
|
// Network logic
|
||||||
PlayerDefinition m_PlayerDefinitions[8];
|
PlayerDefinition m_PlayerDefinitions[8];
|
||||||
SnapshotDefinitions m_NextSnapshot;
|
SnapshotDefinitions m_NextSnapshot;
|
||||||
double m_DurationOfPingTime;
|
double m_DurationOfPingTime = 0;
|
||||||
std::clock_t m_StartPingTime;
|
double m_StartPingTime = 0;
|
||||||
std::clock_t m_TimeSinceSentInputs;
|
double m_TimeSinceSentInputs = 0;
|
||||||
unsigned int m_SendInputIntervalMs;
|
double m_SendInputInterval = 0.033;
|
||||||
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
@@ -100,6 +106,9 @@ private:
|
|||||||
void parseDoubleJump(Packet& packet);
|
void parseDoubleJump(Packet& packet);
|
||||||
void parseDashEffect(Packet& packet);
|
void parseDashEffect(Packet& packet);
|
||||||
void parseAmmoPickup(Packet& packet);
|
void parseAmmoPickup(Packet& packet);
|
||||||
|
void parseRemoveWorld(Packet& packet);
|
||||||
|
void parseKDEvent(Packet& packet);
|
||||||
|
void parseWin(Packet& packet);
|
||||||
void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||||
void parseSnapshot(Packet& packet);
|
void parseSnapshot(Packet& packet);
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
@@ -109,7 +118,6 @@ private:
|
|||||||
void sendLocalPlayerTransform();
|
void sendLocalPlayerTransform();
|
||||||
void becomePlayer();
|
void becomePlayer();
|
||||||
void displayServerlist();
|
void displayServerlist();
|
||||||
void removeWorld();
|
|
||||||
void createMainMenu();
|
void createMainMenu();
|
||||||
// Mapping Logic
|
// Mapping Logic
|
||||||
// Returns if local EntityID exist in map
|
// Returns if local EntityID exist in map
|
||||||
@@ -138,8 +146,8 @@ private:
|
|||||||
UDPClient m_ServerlistRequest;
|
UDPClient m_ServerlistRequest;
|
||||||
std::vector<ServerInfo> m_Serverlist;
|
std::vector<ServerInfo> m_Serverlist;
|
||||||
bool m_SearchingForServers = false;
|
bool m_SearchingForServers = false;
|
||||||
std::clock_t m_StartSearchTime;
|
double m_TimeSearched = 0;
|
||||||
double m_SearchingTime = 200; // Config I guess
|
double m_SearchingTime = 0.2; // Config I guess
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -10,8 +10,19 @@ namespace Events
|
|||||||
|
|
||||||
struct KillDeath : public Event
|
struct KillDeath : public Event
|
||||||
{
|
{
|
||||||
|
int CasualtyTeam;
|
||||||
PlayerID Casualty = -1;
|
PlayerID Casualty = -1;
|
||||||
|
std::string CasualtyName;
|
||||||
|
|
||||||
|
//1 = assault, 2 = defender, 3 = sniper
|
||||||
|
int CasualtyClass;
|
||||||
|
|
||||||
|
int KillerTeam;
|
||||||
PlayerID Killer = -1;
|
PlayerID Killer = -1;
|
||||||
|
std::string KillerName;
|
||||||
|
|
||||||
|
//1 = assault, 2 = defender, 3 = sniper
|
||||||
|
int KillerClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ enum class MessageType
|
|||||||
OnDashEffect,
|
OnDashEffect,
|
||||||
ServerlistRequest,
|
ServerlistRequest,
|
||||||
AmmoPickup,
|
AmmoPickup,
|
||||||
|
RemoveWorld,
|
||||||
|
KD,
|
||||||
|
Win,
|
||||||
Invalid
|
Invalid
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public:
|
|||||||
Network(World* world, EventBroker* eventBroker);
|
Network(World* world, EventBroker* eventBroker);
|
||||||
virtual ~Network() { };
|
virtual ~Network() { };
|
||||||
|
|
||||||
virtual void Update() = 0;
|
virtual void Update(double dt) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
World* m_World;
|
World* m_World;
|
||||||
@@ -40,6 +40,7 @@ protected:
|
|||||||
void saveToFile();
|
void saveToFile();
|
||||||
void updateNetworkData();
|
void updateNetworkData();
|
||||||
void popNetworkSegmentOfHeader(Packet& packet);
|
void popNetworkSegmentOfHeader(Packet& packet);
|
||||||
|
void removeWorld();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
#include "Network/MessageType.h"
|
#include "Network/MessageType.h"
|
||||||
#include "Network/PlayerDefinition.h"
|
#include "Network/PlayerDefinition.h"
|
||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
#include "../Network/Network.h"
|
#include "../Network/Network.h"
|
||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
@@ -24,6 +25,8 @@
|
|||||||
#include "Core/EPlayerDeath.h"
|
#include "Core/EPlayerDeath.h"
|
||||||
#include "Network/EPlayerConnected.h"
|
#include "Network/EPlayerConnected.h"
|
||||||
#include "Network/EKillDeath.h"
|
#include "Network/EKillDeath.h"
|
||||||
|
#include "Core/EWin.h"
|
||||||
|
#include "Game/Events/EReset.h"
|
||||||
|
|
||||||
class Server : public Network
|
class Server : public Network
|
||||||
{
|
{
|
||||||
@@ -31,7 +34,7 @@ public:
|
|||||||
Server(World* world, EventBroker* eventBroker, int port);
|
Server(World* world, EventBroker* eventBroker, int port);
|
||||||
~Server();
|
~Server();
|
||||||
|
|
||||||
void Update() override;
|
void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Network channels
|
// Network channels
|
||||||
@@ -41,6 +44,7 @@ private:
|
|||||||
// dont forget to set these in the childrens receive logic
|
// dont forget to set these in the childrens receive logic
|
||||||
boost::asio::ip::address m_Address;
|
boost::asio::ip::address m_Address;
|
||||||
int m_Port = 27666;
|
int m_Port = 27666;
|
||||||
|
bool m_GameIsOver = false;
|
||||||
// Sending messages to client logic
|
// Sending messages to client logic
|
||||||
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
|
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
|
||||||
std::vector<PlayerID> m_PlayersToDisconnect;
|
std::vector<PlayerID> m_PlayersToDisconnect;
|
||||||
@@ -48,14 +52,14 @@ private:
|
|||||||
char readBuffer[BUFFERSIZE] = { 0 };
|
char readBuffer[BUFFERSIZE] = { 0 };
|
||||||
size_t bytesRead = 0;
|
size_t bytesRead = 0;
|
||||||
// time for previouse message
|
// time for previouse message
|
||||||
std::clock_t previousePingMessage = std::clock();
|
double previousPingMessage = 0;
|
||||||
std::clock_t previousSnapshotMessage = std::clock();
|
double previousSnapshotMessage = 0;
|
||||||
std::clock_t timOutTimer = std::clock();
|
double timeOutTimer = 0;
|
||||||
|
|
||||||
// How often we send messages (milliseconds)
|
// How often we send messages (seconds)
|
||||||
float pingIntervalMs;
|
double pingInterval = 1;
|
||||||
float snapshotInterval;
|
double snapshotInterval = 0.05;
|
||||||
int checkTimeOutInterval = 100;
|
double checkTimeOutInterval = 0.1;
|
||||||
int m_NextPlayerID = 0;
|
int m_NextPlayerID = 0;
|
||||||
std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
|
std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
|
||||||
//Timers
|
//Timers
|
||||||
@@ -71,6 +75,7 @@ private:
|
|||||||
void reliableBroadcast(Packet& packet);
|
void reliableBroadcast(Packet& packet);
|
||||||
void unreliableBroadcast(Packet& packet);
|
void unreliableBroadcast(Packet& packet);
|
||||||
void sendSnapshot();
|
void sendSnapshot();
|
||||||
|
void createWorldSnapshot(Packet& packet);
|
||||||
void addPlayersToPacket(Packet& packet, EntityID entityID);
|
void addPlayersToPacket(Packet& packet, EntityID entityID);
|
||||||
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
||||||
void addInputCommandsToPacket(Packet& packet);
|
void addInputCommandsToPacket(Packet& packet);
|
||||||
@@ -83,6 +88,7 @@ private:
|
|||||||
void kick(PlayerID player);
|
void kick(PlayerID player);
|
||||||
PlayerID getPlayerIDFromEndpoint();
|
PlayerID getPlayerIDFromEndpoint();
|
||||||
PlayerID getPlayerIDFromEntityID(EntityID entityID);
|
PlayerID getPlayerIDFromEntityID(EntityID entityID);
|
||||||
|
void resetMap();
|
||||||
void parsePlayerTransform(Packet& packet);
|
void parsePlayerTransform(Packet& packet);
|
||||||
void parseOnInputCommand(Packet& packet);
|
void parseOnInputCommand(Packet& packet);
|
||||||
void parseClientPing();
|
void parseClientPing();
|
||||||
@@ -110,6 +116,8 @@ private:
|
|||||||
bool OnAmmoPickup(const Events::AmmoPickup& e);
|
bool OnAmmoPickup(const Events::AmmoPickup& e);
|
||||||
EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath;
|
EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath;
|
||||||
bool OnPlayerDeath(const Events::PlayerDeath& e);
|
bool OnPlayerDeath(const Events::PlayerDeath& e);
|
||||||
|
EventRelay<Server, Events::Win> m_EWin;
|
||||||
|
bool OnWin(const Events::Win& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -49,9 +49,7 @@ public:
|
|||||||
next = next->Child[0];
|
next = next->Child[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return next;
|
return next;
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -82,6 +80,7 @@ public:
|
|||||||
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
|
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
|
||||||
|
|
||||||
EntityWrapper GetSubTreeRoot(std::string nodeName);
|
EntityWrapper GetSubTreeRoot(std::string nodeName);
|
||||||
|
std::vector<EntityWrapper> GetSubTreeRoots(std::string nodeName);
|
||||||
|
|
||||||
std::vector<EntityWrapper> GetSingleLevelRoots(std::string name);
|
std::vector<EntityWrapper> GetSingleLevelRoots(std::string name);
|
||||||
std::vector<EntityWrapper> GetEntitesByName(std::string name);
|
std::vector<EntityWrapper> GetEntitesByName(std::string name);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "IRenderer.h"
|
#include "IRenderer.h"
|
||||||
#include "ShaderProgram.h"
|
#include "ShaderProgram.h"
|
||||||
|
#include "PNG.h"
|
||||||
|
|
||||||
class CubeMapPass
|
class CubeMapPass
|
||||||
{
|
{
|
||||||
@@ -21,7 +22,7 @@ private:
|
|||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
std::string m_PreviusCubeMapTexture;
|
std::string m_PreviusCubeMapTexture;
|
||||||
|
|
||||||
std::vector<Texture*> m_CubeMapTextures;
|
std::vector<std::string> m_CubeMapTextures;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include "../Core/ComponentWrapper.h"
|
#include "../Core/ComponentWrapper.h"
|
||||||
#include "RenderJob.h"
|
#include "RenderJob.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
|
|
||||||
struct DirectionalLightJob : RenderJob
|
struct DirectionalLightJob : RenderJob
|
||||||
@@ -16,7 +16,7 @@ struct DirectionalLightJob : RenderJob
|
|||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
|
|
||||||
Direction = glm::vec4(0,0,-1,0) * glm::inverse(Transform::AbsoluteOrientation(m_World, transformComponent.EntityID));
|
Direction = glm::vec4(0,0,-1,0) * glm::inverse(TransformSystem::AbsoluteOrientation(m_World, transformComponent.EntityID));
|
||||||
//Direction = glm::vec4((glm::vec3)directionalLightComponent["Direction"], 0.f);
|
//Direction = glm::vec4((glm::vec3)directionalLightComponent["Direction"], 0.f);
|
||||||
Color = (glm::vec4)directionalLightComponent["Color"];
|
Color = (glm::vec4)directionalLightComponent["Color"];
|
||||||
Intensity = (double)directionalLightComponent["Intensity"];
|
Intensity = (double)directionalLightComponent["Intensity"];
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
class DrawFinalPass
|
class DrawFinalPass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass, ShadowPass* shadowPass);
|
DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass, ShadowPass* shadowPass, ConfigFile* config);
|
||||||
~DrawFinalPass();
|
~DrawFinalPass();
|
||||||
void InitializeTextures();
|
void InitializeTextures();
|
||||||
void InitializeFrameBuffers();
|
void InitializeFrameBuffers();
|
||||||
@@ -25,17 +25,77 @@ public:
|
|||||||
void Draw(RenderScene& scene, BlurHUD* blurHUDPass);
|
void Draw(RenderScene& scene, BlurHUD* blurHUDPass);
|
||||||
void ClearBuffer();
|
void ClearBuffer();
|
||||||
void OnWindowResize();
|
void OnWindowResize();
|
||||||
|
void setMSAA(unsigned int numberOfSamples);
|
||||||
|
|
||||||
//Return the texture that is used in later stages to apply the bloom effect
|
//Return the texture that is used in later stages to apply the bloom effect
|
||||||
GLuint BloomTexture() const { return m_BloomTexture; }
|
GLuint BloomTexture() {
|
||||||
|
if (m_MSAA){
|
||||||
|
m_AntiAliasedFrameBuffer->Bind();
|
||||||
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
m_AntiAliasedFrameBuffer->Unbind();
|
||||||
|
m_FinalPassFrameBuffer->Read();
|
||||||
|
glReadBuffer(GL_COLOR_ATTACHMENT1);
|
||||||
|
m_AntiAliasedFrameBuffer->Draw();
|
||||||
|
glBlitFramebuffer(
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
return m_AntiAliasedTexture;
|
||||||
|
}
|
||||||
|
return m_BloomTexture; }
|
||||||
//Return the texture with diffuse and lighting of the scene.
|
//Return the texture with diffuse and lighting of the scene.
|
||||||
GLuint SceneTexture() const { return m_SceneTexture; }
|
GLuint DrawFinalPass::SceneTexture() {
|
||||||
|
if (m_MSAA) {
|
||||||
|
m_AntiAliasedFrameBuffer->Bind();
|
||||||
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
m_AntiAliasedFrameBuffer->Unbind();
|
||||||
|
m_FinalPassFrameBuffer->Read();
|
||||||
|
glReadBuffer(GL_COLOR_ATTACHMENT0);
|
||||||
|
m_AntiAliasedFrameBuffer->Draw();
|
||||||
|
glBlitFramebuffer(
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
return m_AntiAliasedTexture;
|
||||||
|
}
|
||||||
|
return m_SceneTexture;
|
||||||
|
}
|
||||||
//Return the SceneTexture with the blurred HUD bits.
|
//Return the SceneTexture with the blurred HUD bits.
|
||||||
GLuint CombinedSceneTexture() const { return m_CombinedTexture; }
|
GLuint CombinedSceneTexture() {
|
||||||
|
if (m_MSAA) {
|
||||||
|
m_AntiAliasedFrameBuffer->Bind();
|
||||||
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
m_AntiAliasedFrameBuffer->Unbind();
|
||||||
|
m_FinalPassFrameBuffer->Read();
|
||||||
|
m_AntiAliasedFrameBuffer->Draw();
|
||||||
|
glBlitFramebuffer(
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
return m_AntiAliasedTexture;
|
||||||
|
}
|
||||||
|
return m_CombinedTexture; }
|
||||||
//Return the blurred scene texture.
|
//Return the blurred scene texture.
|
||||||
GLuint FullBlurredTexture() const { return m_FullBlurredTexture; }
|
GLuint FullBlurredTexture() {
|
||||||
|
if (m_MSAA) {
|
||||||
|
m_AntiAliasedFrameBuffer->Bind();
|
||||||
|
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
m_AntiAliasedFrameBuffer->Unbind();
|
||||||
|
m_FinalPassFrameBuffer->Read();
|
||||||
|
m_AntiAliasedFrameBuffer->Draw();
|
||||||
|
glBlitFramebuffer(
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height,
|
||||||
|
GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||||
|
return m_AntiAliasedTexture;
|
||||||
|
}
|
||||||
|
return m_FullBlurredTexture; }
|
||||||
//Return the framebuffer used in the scene rendering stage.
|
//Return the framebuffer used in the scene rendering stage.
|
||||||
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
|
FrameBuffer* FinalPassFrameBuffer() { return m_FinalPassFrameBuffer; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene);
|
void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene);
|
||||||
@@ -56,18 +116,21 @@ private:
|
|||||||
Texture* m_GreyTexture;
|
Texture* m_GreyTexture;
|
||||||
Texture* m_ErrorTexture;
|
Texture* m_ErrorTexture;
|
||||||
|
|
||||||
FrameBuffer m_FinalPassFrameBuffer;
|
FrameBuffer* m_FinalPassFrameBuffer = nullptr;
|
||||||
FrameBuffer m_ShieldDepthFrameBuffer;
|
FrameBuffer* m_ShieldDepthFrameBuffer = nullptr;
|
||||||
|
FrameBuffer* m_AntiAliasedFrameBuffer = nullptr;
|
||||||
GLuint m_BloomTexture = 0;
|
GLuint m_BloomTexture = 0;
|
||||||
GLuint m_SceneTexture = 0;
|
GLuint m_SceneTexture = 0;
|
||||||
GLuint m_DepthBuffer = 0;
|
GLuint m_DepthBuffer = 0;
|
||||||
GLuint m_ShieldBuffer = 0;
|
GLuint m_ShieldBuffer = 0;
|
||||||
GLuint m_CubeMapTexture = 0;
|
GLuint m_CubeMapTexture = 0;
|
||||||
GLuint m_FullBlurredTexture;
|
GLuint m_FullBlurredTexture = 0;
|
||||||
GLuint m_CombinedTexture; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures
|
GLuint m_CombinedTexture = 0; //This can be removed for less memory usage, just set m_sceneTexture to the return from m_BlurHUDPass.CombineTextures
|
||||||
|
GLuint m_AntiAliasedTexture = 0; //Is only used when MSAA is active;
|
||||||
|
|
||||||
//maqke this component based i guess?
|
//maqke this component based i guess?
|
||||||
GLuint m_ShieldPixelRate = 16;
|
GLuint m_ShieldPixelRate = 16;
|
||||||
|
unsigned int m_MSAA = 0;
|
||||||
|
|
||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
const LightCullingPass* m_LightCullingPass;
|
const LightCullingPass* m_LightCullingPass;
|
||||||
|
|||||||
@@ -18,15 +18,17 @@ struct ExplosionEffectJob : ModelJob
|
|||||||
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded, bool shadow)
|
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded, bool shadow)
|
||||||
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded, shadow)
|
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded, shadow)
|
||||||
{
|
{
|
||||||
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"];
|
ExplosionOrigin = (Field<glm::vec3>)explosionEffectComponent["ExplosionOrigin"];
|
||||||
TimeSinceDeath = (double)explosionEffectComponent["TimeSinceDeath"];
|
TimeSinceDeath = (Field<double>)explosionEffectComponent["TimeSinceDeath"];
|
||||||
ExplosionDuration = (double)explosionEffectComponent["ExplosionDuration"];
|
ExplosionDuration = (Field<double>)explosionEffectComponent["ExplosionDuration"];
|
||||||
EndColor = (glm::vec4)explosionEffectComponent["EndColor"];
|
EndColor = (Field<glm::vec4>)explosionEffectComponent["EndColor"];
|
||||||
Randomness = (bool)explosionEffectComponent["Randomness"];
|
Randomness = (Field<bool>)explosionEffectComponent["Randomness"];
|
||||||
RandomnessScalar = (double)explosionEffectComponent["RandomnessScalar"];
|
RandomnessScalar = (Field<double>)explosionEffectComponent["RandomnessScalar"];
|
||||||
Velocity = (glm::vec2)explosionEffectComponent["Velocity"];
|
Velocity = (Field<glm::vec2>)explosionEffectComponent["Velocity"];
|
||||||
ColorByDistance = (bool)explosionEffectComponent["ColorByDistance"];
|
ColorByDistance = (Field<bool>)explosionEffectComponent["ColorByDistance"];
|
||||||
ExponentialAccelaration = (bool)explosionEffectComponent["ExponentialAccelaration"];
|
ExponentialAccelaration = (Field<bool>)explosionEffectComponent["ExponentialAccelaration"];
|
||||||
|
Reverse = (Field<bool>)explosionEffectComponent["Reverse"];Reverse = (bool)explosionEffectComponent["Reverse"];
|
||||||
|
ColorDistanceScalar = (Field<double>)explosionEffectComponent["ColorDistanceScalar"];ColorDistanceScalar = (double)explosionEffectComponent["ColorDistanceScalar"];
|
||||||
};
|
};
|
||||||
|
|
||||||
glm::vec3 ExplosionOrigin;
|
glm::vec3 ExplosionOrigin;
|
||||||
@@ -38,12 +40,14 @@ struct ExplosionEffectJob : ModelJob
|
|||||||
glm::vec4 EndColor;
|
glm::vec4 EndColor;
|
||||||
bool Randomness = false;
|
bool Randomness = false;
|
||||||
|
|
||||||
float RandomnessScalar = 1.f;
|
double RandomnessScalar = 1.f;
|
||||||
glm::vec2 Velocity;
|
glm::vec2 Velocity;
|
||||||
bool ColorByDistance = false;
|
bool ColorByDistance = false;
|
||||||
//bool ReverseAnimation = false;
|
//bool ReverseAnimation = false;
|
||||||
//bool Wireframe = false;
|
//bool Wireframe = false;
|
||||||
bool ExponentialAccelaration = false;
|
bool ExponentialAccelaration = false;
|
||||||
|
bool Reverse = false;
|
||||||
|
double ColorDistanceScalar = 1.f;
|
||||||
|
|
||||||
std::array<float, 50> RandomNumbers = {
|
std::array<float, 50> RandomNumbers = {
|
||||||
0.3257552917701f,
|
0.3257552917701f,
|
||||||
|
|||||||
@@ -7,12 +7,13 @@
|
|||||||
class BufferResource
|
class BufferResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod);
|
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment, GLuint mipMapLod, bool multiSampling);
|
||||||
|
|
||||||
GLuint* m_ResourceHandle;
|
GLuint* m_ResourceHandle;
|
||||||
GLenum m_ResourceType;
|
GLenum m_ResourceType;
|
||||||
GLenum m_Attachment;
|
GLenum m_Attachment;
|
||||||
GLuint m_MipMapLod = 0;
|
GLuint m_MipMapLod = 0;
|
||||||
|
bool m_MultiSampling = false;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -21,24 +22,33 @@ template <GLenum RESOURCETYPE>
|
|||||||
class ResourceType : public BufferResource
|
class ResourceType : public BufferResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod)
|
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod, bool multiSampling)
|
||||||
: BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod) { }
|
: BufferResource(resourceHandle, RESOURCETYPE, attachment, mipMapLod, multiSampling) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
class Texture2D : public ResourceType<GL_TEXTURE_2D>
|
class Texture2D : public ResourceType<GL_TEXTURE_2D>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
||||||
: ResourceType(resourceHandle, attachment, mipMapLod) { };
|
: ResourceType(resourceHandle, attachment, mipMapLod, false) { };
|
||||||
|
|
||||||
~Texture2D();
|
~Texture2D();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Texture2DMultiSample : public ResourceType<GL_TEXTURE_2D_MULTISAMPLE>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Texture2DMultiSample(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
||||||
|
: ResourceType(resourceHandle, attachment, mipMapLod, true) { };
|
||||||
|
|
||||||
|
~Texture2DMultiSample();
|
||||||
|
};
|
||||||
|
|
||||||
class RenderBuffer : public ResourceType<GL_RENDERBUFFER>
|
class RenderBuffer : public ResourceType<GL_RENDERBUFFER>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderBuffer(GLuint* resourceHandle, GLenum attachment)
|
RenderBuffer(GLuint* resourceHandle, GLenum attachment, bool multiSampling = false)
|
||||||
: ResourceType(resourceHandle, attachment, 0)
|
: ResourceType(resourceHandle, attachment, 0, multiSampling)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
~RenderBuffer();
|
~RenderBuffer();
|
||||||
@@ -48,12 +58,13 @@ class Texture2DArray : public ResourceType<GL_TEXTURE_2D_ARRAY>
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Texture2DArray(GLuint* resourceHandle, GLenum attachment)
|
Texture2DArray(GLuint* resourceHandle, GLenum attachment)
|
||||||
: ResourceType(resourceHandle, attachment, 0)
|
: ResourceType(resourceHandle, attachment, 0, false)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
~Texture2DArray();
|
~Texture2DArray();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -65,9 +76,13 @@ public:
|
|||||||
void Generate();
|
void Generate();
|
||||||
void Bind();
|
void Bind();
|
||||||
void Unbind();
|
void Unbind();
|
||||||
|
void Read();
|
||||||
|
void Draw();
|
||||||
GLuint GetHandle();
|
GLuint GetHandle();
|
||||||
|
bool MultiSampling() { return m_MultiSampling; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_MultiSampling = true;
|
||||||
GLuint m_BufferHandle;
|
GLuint m_BufferHandle;
|
||||||
std::vector<std::shared_ptr<BufferResource>> m_Resources;
|
std::vector<std::shared_ptr<BufferResource>> m_Resources;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
struct Image
|
struct Image
|
||||||
{
|
{
|
||||||
|
virtual ~Image() = default;
|
||||||
|
|
||||||
enum class ImageFormat
|
enum class ImageFormat
|
||||||
{
|
{
|
||||||
Unknown,
|
Unknown,
|
||||||
|
|||||||
@@ -16,15 +16,18 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
~Model();
|
~Model();
|
||||||
const std::vector<RawModel::MaterialProperties>& MaterialGroups() const { return m_RawModel->m_Materials; }
|
const std::vector<RawModel::MaterialProperties>& MaterialGroups() const { return m_Materials; }
|
||||||
const glm::mat4& Matrix() const { return m_RawModel->m_Matrix; }
|
unsigned int NumberOfVertices() const { return m_Vertices.size(); }
|
||||||
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
|
|
||||||
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
|
|
||||||
const AABB& Box() const { return m_Box; }
|
const AABB& Box() const { return m_Box; }
|
||||||
bool IsSkinned() const { return m_RawModel->IsSkinned(); }
|
bool IsSkinned() const { return m_IsSkinned; }
|
||||||
GLuint VAO;
|
GLuint VAO;
|
||||||
GLuint ElementBuffer;
|
GLuint ElementBuffer;
|
||||||
RawModel* m_RawModel;
|
//RawModel* m_RawModel;
|
||||||
|
|
||||||
|
Skeleton* m_Skeleton = nullptr;
|
||||||
|
std::vector<glm::vec3> m_Vertices;
|
||||||
|
std::vector<unsigned int> m_Indices;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AABB m_Box;
|
AABB m_Box;
|
||||||
@@ -34,6 +37,9 @@ private:
|
|||||||
GLuint TangentNormalsBuffer;
|
GLuint TangentNormalsBuffer;
|
||||||
GLuint BiTangentNormalsBuffer;
|
GLuint BiTangentNormalsBuffer;
|
||||||
GLuint TextureCoordBuffer;
|
GLuint TextureCoordBuffer;
|
||||||
|
|
||||||
|
std::vector<RawModel::MaterialProperties> m_Materials;
|
||||||
|
bool m_IsSkinned;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
#include "ShaderProgram.h"
|
#include "ShaderProgram.h"
|
||||||
#include "BlendTree.h"
|
#include "BlendTree.h"
|
||||||
@@ -104,12 +104,17 @@ struct ModelJob : RenderJob
|
|||||||
FillPercentage = fillPercentage;
|
FillPercentage = fillPercentage;
|
||||||
IsShielded = isShielded;
|
IsShielded = isShielded;
|
||||||
|
|
||||||
|
|
||||||
|
if (world->HasComponent(Entity, "Unpickable")) {
|
||||||
|
NotPickable = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (model->IsSkinned()) {
|
if (model->IsSkinned()) {
|
||||||
Skeleton = Model->m_RawModel->m_Skeleton;
|
Skeleton = Model->m_Skeleton;
|
||||||
|
|
||||||
if (Skeleton != nullptr) {
|
if (Skeleton != nullptr) {
|
||||||
|
|
||||||
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
|
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
|
||||||
|
|
||||||
|
|
||||||
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
|
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
|
||||||
BlendTree = Skeleton->BlendTrees.at(entityWrapper);
|
BlendTree = Skeleton->BlendTrees.at(entityWrapper);
|
||||||
@@ -147,6 +152,7 @@ struct ModelJob : RenderJob
|
|||||||
float FillPercentage = 0.0;
|
float FillPercentage = 0.0;
|
||||||
bool IsShielded;
|
bool IsShielded;
|
||||||
bool Shadow;
|
bool Shadow;
|
||||||
|
bool NotPickable = false;
|
||||||
|
|
||||||
void CalculateHash() override
|
void CalculateHash() override
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include "../Core/ComponentWrapper.h"
|
#include "../Core/ComponentWrapper.h"
|
||||||
#include "RenderJob.h"
|
#include "RenderJob.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
|
|
||||||
struct PointLightJob : RenderJob
|
struct PointLightJob : RenderJob
|
||||||
@@ -16,7 +16,7 @@ struct PointLightJob : RenderJob
|
|||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
Position = glm::vec4((glm::vec3)transformComponent["Position"], 1.0f);
|
Position = glm::vec4((glm::vec3)transformComponent["Position"], 1.0f);
|
||||||
Position = glm::vec4(Transform::AbsolutePosition(m_World, transformComponent.EntityID), 1.f);
|
Position = glm::vec4(TransformSystem::AbsolutePosition(m_World, transformComponent.EntityID), 1.f);
|
||||||
Color = (glm::vec4)pointLightComponent["Color"];
|
Color = (glm::vec4)pointLightComponent["Color"];
|
||||||
Radius = (double)pointLightComponent["Radius"];
|
Radius = (double)pointLightComponent["Radius"];
|
||||||
Intensity = (double)pointLightComponent["Intensity"];
|
Intensity = (double)pointLightComponent["Intensity"];
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
#include <boost/endian/buffers.hpp>
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
@@ -20,22 +21,17 @@
|
|||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
#include "ShaderProgram.h"
|
#include "ShaderProgram.h"
|
||||||
|
|
||||||
#include "boost\endian\buffers.hpp"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RawModelCustom : public Resource
|
class RawModelCustom : public Resource
|
||||||
{
|
{
|
||||||
friend class ResourceManager;
|
friend class ResourceManager;
|
||||||
|
friend class Model;
|
||||||
protected:
|
protected:
|
||||||
RawModelCustom(std::string fileName);
|
RawModelCustom(std::string fileName);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~RawModelCustom();
|
~RawModelCustom();
|
||||||
|
|
||||||
struct Vertex
|
struct RenderVertex {
|
||||||
{
|
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
glm::vec3 Normal;
|
glm::vec3 Normal;
|
||||||
glm::vec3 Tangent;
|
glm::vec3 Tangent;
|
||||||
@@ -43,7 +39,7 @@ public:
|
|||||||
glm::vec2 TextureCoords;
|
glm::vec2 TextureCoords;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SkinedVertex : public Vertex {
|
struct SkinedVertex : public RenderVertex {
|
||||||
glm::vec4 BoneIndices;
|
glm::vec4 BoneIndices;
|
||||||
glm::vec4 BoneWeights;
|
glm::vec4 BoneWeights;
|
||||||
};
|
};
|
||||||
@@ -91,7 +87,7 @@ public:
|
|||||||
unsigned int ShaderID = 0;
|
unsigned int ShaderID = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Vertex* Vertices() const {
|
const RenderVertex* Vertices() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return m_SkinedVertices.data();
|
return m_SkinedVertices.data();
|
||||||
} else {
|
} else {
|
||||||
@@ -99,16 +95,16 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int VertexSize() const {
|
unsigned int VertexSize() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return sizeof(SkinedVertex);
|
return sizeof(SkinedVertex);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return sizeof(Vertex);
|
return sizeof(RenderVertex);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int NumVertices() const {
|
size_t NumVertices() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return m_SkinedVertices.size();
|
return m_SkinedVertices.size();
|
||||||
} else {
|
} else {
|
||||||
@@ -116,17 +112,39 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const std::vector<unsigned int>& Indices() const {
|
||||||
|
return m_Indices;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsSkinned() const { return hasSkin; };
|
bool IsSkinned() const { return hasSkin; };
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& CollisionVertices();
|
||||||
|
|
||||||
|
size_t NumCollisionVertices() const {
|
||||||
|
return m_CollisionVertices.size();
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::vector<unsigned int>& CollisionIndices() const {
|
||||||
|
if (hasCollisionMesh) {
|
||||||
|
return m_CollisionIndices;
|
||||||
|
} else {
|
||||||
|
return m_Indices;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
std::vector<MaterialProperties> m_Materials;
|
std::vector<MaterialProperties> m_Materials;
|
||||||
|
|
||||||
std::vector<unsigned int> m_Indices;
|
|
||||||
Skeleton* m_Skeleton = nullptr;
|
Skeleton* m_Skeleton = nullptr;
|
||||||
glm::mat4 m_Matrix;
|
glm::mat4 m_Matrix;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool hasSkin;
|
bool hasSkin;
|
||||||
std::vector<Vertex> m_Vertices;
|
bool hasCollisionMesh = false;
|
||||||
|
std::vector<unsigned int> m_Indices;
|
||||||
|
std::vector<unsigned int> m_CollisionIndices;
|
||||||
|
std::vector<glm::vec3> m_CollisionVertices;
|
||||||
|
std::vector<RenderVertex> m_Vertices;
|
||||||
std::vector<SkinedVertex> m_SkinedVertices;
|
std::vector<SkinedVertex> m_SkinedVertices;
|
||||||
|
|
||||||
void ReadMeshFile(std::string filePath);
|
void ReadMeshFile(std::string filePath);
|
||||||
@@ -149,7 +167,12 @@ private:
|
|||||||
void ReadAnimationClips(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int numberOfClips);
|
void ReadAnimationClips(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int numberOfClips);
|
||||||
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
||||||
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
|
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
|
||||||
|
|
||||||
|
|
||||||
|
void ReadCollisionFile(std::string filePath);
|
||||||
|
void ReadCollisionFileData(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& ConstructCollisionList();
|
||||||
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "ModelJob.h"
|
#include "ModelJob.h"
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
#include "PointLightJob.h"
|
#include "PointLightJob.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "../Core/EPlayerSpawned.h"
|
#include "../Core/EPlayerSpawned.h"
|
||||||
#include "../Core/Octree.h"
|
#include "../Core/Octree.h"
|
||||||
#include "../Collision/EntityAABB.h"
|
#include "../Collision/EntityAABB.h"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
#include "../Core/EventBroker.h"
|
#include "../Core/EventBroker.h"
|
||||||
#include "ImGuiRenderPass.h"
|
#include "ImGuiRenderPass.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
#include "TextPass.h"
|
#include "TextPass.h"
|
||||||
#include "Util/CommonFunctions.h"
|
#include "Util/CommonFunctions.h"
|
||||||
@@ -71,6 +71,7 @@ private:
|
|||||||
bool m_ResizeWindow = false;
|
bool m_ResizeWindow = false;
|
||||||
int m_SSAO_Quality = 0;
|
int m_SSAO_Quality = 0;
|
||||||
int m_GLOW_Quality = 2;
|
int m_GLOW_Quality = 2;
|
||||||
|
unsigned int m_MSAA_Level = 0;
|
||||||
|
|
||||||
PickingPass* m_PickingPass;
|
PickingPass* m_PickingPass;
|
||||||
LightCullingPass* m_LightCullingPass;
|
LightCullingPass* m_LightCullingPass;
|
||||||
|
|||||||
@@ -20,11 +20,14 @@ public:
|
|||||||
, Parent(parent)
|
, Parent(parent)
|
||||||
, Name(name)
|
, Name(name)
|
||||||
, OffsetMatrix(offsetMatrix)
|
, OffsetMatrix(offsetMatrix)
|
||||||
{ }
|
{
|
||||||
|
BindTransformMatrix = glm::inverse(offsetMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
std::string Name;
|
std::string Name;
|
||||||
glm::mat4 OffsetMatrix;
|
glm::mat4 OffsetMatrix;
|
||||||
int ID;
|
int ID;
|
||||||
|
glm::mat4 BindTransformMatrix;
|
||||||
|
|
||||||
Bone* Parent;
|
Bone* Parent;
|
||||||
std::vector<Bone*> Children;
|
std::vector<Bone*> Children;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/TransformSystem.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
|
|
||||||
struct SpriteJob : RenderJob
|
struct SpriteJob : RenderJob
|
||||||
@@ -21,7 +21,7 @@ struct SpriteJob : RenderJob
|
|||||||
SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator)
|
SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator)
|
||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
Model = ResourceManager::Load<::Model>((std::string)cSprite["Model"]);
|
Model = ResourceManager::Load<::Model>(cSprite["Model"]);
|
||||||
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
|
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
|
||||||
TextureID = 0;
|
TextureID = 0;
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@ struct SpriteJob : RenderJob
|
|||||||
IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]);
|
IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]);
|
||||||
|
|
||||||
Linear = (bool)cSprite["Linear"];
|
Linear = (bool)cSprite["Linear"];
|
||||||
|
ClampToBorder = (bool)cSprite["ClampToBorder"];
|
||||||
|
|
||||||
StartIndex = matProp.material->StartIndex;
|
StartIndex = matProp.material->StartIndex;
|
||||||
EndIndex = matProp.material->EndIndex;
|
EndIndex = matProp.material->EndIndex;
|
||||||
@@ -37,7 +38,7 @@ struct SpriteJob : RenderJob
|
|||||||
BlurBackground = (bool)cSprite["BlurBackground"];
|
BlurBackground = (bool)cSprite["BlurBackground"];
|
||||||
|
|
||||||
Entity = cSprite.EntityID;
|
Entity = cSprite.EntityID;
|
||||||
Position = Transform::AbsolutePosition(world, cSprite.EntityID);
|
Position = TransformSystem::AbsolutePosition(world, cSprite.EntityID);
|
||||||
Depth = 0;
|
Depth = 0;
|
||||||
if (depthSorted) {
|
if (depthSorted) {
|
||||||
glm::vec3 viewpos = glm::vec3(camera->ViewMatrix() * glm::vec4(Position, 1));
|
glm::vec3 viewpos = glm::vec3(camera->ViewMatrix() * glm::vec4(Position, 1));
|
||||||
@@ -50,11 +51,11 @@ struct SpriteJob : RenderJob
|
|||||||
FillColor = fillColor;
|
FillColor = fillColor;
|
||||||
FillPercentage = fillPercentage;
|
FillPercentage = fillPercentage;
|
||||||
|
|
||||||
glm::vec3 scale = Transform::AbsoluteScale(world, cSprite.EntityID);
|
glm::vec3 scale = TransformSystem::AbsoluteScale(world, cSprite.EntityID);
|
||||||
|
|
||||||
if((bool)cSprite["KeepRatio"] == true) {
|
if((bool)cSprite["KeepRatio"] == true) {
|
||||||
if(scale.y >= scale.x) {
|
if(scale.y >= scale.x) {
|
||||||
ScaleY = (scale.x)/(scale.y);
|
ScaleY = (scale.y)/(scale.x);
|
||||||
ScaleX = 1.f;
|
ScaleX = 1.f;
|
||||||
} else {
|
} else {
|
||||||
ScaleY = 1.f;
|
ScaleY = 1.f;
|
||||||
@@ -90,9 +91,10 @@ struct SpriteJob : RenderJob
|
|||||||
bool Pickable;
|
bool Pickable;
|
||||||
bool IsIndicator = false;
|
bool IsIndicator = false;
|
||||||
bool BlurBackground = false;
|
bool BlurBackground = false;
|
||||||
float ScaleX = 1;
|
float ScaleX = 1.f;
|
||||||
float ScaleY = 1;
|
float ScaleY = 1.f;
|
||||||
bool Linear = false;
|
bool Linear = false;
|
||||||
|
bool ClampToBorder = false;
|
||||||
|
|
||||||
glm::vec4 FillColor = glm::vec4(0);
|
glm::vec4 FillColor = glm::vec4(0);
|
||||||
float FillPercentage = 0.0;
|
float FillPercentage = 0.0;
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ struct TextJob : RenderJob
|
|||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
Matrix = matrix;
|
Matrix = matrix;
|
||||||
Color = (glm::vec4)textComponent["Color"];
|
Color = (const glm::vec4&)textComponent["Color"];
|
||||||
Content = (std::string)textComponent["Content"];
|
Content = (const std::string&)textComponent["Content"];
|
||||||
Resource = font;
|
Resource = font;
|
||||||
|
|
||||||
if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) {
|
if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix);
|
void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix);
|
||||||
|
std::string parseColors(std::string text, std::map<int, glm::vec4>& colorChanges, glm::vec4 originalColor);
|
||||||
|
|
||||||
Font* font;
|
Font* font;
|
||||||
GLuint VAO, VBO;
|
GLuint VAO, VBO;
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ protected:
|
|||||||
TextureSprite(std::string path);
|
TextureSprite(std::string path);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~TextureSprite();
|
|
||||||
|
|
||||||
void Bind(GLenum textureUnit = GL_TEXTURE0);
|
void Bind(GLenum textureUnit = GL_TEXTURE0);
|
||||||
|
|
||||||
GLuint m_Texture = 0;
|
GLuint m_Texture = 0;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Texture* TryLoadResource(std::string path)
|
|||||||
|
|
||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
||||||
void GenerateMultiSampleTexture(GLuint* texture, int numSamples, glm::vec2 dimensions, GLint internalFormat);
|
void GenerateMultiSampleTexture(GLuint* texture, int numSamples, glm::vec2 dimensions, GLint internalFormat);
|
||||||
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps);
|
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type, GLint numMipMaps, GLint MAGFilter, GLint MINFilter);
|
||||||
void DeleteTexture(GLuint* texture);
|
void DeleteTexture(GLuint* texture);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef Events_ChangeBGM_h__
|
||||||
|
#define Events_ChangeBGM_h__
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "../Engine/Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct ChangeBGM : Event
|
||||||
|
{
|
||||||
|
std::string FilePath = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif // Events_ChangeBGM_h__
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef Events_PlayAnnouncerVoice_h__
|
||||||
|
#define Events_PlayAnnouncerVoice_h__
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "../Engine/Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct PlayAnonuncerVoice : public Event
|
||||||
|
{
|
||||||
|
std::string FilePath = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -12,7 +12,8 @@ namespace Events
|
|||||||
// Sound behavior is thereby specified in the SoundEmitter component.
|
// Sound behavior is thereby specified in the SoundEmitter component.
|
||||||
struct PlaySoundOnEntity : public Event
|
struct PlaySoundOnEntity : public Event
|
||||||
{
|
{
|
||||||
EntityID EmitterID = 0;
|
EntityWrapper Emitter = EntityWrapper::Invalid;
|
||||||
|
float Gain = 1.f;
|
||||||
std::string FilePath = "";
|
std::string FilePath = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef Events_SetAnnouncerGain_h__
|
||||||
|
#define Events_SetAnnouncerGain_h__
|
||||||
|
|
||||||
|
#include "../Engine/Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct SetAnnouncerGain : public Event
|
||||||
|
{
|
||||||
|
float Gain = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //
|
||||||
@@ -9,32 +9,36 @@
|
|||||||
#include "OpenAL/al.h"
|
#include "OpenAL/al.h"
|
||||||
#include "OpenAL/alc.h"
|
#include "OpenAL/alc.h"
|
||||||
|
|
||||||
#include "imgui/imgui.h"
|
#include "../Engine/Core/World.h"
|
||||||
|
#include "../Engine/Core/EventBroker.h"
|
||||||
#include "Core/World.h"
|
|
||||||
#include "Core/EventBroker.h"
|
|
||||||
#include "../Engine/Core/ResourceManager.h"
|
#include "../Engine/Core/ResourceManager.h"
|
||||||
#include "../Engine/Core/ConfigFile.h"
|
#include "../Engine/Core/ConfigFile.h"
|
||||||
#include "Core/Transform.h" // Absolute transform
|
#include "../Engine/Core/TransformSystem.h"
|
||||||
#include "Sound/Sound.h"
|
#include "../Engine/Sound/Sound.h"
|
||||||
#include "../Engine/Sound/EPlayQueueOnEntity.h"
|
#include "../Engine/Sound/EPlayQueueOnEntity.h"
|
||||||
#include "Sound/EPlaySoundOnEntity.h"
|
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
||||||
#include "Sound/EPlaySoundOnPosition.h"
|
#include "../Engine/Sound/EPlaySoundOnPosition.h"
|
||||||
#include "Sound/EPlayBackgroundMusic.h"
|
#include "../Engine/Sound/EPlayBackgroundMusic.h"
|
||||||
#include "Sound/EPauseSound.h"
|
#include "../Engine/Sound/EPlayAnnouncerVoice.h"
|
||||||
#include "Sound/EContinueSound.h"
|
#include "../Engine/Sound/EPauseSound.h"
|
||||||
#include "Sound/EStopSound.h"
|
#include "../Engine/Sound/EContinueSound.h"
|
||||||
#include "Sound/ESetBGMGain.h"
|
#include "../Engine/Sound/EStopSound.h"
|
||||||
#include "Sound/ESetSFXGain.h"
|
#include "../Engine/Sound/ESetBGMGain.h"
|
||||||
#include "Core/EPause.h"
|
#include "../Engine/Sound/ESetSFXGain.h"
|
||||||
#include "Core/EComponentAttached.h"
|
#include "../Engine/Sound/ESetAnnouncerGain.h"
|
||||||
|
#include "../Engine/Sound/EChangeBGM.h"
|
||||||
|
#include "../Engine/Core/EPause.h"
|
||||||
|
#include "../Engine/Core/EComponentAttached.h"
|
||||||
#include "../Core/EPlayerSpawned.h"
|
#include "../Core/EPlayerSpawned.h"
|
||||||
|
#include "../Rendering/ESetCamera.h"
|
||||||
|
|
||||||
|
|
||||||
typedef std::pair<ALuint, std::vector<ALuint>> QueuedBuffers;
|
typedef std::pair<ALuint, std::vector<ALuint>> QueuedBuffers;
|
||||||
|
|
||||||
enum class SoundType {
|
enum class SoundType {
|
||||||
SFX,
|
SFX,
|
||||||
BGM
|
BGM,
|
||||||
|
Announcer
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Source
|
struct Source
|
||||||
@@ -43,6 +47,7 @@ struct Source
|
|||||||
Sound* SoundResource = nullptr;
|
Sound* SoundResource = nullptr;
|
||||||
ALuint ALsource;
|
ALuint ALsource;
|
||||||
SoundType Type;
|
SoundType Type;
|
||||||
|
float Duration;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SoundManager
|
class SoundManager
|
||||||
@@ -74,14 +79,20 @@ private:
|
|||||||
ALenum getSourceState(ALuint source);
|
ALenum getSourceState(ALuint source);
|
||||||
void setGain(Source* source, float gain);
|
void setGain(Source* source, float gain);
|
||||||
void setSoundProperties(Source* source, ComponentWrapper* soundComponent);
|
void setSoundProperties(Source* source, ComponentWrapper* soundComponent);
|
||||||
|
float getDurationSeconds(Source* source);
|
||||||
|
float getTimeOffsetSeconds(Source* source);
|
||||||
|
void setTimeOffsetSeconds(Source* source, float timeOffset);
|
||||||
|
|
||||||
// Specific logic
|
// Specific logic
|
||||||
void playSound(Source* source);
|
void playSound(Source* source);
|
||||||
// Need to be the same format (sample rate etc)
|
// Needs to be the same format (sample rate etc)
|
||||||
void playQueue(QueuedBuffers qb);
|
void playQueue(QueuedBuffers qb);
|
||||||
void stopSound(Source* source);
|
void stopSound(Source* source);
|
||||||
Source* createSource(std::string filePath);
|
Source* createSource(std::string filePath);
|
||||||
std::unordered_map<EntityID, Source*> m_Sources;
|
std::unordered_map<EntityID, Source*> m_Sources;
|
||||||
|
void matchBGMLoop();
|
||||||
|
Source* m_CurrentBGM = nullptr;
|
||||||
|
Source* m_CurrentBGMCombo = nullptr;
|
||||||
|
|
||||||
// Logic
|
// Logic
|
||||||
World* m_World = nullptr;
|
World* m_World = nullptr;
|
||||||
@@ -93,6 +104,7 @@ private:
|
|||||||
|
|
||||||
float m_BGMVolumeChannel = 1.0f;
|
float m_BGMVolumeChannel = 1.0f;
|
||||||
float m_SFXVolumeChannel = 1.0f;
|
float m_SFXVolumeChannel = 1.0f;
|
||||||
|
float m_AnnouncerVolumeChannel = 1.0f;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper();
|
EntityWrapper m_LocalPlayer = EntityWrapper();
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
@@ -102,6 +114,8 @@ private:
|
|||||||
bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e);
|
bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e);
|
||||||
EventRelay<SoundManager, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
|
EventRelay<SoundManager, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
|
||||||
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
|
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
|
||||||
|
EventRelay<SoundManager, Events::PlayAnonuncerVoice> m_EPlayAnnouncerVoice;
|
||||||
|
bool OnPlayAnnouncerVoice(const Events::PlayAnonuncerVoice& e);
|
||||||
EventRelay<SoundManager, Events::PauseSound> m_EPauseSound;
|
EventRelay<SoundManager, Events::PauseSound> m_EPauseSound;
|
||||||
bool OnPauseSound(const Events::PauseSound &e);
|
bool OnPauseSound(const Events::PauseSound &e);
|
||||||
EventRelay<SoundManager, Events::StopSound> m_EStopSound;
|
EventRelay<SoundManager, Events::StopSound> m_EStopSound;
|
||||||
@@ -112,6 +126,8 @@ private:
|
|||||||
bool OnSetBGMGain(const Events::SetBGMGain &e);
|
bool OnSetBGMGain(const Events::SetBGMGain &e);
|
||||||
EventRelay<SoundManager, Events::SetSFXGain> m_ESetSFXGain;
|
EventRelay<SoundManager, Events::SetSFXGain> m_ESetSFXGain;
|
||||||
bool OnSetSFXGain(const Events::SetSFXGain &e);
|
bool OnSetSFXGain(const Events::SetSFXGain &e);
|
||||||
|
EventRelay<SoundManager, Events::SetAnnouncerGain> m_ESetAnnouncerGain;
|
||||||
|
bool OnSetAnnouncerGain(const Events::SetAnnouncerGain& e);
|
||||||
EventRelay<SoundManager, Events::ComponentAttached> m_EComponentAttached;
|
EventRelay<SoundManager, Events::ComponentAttached> m_EComponentAttached;
|
||||||
bool OnComponentAttached(const Events::ComponentAttached &e);
|
bool OnComponentAttached(const Events::ComponentAttached &e);
|
||||||
EventRelay<SoundManager, Events::Pause> m_EPause;
|
EventRelay<SoundManager, Events::Pause> m_EPause;
|
||||||
@@ -122,6 +138,10 @@ private:
|
|||||||
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
||||||
EventRelay<SoundManager, Events::PlayQueueOnEntity> m_EPlayQueueOnEntity;
|
EventRelay<SoundManager, Events::PlayQueueOnEntity> m_EPlayQueueOnEntity;
|
||||||
bool OnPlayQueueOnEntity(const Events::PlayQueueOnEntity &e);
|
bool OnPlayQueueOnEntity(const Events::PlayQueueOnEntity &e);
|
||||||
|
EventRelay<SoundManager, Events::ChangeBGM> m_EChangeBGM;
|
||||||
|
bool OnChangeBGM(const Events::ChangeBGM &e);
|
||||||
|
EventRelay<SoundManager, Events::SetCamera> m_ESetCamera;
|
||||||
|
bool OnSetCamera(const Events::SetCamera& e);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef Events_Reset_h__
|
||||||
|
#define Events_Reset_h__
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/EntityWrapper.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Reset : Event
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
#define AmmoPickupSystem_h__
|
#define AmmoPickupSystem_h__
|
||||||
|
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EPickupSpawned.h"
|
#include "Core/EPickupSpawned.h"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
#include "SpawnerSystem.h"
|
||||||
|
|
||||||
class BoostSystem : public System
|
class BoostSystem : public System
|
||||||
{
|
{
|
||||||
@@ -17,5 +18,7 @@ private:
|
|||||||
bool OnPlayerDamage(Events::PlayerDamage& e);
|
bool OnPlayerDamage(Events::PlayerDamage& e);
|
||||||
|
|
||||||
std::string DetermineClass(EntityWrapper player);
|
std::string DetermineClass(EntityWrapper player);
|
||||||
|
|
||||||
|
void giveAmmo(EntityWrapper giver, EntityWrapper receiver);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/ECaptured.h"
|
#include "Core/ECaptured.h"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "Engine/Collision/ETrigger.h"
|
#include "Engine/Collision/ETrigger.h"
|
||||||
#include "Core/ECaptured.h"
|
#include "Core/ECaptured.h"
|
||||||
#include "Core/EWin.h"
|
#include "Core/EWin.h"
|
||||||
|
#include "Game/Events/EReset.h"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -23,6 +24,7 @@ public:
|
|||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void Init();
|
||||||
//methods which will take care of specific events
|
//methods which will take care of specific events
|
||||||
EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch;
|
EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch;
|
||||||
bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e);
|
bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e);
|
||||||
@@ -30,6 +32,8 @@ private:
|
|||||||
bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e);
|
bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e);
|
||||||
EventRelay<CapturePointSystem, Events::Captured> m_ECaptured;
|
EventRelay<CapturePointSystem, Events::Captured> m_ECaptured;
|
||||||
bool CapturePointSystem::OnCaptured(const Events::Captured& e);
|
bool CapturePointSystem::OnCaptured(const Events::Captured& e);
|
||||||
|
EventRelay<CapturePointSystem, Events::Reset> m_EReset;
|
||||||
|
bool CapturePointSystem::OnReset(const Events::Reset& e);
|
||||||
void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner);
|
void ChangeCapturePointModelsVisibility(EntityWrapper &capturePointModels, bool isOwner);
|
||||||
|
|
||||||
bool m_WinnerWasFound = false;
|
bool m_WinnerWasFound = false;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define DamageIndicatorSystem_h__
|
#define DamageIndicatorSystem_h__
|
||||||
|
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef EndScreenSystem_h__
|
||||||
|
#define EndScreenSystem_h__
|
||||||
|
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Input/EInputCommand.h"
|
||||||
|
#include "Rendering/ESetCamera.h"
|
||||||
|
#include "Core/EWin.h"
|
||||||
|
|
||||||
|
class EndScreenSystem : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EndScreenSystem(SystemParams params);
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EventRelay<EndScreenSystem, Events::Win> m_EWin;
|
||||||
|
bool OnWin(const Events::Win& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
|
#include "Engine/GLM.h"
|
||||||
|
|
||||||
class ExplosionEffectSystem : public PureSystem
|
class ExplosionEffectSystem : public PureSystem
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#ifndef FadeSystem_h__
|
||||||
|
#define FadeSystem_h__
|
||||||
|
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "GLM.h"
|
||||||
|
|
||||||
|
class FadeSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FadeSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem("Fade")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFadeOut, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -12,8 +12,8 @@ public:
|
|||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||||
{
|
{
|
||||||
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
||||||
(double&)component["Time"] += dt;
|
(Field<double>)component["Time"] += dt;
|
||||||
(glm::vec3&)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
|
(Field<glm::vec3>)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "../../Engine/Core/System.h"
|
#include "../../Engine/Core/System.h"
|
||||||
#include "../../Engine/GLM.h"
|
#include "../../Engine/GLM.h"
|
||||||
#include "Core/EPlayerDeath.h"
|
#include "Network/EKillDeath.h"
|
||||||
|
|
||||||
class KillFeedSystem : public ImpureSystem
|
class KillFeedSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
@@ -11,8 +11,7 @@ public:
|
|||||||
KillFeedSystem(SystemParams params)
|
KillFeedSystem(SystemParams params)
|
||||||
: System(params)
|
: System(params)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &KillFeedSystem::OnPlayerDeath);
|
EVENT_SUBSCRIBE_MEMBER(m_EKillDeath, &KillFeedSystem::OnPlayerKillDeath)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
@@ -22,16 +21,30 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
EventRelay<KillFeedSystem, Events::PlayerDeath> m_EPlayerDeath;
|
EventRelay<KillFeedSystem, Events::KillDeath> m_EKillDeath;
|
||||||
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e);
|
bool KillFeedSystem::OnPlayerKillDeath(Events::KillDeath& e);
|
||||||
|
|
||||||
struct KillFeedInfo
|
struct KillFeedInfo
|
||||||
{
|
{
|
||||||
std::string Content;
|
std::string KillerName = "";
|
||||||
glm::vec4 Color;
|
int KillerClass = 0;
|
||||||
|
int KillerID = -1;
|
||||||
|
int KillerTeam = 0;
|
||||||
|
std::string KillerColor = "";
|
||||||
|
|
||||||
|
std::string VictimName = "";
|
||||||
|
int VictimClass = 0;
|
||||||
|
int VictimID = -1;
|
||||||
|
int VictimTeam = 0;
|
||||||
|
std::string VictimColor = "";
|
||||||
|
|
||||||
|
bool redused;
|
||||||
float TimeToLive = 5.f;
|
float TimeToLive = 5.f;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::string m_RedColor = "\\C08366D";
|
||||||
|
std::string m_BlueColor = "\\C6A1208";
|
||||||
|
|
||||||
std::list<KillFeedInfo> m_DeathQueue;
|
std::list<KillFeedInfo> m_DeathQueue;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Network/ESearchForServers.h"
|
#include "Network/ESearchForServers.h"
|
||||||
#include "Network/EConnectRequest.h"
|
#include "Network/EConnectRequest.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
class MainMenuSystem : public ImpureSystem
|
class MainMenuSystem : public ImpureSystem
|
||||||
@@ -24,6 +25,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
void OpenSubMenu(const Events::InputCommand& e);
|
void OpenSubMenu(const Events::InputCommand& e);
|
||||||
|
void OpenDropDown(const Events::InputCommand& e);
|
||||||
|
|
||||||
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
|
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
|
||||||
bool OnButtonClick(const Events::ButtonClicked& e);
|
bool OnButtonClick(const Events::ButtonClicked& e);
|
||||||
@@ -36,6 +38,7 @@ private:
|
|||||||
|
|
||||||
std::string m_CurrentCommand = "";
|
std::string m_CurrentCommand = "";
|
||||||
EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid;
|
EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid;
|
||||||
|
EntityWrapper m_DropDown = EntityWrapper::Invalid;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#define PickupSpawnSystem_h__
|
#define PickupSpawnSystem_h__
|
||||||
|
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EPickupSpawned.h"
|
#include "Core/EPickupSpawned.h"
|
||||||
|
|||||||
@@ -32,8 +32,10 @@ private:
|
|||||||
glm::vec3 m_LastPosition = glm::vec3();
|
glm::vec3 m_LastPosition = glm::vec3();
|
||||||
// Used to track afterimages for sprint effect.
|
// Used to track afterimages for sprint effect.
|
||||||
float m_SprintEffectTimer;
|
float m_SprintEffectTimer;
|
||||||
|
// Used to track afterimages for dash effect.
|
||||||
|
float m_DashEffectTimer;
|
||||||
// The logic for making the sound play when player is moving
|
// The logic for making the sound play when player is moving
|
||||||
void playerStep(double dt);
|
void playerStep(double dt, EntityWrapper player);
|
||||||
// Spawn a hexagon at origin of an Entity
|
// Spawn a hexagon at origin of an Entity
|
||||||
void spawnHexagon(EntityWrapper target);
|
void spawnHexagon(EntityWrapper target);
|
||||||
|
|
||||||
@@ -46,4 +48,6 @@ private:
|
|||||||
|
|
||||||
void updateMovementControllers(double dt);
|
void updateMovementControllers(double dt);
|
||||||
void updateVelocity(EntityWrapper player, double dt);
|
void updateVelocity(EntityWrapper player, double dt);
|
||||||
|
|
||||||
|
void setAim(EntityWrapper root, std::string weaponNodeName, double time);
|
||||||
};
|
};
|
||||||
@@ -19,9 +19,9 @@ private:
|
|||||||
enum class PlayerClass
|
enum class PlayerClass
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
Assault,
|
Assault = 1,
|
||||||
Defender,
|
Defender = 2,
|
||||||
Sniper
|
Sniper = 2
|
||||||
};
|
};
|
||||||
struct SpawnRequest
|
struct SpawnRequest
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,25 @@
|
|||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//struct FSubscriptProxy
|
||||||
|
// {
|
||||||
|
// friend struct ComponentWrapper;
|
||||||
|
// FSubscriptProxy(ComponentWrapper* component, std::string fieldName)
|
||||||
|
// : m_Component(component)
|
||||||
|
// , m_FieldName(fieldName)
|
||||||
|
// { }
|
||||||
|
|
||||||
|
// ComponentWrapper* m_Component;
|
||||||
|
// std::string m_FieldName;
|
||||||
|
|
||||||
|
// public:
|
||||||
|
// template <typename T>
|
||||||
|
// operator Field<T>() { return Field<T>(m_Component->Field<T>(m_FieldName)); }
|
||||||
|
|
||||||
|
// };
|
||||||
|
|
||||||
class RaptorCopterSystem : public PureSystem
|
class RaptorCopterSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -9,9 +28,11 @@ public:
|
|||||||
, PureSystem("RaptorCopter")
|
, PureSystem("RaptorCopter")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cRaptorCopter, double dt) override
|
||||||
{
|
{
|
||||||
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
ComponentWrapper& cTransform = entity["Transform"];
|
||||||
(glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"];
|
//FSubscriptProxy subOri(&cTransform, "Orientation");
|
||||||
|
//Field<glm::vec3> orientation = subOri;
|
||||||
|
(Field<glm::vec3>)cTransform["Orientation"] += (float)(const double&)cRaptorCopter["Speed"] * (float)dt * (glm::vec3)cRaptorCopter["Axis"];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -8,6 +8,8 @@
|
|||||||
#include "Core/EPlayerSpawned.h"
|
#include "Core/EPlayerSpawned.h"
|
||||||
#include "Network/EPlayerConnected.h"
|
#include "Network/EPlayerConnected.h"
|
||||||
#include "Network/EPlayerDisconnected.h"
|
#include "Network/EPlayerDisconnected.h"
|
||||||
|
#include "Game/Events/EReset.h"
|
||||||
|
#include "Engine/Input/EInputCommand.h"
|
||||||
#include "GLM.h"
|
#include "GLM.h"
|
||||||
|
|
||||||
class ScoreScreenSystem : public PureSystem
|
class ScoreScreenSystem : public PureSystem
|
||||||
@@ -25,6 +27,10 @@ public:
|
|||||||
bool OnPlayerConnected(const Events::PlayerConnected& e);
|
bool OnPlayerConnected(const Events::PlayerConnected& e);
|
||||||
EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected;
|
EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected;
|
||||||
bool OnPlayerDisconnected(const Events::PlayerDisconnected& e);
|
bool OnPlayerDisconnected(const Events::PlayerDisconnected& e);
|
||||||
|
EventRelay<ScoreScreenSystem, Events::Reset> m_EReset;
|
||||||
|
bool OnReset(const Events::Reset& e);
|
||||||
|
EventRelay<ScoreScreenSystem, Events::InputCommand> m_EInputCommand;
|
||||||
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct PlayerData {
|
struct PlayerData {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define Systems_SoundSystem_h__
|
#define Systems_SoundSystem_h__
|
||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
#include "../Engine/Core/System.h"
|
#include "../Engine/Core/System.h"
|
||||||
#include "../Engine/Core/ResourceManager.h"
|
#include "../Engine/Core/ResourceManager.h"
|
||||||
@@ -20,9 +21,10 @@
|
|||||||
#include "../Engine/Collision/ETrigger.h"
|
#include "../Engine/Collision/ETrigger.h"
|
||||||
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
||||||
#include "../Engine/Sound/EPlayBackgroundMusic.h"
|
#include "../Engine/Sound/EPlayBackgroundMusic.h"
|
||||||
|
#include "../Engine/Sound/EPlayAnnouncerVoice.h"
|
||||||
#include "../Game/Events/EDoubleJump.h"
|
#include "../Game/Events/EDoubleJump.h"
|
||||||
#include "../Game/Events/EDashAbility.h"
|
#include "../Game/Events/EDashAbility.h"
|
||||||
|
#include "../Engine/Sound/EChangeBGM.h"
|
||||||
|
|
||||||
class SoundSystem : public PureSystem, ImpureSystem
|
class SoundSystem : public PureSystem, ImpureSystem
|
||||||
{
|
{
|
||||||
@@ -33,14 +35,10 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::string m_Announcer = "";
|
std::string m_Announcer = "";
|
||||||
// Logic for playing a sound when a player jumps
|
// Logic for playing a sound when a player jumps
|
||||||
void playerJumps();
|
void playerJumps(EntityWrapper player);
|
||||||
|
|
||||||
// Temporary solution for play test.
|
|
||||||
bool m_DrumsIsPlaying = false;
|
|
||||||
double m_DrumTimer = 0.0;
|
|
||||||
bool drumTimer(double dt);
|
|
||||||
|
|
||||||
std::default_random_engine generator;
|
std::default_random_engine m_RandomGenerator;
|
||||||
|
std::uniform_int_distribution<int> m_RandIntDistribution;
|
||||||
|
|
||||||
EventRelay<SoundSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<SoundSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
||||||
@@ -48,10 +46,6 @@ private:
|
|||||||
bool OnInputCommand(const Events::InputCommand &e);
|
bool OnInputCommand(const Events::InputCommand &e);
|
||||||
EventRelay<SoundSystem, Events::DoubleJump> m_EDoubleJump;
|
EventRelay<SoundSystem, Events::DoubleJump> m_EDoubleJump;
|
||||||
bool OnDoubleJump(const Events::DoubleJump &e);
|
bool OnDoubleJump(const Events::DoubleJump &e);
|
||||||
EventRelay<SoundSystem, Events::DashAbility> m_EDashAbility;
|
|
||||||
bool OnDashAbility(const Events::DashAbility &e);
|
|
||||||
EventRelay<SoundSystem, Events::TriggerTouch> m_ETriggerTouch;
|
|
||||||
bool OnTriggerTouch(const Events::TriggerTouch &e);
|
|
||||||
EventRelay<SoundSystem, Events::Captured> m_ECaptured;
|
EventRelay<SoundSystem, Events::Captured> m_ECaptured;
|
||||||
bool OnCaptured(const Events::Captured &e);
|
bool OnCaptured(const Events::Captured &e);
|
||||||
EventRelay<SoundSystem, Events::PlayerDamage> m_EPlayerDamage;
|
EventRelay<SoundSystem, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
|
|||||||
@@ -6,8 +6,9 @@
|
|||||||
#include "GLM.h"
|
#include "GLM.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Events/ESpawnerSpawn.h"
|
#include "Events/ESpawnerSpawn.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Rendering/Model.h"
|
||||||
|
|
||||||
class SpawnerSystem : public System
|
class SpawnerSystem : public System
|
||||||
{
|
{
|
||||||
@@ -18,6 +19,7 @@ public:
|
|||||||
// will try to pick a spawn location so that the spawned entity doesn't
|
// will try to pick a spawn location so that the spawned entity doesn't
|
||||||
// collide with anything that has that component and is collidable.
|
// collide with anything that has that component and is collidable.
|
||||||
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
|
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
|
||||||
|
static EntityWrapper SpawnEntityFile(const std::string& entityFilePath, EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
|
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Network/EPlayerDisconnected.h"
|
#include "Network/EPlayerDisconnected.h"
|
||||||
|
#include "Game/Events/EReset.h"
|
||||||
|
|
||||||
class SpectatorCameraSystem : public ImpureSystem
|
class SpectatorCameraSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
@@ -15,11 +16,14 @@ public:
|
|||||||
private:
|
private:
|
||||||
int m_PickedTeam;
|
int m_PickedTeam;
|
||||||
bool m_CamSetToTeamPick;
|
bool m_CamSetToTeamPick;
|
||||||
|
void reset();
|
||||||
|
|
||||||
EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand;
|
EventRelay<SpectatorCameraSystem, Events::InputCommand> m_EInputCommand;
|
||||||
bool OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect;
|
EventRelay<SpectatorCameraSystem, Events::PlayerDisconnected> m_EDisconnect;
|
||||||
bool OnDisconnect(const Events::PlayerDisconnected& e);
|
bool OnDisconnect(const Events::PlayerDisconnected& e);
|
||||||
|
EventRelay<SpectatorCameraSystem, Events::Reset> m_EReset;
|
||||||
|
bool OnReset(const Events::Reset& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -31,12 +31,14 @@ private:
|
|||||||
|
|
||||||
// Weapon functions
|
// Weapon functions
|
||||||
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
|
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
//void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
|
|
||||||
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
|
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
//Camera cameraFromEntity(EntityWrapper camera);
|
//Camera cameraFromEntity(EntityWrapper camera);
|
||||||
|
|
||||||
|
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
#include "Collision/Collision.h"
|
#include "Collision/Collision.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Sound/EPlaySoundOnEntity.h"
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include <glm/gtx/vector_angle.hpp>
|
||||||
|
|
||||||
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
||||||
{
|
{
|
||||||
@@ -22,18 +24,24 @@ public:
|
|||||||
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
|
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
|
||||||
|
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::random_device m_RandomDevice;
|
std::random_device m_RandomDevice;
|
||||||
std::mt19937 m_RandomEngine;
|
std::mt19937 m_RandomEngine;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Weapon functions
|
// Weapon functions
|
||||||
void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi);
|
void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
|
void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, const std::vector<glm::vec2>& pattern);
|
||||||
|
void spawnTracers(ComponentWrapper cWeapon, WeaponInfo& wi, std::vector<glm::vec2> pattern);
|
||||||
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
Camera cameraFromEntity(EntityWrapper camera);
|
Camera cameraFromEntity(EntityWrapper camera);
|
||||||
|
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#include "WeaponBehaviour.h"
|
#include "WeaponBehaviour.h"
|
||||||
#include "Collision/Collision.h"
|
#include "Collision/Collision.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
|
||||||
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
|
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
|
||||||
{
|
{
|
||||||
@@ -18,6 +20,7 @@ public:
|
|||||||
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
||||||
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
|
||||||
@@ -32,6 +35,16 @@ private:
|
|||||||
// Utility
|
// Utility
|
||||||
bool canFire(ComponentWrapper cWeapon);
|
bool canFire(ComponentWrapper cWeapon);
|
||||||
bool playerInFirstPerson(EntityWrapper player);
|
bool playerInFirstPerson(EntityWrapper player);
|
||||||
|
|
||||||
|
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
// void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver);
|
||||||
|
|
||||||
|
void spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
|
||||||
|
void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
void RemoveFrindlyAmmoHUD(WeaponInfo& wi);
|
||||||
|
|
||||||
|
|
||||||
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -270,7 +270,8 @@ private:
|
|||||||
EntityWrapper thirdPersonAttachment;
|
EntityWrapper thirdPersonAttachment;
|
||||||
for (auto& attachment : weaponAttachments) {
|
for (auto& attachment : weaponAttachments) {
|
||||||
ComponentWrapper cWeaponAttachment = attachment["WeaponAttachment"];
|
ComponentWrapper cWeaponAttachment = attachment["WeaponAttachment"];
|
||||||
if ((std::string&)cWeaponAttachment["Weapon"] == m_ComponentType) {
|
Field<std::string> weaponType = cWeaponAttachment["Weapon"];
|
||||||
|
if (*weaponType == m_ComponentType) {
|
||||||
ComponentWrapper::SubscriptProxy person = cWeaponAttachment["Person"];
|
ComponentWrapper::SubscriptProxy person = cWeaponAttachment["Person"];
|
||||||
if ((ComponentInfo::EnumType)person == person.Enum("FirstPerson")) {
|
if ((ComponentInfo::EnumType)person == person.Enum("FirstPerson")) {
|
||||||
firstPersonAttachment = attachment;
|
firstPersonAttachment = attachment;
|
||||||
@@ -305,6 +306,8 @@ private:
|
|||||||
wi.ThirdPersonEntity = thirdPersonWeapon;
|
wi.ThirdPersonEntity = thirdPersonWeapon;
|
||||||
wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model");
|
wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model");
|
||||||
|
|
||||||
|
player["Player"]["CurrentWeapon"] = cWeapon.Info.Name;
|
||||||
|
|
||||||
OnEquip(cWeapon, wi);
|
OnEquip(cWeapon, wi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -39,6 +39,7 @@ ResourceLoading=true
|
|||||||
[Sound]
|
[Sound]
|
||||||
BGMVolume=1.0
|
BGMVolume=1.0
|
||||||
SFXVolume=1.0
|
SFXVolume=1.0
|
||||||
|
AnnouncerVolume=1.0
|
||||||
Announcer=female
|
Announcer=female
|
||||||
|
|
||||||
[SSAO]
|
[SSAO]
|
||||||
@@ -75,13 +76,16 @@ NumIterations=9
|
|||||||
TextureQuality=0
|
TextureQuality=0
|
||||||
|
|
||||||
[GLOW]
|
[GLOW]
|
||||||
Quality=3
|
Quality=1
|
||||||
|
|
||||||
[GLOW1]
|
[GLOW1]
|
||||||
NumIterations=5
|
NumIterations=2
|
||||||
|
|
||||||
[GLOW2]
|
[GLOW2]
|
||||||
NumIterations=9
|
NumIterations=4
|
||||||
|
|
||||||
[GLOW3]
|
[GLOW3]
|
||||||
NumIterations=13
|
NumIterations=6
|
||||||
|
|
||||||
|
[MSAA]
|
||||||
|
Level = 0;
|
||||||
|
|||||||
@@ -29,6 +29,4 @@ K=TakeDamage,1500
|
|||||||
F2=PerformanceTimingResetAllTimers
|
F2=PerformanceTimingResetAllTimers
|
||||||
F3=PerformanceTimingCreateExcelData
|
F3=PerformanceTimingCreateExcelData
|
||||||
Comma=SwapToClassPick
|
Comma=SwapToClassPick
|
||||||
Period=SwapToTeamPick
|
Period=SwapToTeamPick
|
||||||
Enter=PickClass,1
|
|
||||||
F5=DisconnectFromServer
|
|
||||||
@@ -68,6 +68,9 @@
|
|||||||
<xs:include schemaLocation="Components/NetworkComponent.xsd"/>
|
<xs:include schemaLocation="Components/NetworkComponent.xsd"/>
|
||||||
<xs:include schemaLocation="Components/ServerIdentity.xsd"/>
|
<xs:include schemaLocation="Components/ServerIdentity.xsd"/>
|
||||||
<xs:include schemaLocation="Components/ServerList.xsd"/>
|
<xs:include schemaLocation="Components/ServerList.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Unpickable.xsd"/>
|
||||||
<xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/>
|
<xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/>
|
||||||
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
|
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/EndScreen.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Fade.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<BoostAssault xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostAssault.xsd">
|
<BoostAssault xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostAssault.xsd">
|
||||||
<StrengthOfEffect>2</StrengthOfEffect>
|
<StrengthOfEffect>1.35</StrengthOfEffect>
|
||||||
</BoostAssault>
|
</BoostAssault>
|
||||||
|
|||||||
@@ -2,4 +2,5 @@
|
|||||||
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
|
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
|
||||||
<RespawnTime>0.0</RespawnTime>
|
<RespawnTime>0.0</RespawnTime>
|
||||||
<MaxRespawnTime>8.0</MaxRespawnTime>
|
<MaxRespawnTime>8.0</MaxRespawnTime>
|
||||||
|
<ResetCountdown>10.0</ResetCountdown>
|
||||||
</CapturePointGameMode>
|
</CapturePointGameMode>
|
||||||
@@ -12,6 +12,9 @@
|
|||||||
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
|
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="ResetCountdown" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The map will be reset when time reaches 0.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
|
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
|
||||||
<Slot><Primary/></Slot>
|
<Slot><Primary/></Slot>
|
||||||
<MagazineAmmo>8</MagazineAmmo>
|
<MagazineAmmo>9999</MagazineAmmo>
|
||||||
<MagazineSize>8</MagazineSize>
|
<MagazineSize>8</MagazineSize>
|
||||||
<Ammo>64</Ammo>
|
<Ammo>64</Ammo>
|
||||||
<MaxAmmo>64</MaxAmmo>
|
<MaxAmmo>64</MaxAmmo>
|
||||||
<BaseDamage>90</BaseDamage>
|
<BaseDamage>90</BaseDamage>
|
||||||
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
|
<SpreadAngle>10</SpreadAngle>
|
||||||
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
|
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
<NumPellets>10</NumPellets>
|
<NumPellets>9</NumPellets>
|
||||||
<RPM>120</RPM>
|
<RPM>120</RPM>
|
||||||
<ViewPunch>0.03</ViewPunch>
|
<ViewPunch>0.15</ViewPunch>
|
||||||
<ViewReturnSpeed>0.2</ViewReturnSpeed>
|
<ViewReturnSpeed>0.3</ViewReturnSpeed>
|
||||||
<ReloadTime>0.5</ReloadTime>
|
<ReloadTime>0.5</ReloadTime>
|
||||||
<TriggerHeld>false</TriggerHeld>
|
<TriggerHeld>false</TriggerHeld>
|
||||||
<FireCooldown>0</FireCooldown>
|
<FireCooldown>0</FireCooldown>
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>The spread angle radius.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
|
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<EndScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EndScreen.xsd">
|
||||||
|
</EndScreen>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="EndScreen">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Put this on the camera that will show the final screen.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,19 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<ExplosionEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExplosionEffect.xsd">
|
<ExplosionEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExplosionEffect.xsd">
|
||||||
<ExplosionOrigin X="0" Y="0" Z="0"/>
|
<ExplosionOrigin X="0" Y="0" Z="0"/>
|
||||||
<TimeSinceDeath>0</TimeSinceDeath>
|
<TimeSinceDeath>0.0</TimeSinceDeath>
|
||||||
<ExplosionDuration>2</ExplosionDuration>
|
<ExplosionDuration>2.0</ExplosionDuration>
|
||||||
<Speed>1</Speed>
|
<Speed>1</Speed>
|
||||||
<Delay>0</Delay>
|
<Delay>0</Delay>
|
||||||
<!--<Gravity>1</Gravity>-->
|
<!--<Gravity>1</Gravity>-->
|
||||||
<!--<GravityForce>1</GravityForce>-->
|
<!--<GravityForce>1</GravityForce>-->
|
||||||
<!--<ObjectRadius>2</ObjectRadius>-->
|
<!--<ObjectRadius>2</ObjectRadius>-->
|
||||||
<EndColor R="0" G="0" B="0" A="0"/>
|
<EndColor R="0" G="0" B="0" A="0"/>
|
||||||
<Randomness>0</Randomness>
|
<Randomness>false</Randomness>
|
||||||
<RandomnessScalar>1</RandomnessScalar>
|
<RandomnessScalar>1.0</RandomnessScalar>
|
||||||
<Velocity X="2" Y="2"/>
|
<Velocity X="2" Y="2"/>
|
||||||
<ColorByDistance>0</ColorByDistance>
|
<ColorByDistance>false</ColorByDistance>
|
||||||
<!--<ReverseAnimation>0</ReverseAnimation>-->
|
|
||||||
<!--<Wireframe>0</Wireframe>-->
|
<!--<Wireframe>0</Wireframe>-->
|
||||||
<ExponentialAccelaration>0</ExponentialAccelaration>
|
<ExponentialAccelaration>false</ExponentialAccelaration>
|
||||||
|
<Pulsate>false</Pulsate>
|
||||||
|
<Reverse>false</Reverse>
|
||||||
|
<ColorDistanceScalar>1.0</ColorDistanceScalar>
|
||||||
</ExplosionEffect>
|
</ExplosionEffect>
|
||||||
@@ -44,15 +44,21 @@
|
|||||||
<xs:element name="ColorByDistance" type="t:bool" minOccurs="0">
|
<xs:element name="ColorByDistance" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Change the color by its moved distance instead of by its time</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Change the color by its moved distance instead of by its time</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<!--<xs:element name="ReverseAnimation" type="t:bool" minOccurs="0">
|
|
||||||
<xs:annotation><xs:documentation>Implosions are cooler</xs:documentation></xs:annotation>
|
|
||||||
</xs:element>-->
|
|
||||||
<!--<xs:element name="Wireframe" type="t:bool" minOccurs="0">
|
<!--<xs:element name="Wireframe" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Enable/disable wireframe</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Enable/disable wireframe</xs:documentation></xs:annotation>
|
||||||
</xs:element>-->
|
</xs:element>-->
|
||||||
<xs:element name="ExponentialAccelaration" type="t:bool" minOccurs="0">
|
<xs:element name="ExponentialAccelaration" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Linear/Exponential accelaration</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Linear/Exponential accelaration</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="Pulsate" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Pulsate the effect</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Reverse" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Reverse the effect</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ColorDistanceScalar" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Scale the distance of the color change</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Fade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Fade.xsd">
|
||||||
|
<FadeTime>1</FadeTime>
|
||||||
|
<Time>0</Time>
|
||||||
|
<Out>true</Out>
|
||||||
|
<Loop>true</Loop>
|
||||||
|
<Reverse>false</Reverse>
|
||||||
|
</Fade>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="Fade">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="FadeTime" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Out" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>If the entity should fade out or in.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Loop" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>If the effect should loop when it is done.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Reverse" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>If the entity should reverse the fade after finishing, this will double the speed.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,2 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd"/>
|
<PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd">
|
||||||
|
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
|
||||||
|
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
|
||||||
|
<SniperFile></SniperFile>
|
||||||
|
</PlayerSpawn>
|
||||||
@@ -7,5 +7,12 @@
|
|||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation>
|
<xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="AssaultFile" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="DefenderFile" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="SniperFile" type="t:string" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
|||||||
@@ -6,11 +6,15 @@
|
|||||||
<BaseDamage>20</BaseDamage>
|
<BaseDamage>20</BaseDamage>
|
||||||
<RPM>500</RPM>
|
<RPM>500</RPM>
|
||||||
<Automatic>false</Automatic>
|
<Automatic>false</Automatic>
|
||||||
<ViewPunch>0.01</ViewPunch>
|
<ViewPunch>0.05</ViewPunch>
|
||||||
<ReloadTime>0.5</ReloadTime>
|
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
|
<ViewReturnSpeed>0.2</ViewReturnSpeed>
|
||||||
|
<ReloadTime>1.0</ReloadTime>
|
||||||
<EquipTime>0.5</EquipTime>
|
<EquipTime>0.5</EquipTime>
|
||||||
<TriggerHeld>false</TriggerHeld>
|
<TriggerHeld>false</TriggerHeld>
|
||||||
<FireCooldown>0</FireCooldown>
|
<FireCooldown>0</FireCooldown>
|
||||||
|
<ReloadQueued>false</ReloadQueued>
|
||||||
<IsReloading>false</IsReloading>
|
<IsReloading>false</IsReloading>
|
||||||
<ReloadTimer>0</ReloadTimer>
|
<ReloadTimer>0</ReloadTimer>
|
||||||
|
<CurrentTravel>0</CurrentTravel>
|
||||||
</SidearmWeapon>
|
</SidearmWeapon>
|
||||||
@@ -36,6 +36,12 @@
|
|||||||
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ViewReturnSpeed" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The speed in radians per second the view returns to its original position after being punched</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
@@ -44,8 +50,10 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="CurrentTravel" type="t:float" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<Gain>1.0</Gain>
|
<Gain>1.0</Gain>
|
||||||
<Pitch>1.0</Pitch>
|
<Pitch>1.0</Pitch>
|
||||||
<Loop>false</Loop>
|
<Loop>false</Loop>
|
||||||
<MaxDistance>20.0</MaxDistance>
|
<MaxDistance>220.0</MaxDistance>
|
||||||
<RollOffFactor>1.0</RollOffFactor>
|
<RollOffFactor>10</RollOffFactor>
|
||||||
<ReferenceDistance>1.0</ReferenceDistance>
|
<ReferenceDistance>1.0</ReferenceDistance>
|
||||||
</SoundEmitter>
|
</SoundEmitter>
|
||||||
@@ -10,5 +10,6 @@
|
|||||||
<KeepRatioY>false</KeepRatioY>
|
<KeepRatioY>false</KeepRatioY>
|
||||||
<KeepRatio>false</KeepRatio>
|
<KeepRatio>false</KeepRatio>
|
||||||
<Linear>true</Linear>
|
<Linear>true</Linear>
|
||||||
|
<ClampToBorder>false</ClampToBorder>
|
||||||
<BlurBackground>false</BlurBackground>
|
<BlurBackground>false</BlurBackground>
|
||||||
</Sprite>
|
</Sprite>
|
||||||
|
|||||||
@@ -39,6 +39,9 @@
|
|||||||
<xs:element name="Linear" type="t:bool" minOccurs="0">
|
<xs:element name="Linear" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>If it should use Linear or Nearest sampling method.</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>If it should use Linear or Nearest sampling method.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="ClampToBorder" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>If it should clamp to border or repeat the texture.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="BlurBackground" type="t:bool" minOccurs="0">
|
<xs:element name="BlurBackground" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Wether the background should be blurred begind this sprite.</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Wether the background should be blurred begind this sprite.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Unpickable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Unpickable.xsd">
|
||||||
|
</Unpickable>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="Unpickable">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Makes the entity unpickable</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="RayBlue">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="0.174532995" Z="0"/>
|
||||||
|
<Scale X="0" Y="1" Z="100"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
|
||||||
|
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
<Orientation X="0" Y="-1.57099998" Z="0"/>
|
||||||
|
<Scale X="1" Y="0.0260000005" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
|
||||||
|
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
|
||||||
|
<Scale X="1" Y="0.0260000005" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="RayBlue">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0" Y="1" Z="100"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
|
||||||
|
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
<Orientation X="0" Y="-1.57099998" Z="0"/>
|
||||||
|
<Scale X="1" Y="0.0260000005" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
|
||||||
|
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
|
||||||
|
<Scale X="1" Y="0.0260000005" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -2,21 +2,26 @@
|
|||||||
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:NetworkComponent/>
|
|
||||||
<c:AmmoPickup/>
|
<c:AmmoPickup/>
|
||||||
<c:Model>
|
<c:Trigger/>
|
||||||
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:RaptorCopter>
|
<c:RaptorCopter>
|
||||||
<Speed>8</Speed>
|
<Speed>8</Speed>
|
||||||
<Axis X="0" Y="0.100000001" Z="0"/>
|
<Axis X="0" Y="0.100000001" Z="0"/>
|
||||||
</c:RaptorCopter>
|
</c:RaptorCopter>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.0823529437" R="1"/>
|
||||||
|
<Radius>1.5</Radius>
|
||||||
|
<Intensity>3</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="2.36784196" Z="0"/>
|
<Position X="0" Y="2.36784196" Z="-0.0281207096"/>
|
||||||
|
<Orientation X="0" Y="18843.5469" Z="0"/>
|
||||||
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
|
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
|
||||||
<Orientation X="0" Y="18717.9453" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Trigger/>
|
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?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:Lifetime>
|
||||||
|
<Lifetime>1.2000000476837158</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="2.08100009" Y="3.37400007" Z="0"/>
|
||||||
|
<ExplosionOrigin X="0" Y="0" Z="2.91200018"/>
|
||||||
|
<TimeSinceDeath>1.2000000476837158</TimeSinceDeath>
|
||||||
|
<Speed>-1</Speed>
|
||||||
|
<ExplosionDuration>1.2000000476837158</ExplosionDuration>
|
||||||
|
<EndColor A="0.262745112" B="19.6078434" G="3.92156863" R="0"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
<ColorByDistance>true</ColorByDistance>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>16.040000915527344</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/JumpEffectHexagon.mesh</Resource>
|
||||||
|
<Color A="0" B="1.96078432" G="0" R="3.92156863"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.0900000036" Z="-0.00600000005"/>
|
||||||
|
<Orientation X="1.57000005" Y="0" Z="0"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user