Compare commits
215 Commits
SpectatorCamera
...
MSAA
| Author | SHA1 | Date | |
|---|---|---|---|
| f59a9e1d2b | |||
| 5796d07b56 | |||
| c790b952fb | |||
| be3d75a5cf | |||
| b3c935c7cc | |||
| f05b09ca7a | |||
| e76740d72b | |||
| d3927de7cc | |||
| 5aaefc6e53 | |||
| fe090504cf | |||
| a9d5c5d9d2 | |||
| 5f11d1e066 | |||
| 672d6f884d | |||
| 5ea0f04b20 | |||
| fb400bb743 | |||
| aa2475dfd6 | |||
| 36c4837813 | |||
| 741ed01930 | |||
| 2fa3637018 | |||
| 52e5e2527a | |||
| 36253a8afd | |||
| 5c343cb254 | |||
| b73595eed0 | |||
| bb3a8dba6a | |||
| f9e640ffc6 | |||
| f2c7a9f27a | |||
| ac20e41a5d | |||
| 4f99f6ef74 | |||
| d0a083a1e3 | |||
| d5f06fa8c2 | |||
| 8bb8ebbea3 | |||
| ec7ab417e6 | |||
| 4bd2e7995a | |||
| 799fd31844 | |||
| 45bfc374de | |||
| 95f9065037 | |||
| 993e56ec59 | |||
| a1fda82d3a | |||
| 20d46f63c8 | |||
| f6113b9d9c | |||
| 2e89227061 | |||
| 958850903a | |||
| 7ea90bede7 | |||
| 2bfbd72189 | |||
| 1e7f6941ba | |||
| 5146d21173 | |||
| 8c90c39680 | |||
| b7d88808e2 | |||
| f8f536802f | |||
| 91bad517d3 | |||
| 60df30fa59 | |||
| ba93ebbe88 | |||
| 70b0ca8776 | |||
| 90d848e8d9 | |||
| a3b3351e55 | |||
| ce0d3b9fbe | |||
| 674604d0df | |||
| 8e9ddc7b9d | |||
| 36b84f7cc3 | |||
| c544f349fd | |||
| beee2db5fb | |||
| 1bc4b89a53 | |||
| cc10e5500b | |||
| 068e151741 | |||
| e7a3793486 | |||
| 9bac141a6b | |||
| 0c1a2d3160 | |||
| eb5fcd6d19 | |||
| 9942747d41 | |||
| 24bb05ec67 | |||
| df7b4faf24 | |||
| 01db8e0615 | |||
| 5baac926aa | |||
| ee5c13d463 | |||
| 671079764e | |||
| 9b98bbbea8 | |||
| 80649ce51d | |||
| a4b0b108d4 | |||
| 28d576bfc0 | |||
| 66d0f9fa47 | |||
| dc09ba9158 | |||
| 1ad087dc75 | |||
| 157a54e845 | |||
| 7759af2c5a | |||
| ac096bbf77 | |||
| 81634578d9 | |||
| 2f61171d16 | |||
| aa16a15693 | |||
| 26337ff243 | |||
| 7bdb0d410f | |||
| 172fb8dfc2 | |||
| 0ca627eb8b | |||
| 530c0fd9b0 | |||
| 4df936ca70 | |||
| f036817c0c | |||
| e45d0e8232 | |||
| 8ebf818c19 | |||
| 62d1cb9a69 | |||
| edb305b307 | |||
| 0aedeb61b4 | |||
| 44398eac58 | |||
| 06bddd9d54 | |||
| 4937bee46a | |||
| bb0531a459 | |||
| 8bd38bc465 | |||
| 8ceaae995d | |||
| 5f959ded89 | |||
| 0fbc482f9c | |||
| 2eb863757b | |||
| 91aedcbb14 | |||
| cac0522ae7 | |||
| 26dde21e3d | |||
| 23e6a15c7f | |||
| e96ad44e44 | |||
| a3ab844cc4 | |||
| 03493df213 | |||
| 7febb7681c | |||
| e000408593 | |||
| 33627f917c | |||
| 0869afd529 | |||
| 56a13d03fc | |||
| dad18a200f | |||
| dab58e09a0 | |||
| cd6967b310 | |||
| 937bf823f3 | |||
| e35b09cc68 | |||
| b172526e62 | |||
| ab70aed840 | |||
| 551745b0a6 | |||
| d6e3a47182 | |||
| 8b89df0095 | |||
| 038a706e28 | |||
| f9808a61f7 | |||
| a8a4b5d2a2 | |||
| 777f382772 | |||
| 78129cf432 | |||
| e734d0c953 | |||
| c9fef65c4f | |||
| 7e6288c597 | |||
| 4322a5d8da | |||
| b094b9feca | |||
| 67dfbfff01 | |||
| 0a94373f3f | |||
| 79d0ef4529 | |||
| dd63f4a1b4 | |||
| 50dbbb4ed4 | |||
| 329a15e08b | |||
| 28de31d84d | |||
| e9ef0e7060 | |||
| 416f55b6ce | |||
| 0346f81234 | |||
| c3255519bf | |||
| a6ef026db5 | |||
| a2244e87ad | |||
| 6c072aae45 | |||
| 68634126e5 | |||
| a0d60160dd | |||
| 15c54d2be6 | |||
| e444a86ec5 | |||
| 8a8c375d3a | |||
| 592edf7dba | |||
| 087facc22e | |||
| 981dc3467e | |||
| 42af029a26 | |||
| f9935cad42 | |||
| 37355b1afc | |||
| 2e5dfc609a | |||
| 8936b3d6c3 | |||
| ad49af2f8c | |||
| 5a7034dfcd | |||
| 9721cb6a7d | |||
| 90b2c70215 | |||
| c36c7d1ea6 | |||
| 3209e36176 | |||
| 8a3564ad49 | |||
| 9581e9ac84 | |||
| ba6d2b758d | |||
| 12dd1d21de | |||
| e0de91cce3 | |||
| b7d93058b1 | |||
| ab2b28264f | |||
| 7ced9e6767 | |||
| 5d53fc74cb | |||
| ecc8d998cf | |||
| e3c0fb2178 | |||
| 090bd806ce | |||
| 3828616b60 | |||
| 9cbc582be2 | |||
| ec3ed1f46f | |||
| 68a88ed756 | |||
| ee99821164 | |||
| 9cc8124847 | |||
| 078d6eb712 | |||
| a369c26a28 | |||
| 53ea5bd37d | |||
| 243276707a | |||
| 16124b7aa7 | |||
| a7c57da2c9 | |||
| 1227a795d7 | |||
| 1cc92f4800 | |||
| 3613d66d32 | |||
| 20c6caa408 | |||
| b7fac7103d | |||
| 0cf92e99ff | |||
| 3ba73b8206 | |||
| d3ffb9768b | |||
| fcf5117952 | |||
| 2c56b03b2b | |||
| 4fd578c764 | |||
| 67dffafe5a | |||
| 7dbb9e452b | |||
| cf3d1b5b00 | |||
| 9783f9c650 | |||
| f72dea3852 | |||
| fb80d088e4 |
+1
-1
Submodule assets updated: 3af64d8b1f...6ffc1ab82a
@@ -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"
|
||||||
@@ -84,6 +84,18 @@ bool AABBvsTriangles(const AABB& box,
|
|||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
|
enum Output
|
||||||
|
{
|
||||||
|
OutContained,
|
||||||
|
OutSeparated,
|
||||||
|
OutIntersecting
|
||||||
|
};
|
||||||
|
//Detects intersection and containment.
|
||||||
|
Output AABBvsTrianglesWContainment(const AABB& box,
|
||||||
|
const RawModel::Vertex* modelVertices,
|
||||||
|
const std::vector<unsigned int>& modelIndices,
|
||||||
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
//Return true if the boxes are intersecting.
|
//Return true if the boxes are intersecting.
|
||||||
bool AABBVsAABB(const AABB& a, const AABB& b);
|
bool AABBVsAABB(const AABB& a, const AABB& b);
|
||||||
//Return true if the boxes are intersecting.
|
//Return true if the boxes are intersecting.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ private:
|
|||||||
// Utility functions
|
// Utility functions
|
||||||
EntityWrapper importEntity(EntityWrapper parent, boost::filesystem::path filePath);
|
EntityWrapper importEntity(EntityWrapper parent, boost::filesystem::path filePath);
|
||||||
void setWidgetMode(EditorGUI::WidgetMode mode);
|
void setWidgetMode(EditorGUI::WidgetMode mode);
|
||||||
|
bool isAnyParentMissingTransform(EntityID entityID);
|
||||||
|
|
||||||
// GUI callbacks
|
// GUI callbacks
|
||||||
void OnEntitySelected(EntityWrapper entity);
|
void OnEntitySelected(EntityWrapper entity);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public:
|
|||||||
virtual const glm::vec3 Rotation() const { return m_Rotation; }
|
virtual const glm::vec3 Rotation() const { return m_Rotation; }
|
||||||
virtual bool Jumping() const { return m_Jumping; }
|
virtual bool Jumping() const { return m_Jumping; }
|
||||||
virtual bool Crouching() const { return m_Crouching; }
|
virtual bool Crouching() const { return m_Crouching; }
|
||||||
|
virtual bool CrouchingLastFrame() const { return m_CrouchingLastFrame; }
|
||||||
virtual bool DoubleJumping() const { return m_DoubleJumping; }
|
virtual bool DoubleJumping() const { return m_DoubleJumping; }
|
||||||
virtual void SetDoubleJumping(bool isDoubleJumping) {
|
virtual void SetDoubleJumping(bool isDoubleJumping) {
|
||||||
m_DoubleJumping = isDoubleJumping;
|
m_DoubleJumping = isDoubleJumping;
|
||||||
@@ -29,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; }
|
||||||
@@ -44,6 +45,7 @@ protected:
|
|||||||
bool m_Jumping = false;
|
bool m_Jumping = false;
|
||||||
bool m_DoubleJumping = false;
|
bool m_DoubleJumping = false;
|
||||||
bool m_Crouching = false;
|
bool m_Crouching = false;
|
||||||
|
bool m_CrouchingLastFrame = false;
|
||||||
//assault dash membervariables - needed to calculate the doubletap- and dashlogic
|
//assault dash membervariables - needed to calculate the doubletap- and dashlogic
|
||||||
double m_AssaultDashDoubleTapDeltaTime = 0.0;
|
double m_AssaultDashDoubleTapDeltaTime = 0.0;
|
||||||
//i will let m_AssaultDashDoubleTapSensitivityTimer stay hardcoded, its not really a gamevariable (more an inputvariable),
|
//i will let m_AssaultDashDoubleTapSensitivityTimer stay hardcoded, its not really a gamevariable (more an inputvariable),
|
||||||
@@ -82,6 +84,7 @@ void FirstPersonInputController<EventContext>::Reset()
|
|||||||
{
|
{
|
||||||
m_Rotation = glm::vec3(0.f, 0.f, 0.f);
|
m_Rotation = glm::vec3(0.f, 0.f, 0.f);
|
||||||
m_Jumping = false;
|
m_Jumping = false;
|
||||||
|
m_CrouchingLastFrame = m_Crouching;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
@@ -355,7 +358,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,32 @@
|
|||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/shared_array.hpp>
|
#include <boost/shared_array.hpp>
|
||||||
|
|
||||||
|
#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"
|
||||||
|
|
||||||
class Client : public Network
|
class Client : public Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -40,9 +44,9 @@ 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;
|
||||||
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
|
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
|
||||||
void parseSpawnEvents();
|
void parseSpawnEvents();
|
||||||
@@ -74,14 +78,14 @@ 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
|
||||||
size_t receive(char* data);
|
size_t receive(char* data);
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(Packet& packet);
|
||||||
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID);
|
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID);
|
||||||
@@ -100,6 +104,7 @@ 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 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 +114,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 +142,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 = 2000; // Config I guess
|
double m_SearchingTime = 0.2; // Config I guess
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ enum class MessageType
|
|||||||
OnDashEffect,
|
OnDashEffect,
|
||||||
ServerlistRequest,
|
ServerlistRequest,
|
||||||
AmmoPickup,
|
AmmoPickup,
|
||||||
|
RemoveWorld,
|
||||||
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;
|
||||||
@@ -39,6 +39,8 @@ protected:
|
|||||||
void logReceivedData(int bytesReceived);
|
void logReceivedData(int bytesReceived);
|
||||||
void saveToFile();
|
void saveToFile();
|
||||||
void updateNetworkData();
|
void updateNetworkData();
|
||||||
|
void popNetworkSegmentOfHeader(Packet& packet);
|
||||||
|
void removeWorld();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -16,7 +16,9 @@ public:
|
|||||||
Packet(char* data, const size_t sizeOfPacket);
|
Packet(char* data, const size_t sizeOfPacket);
|
||||||
Packet(MessageType type);
|
Packet(MessageType type);
|
||||||
~Packet();
|
~Packet();
|
||||||
void Init(MessageType type, unsigned int& packetID);
|
void Init(MessageType type, unsigned int& packetID,
|
||||||
|
int groupIndex, int groupSize,
|
||||||
|
int packetGroup);
|
||||||
|
|
||||||
// Add primitive types like int, float, char...
|
// Add primitive types like int, float, char...
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -25,7 +27,8 @@ public:
|
|||||||
// Check if we are trying to add more than the package can fit.
|
// Check if we are trying to add more than the package can fit.
|
||||||
if (m_MaxPacketSize < m_Offset + sizeof(T)) {
|
if (m_MaxPacketSize < m_Offset + sizeof(T)) {
|
||||||
if (m_MaxPacketSize >= 32000) {
|
if (m_MaxPacketSize >= 32000) {
|
||||||
LOG_WARNING("Package::WritePrimitive(): New size is huge %i bytes\n", m_MaxPacketSize*2);
|
// This will spam couse 8 players are over 100 000 bytes
|
||||||
|
//LOG_WARNING("Package::WritePrimitive(): New size is huge %i bytes\n", m_MaxPacketSize*2);
|
||||||
}
|
}
|
||||||
resizeData();
|
resizeData();
|
||||||
}
|
}
|
||||||
@@ -57,13 +60,19 @@ public:
|
|||||||
void UpdateSize();
|
void UpdateSize();
|
||||||
char* ReadData(int SizeOfData);
|
char* ReadData(int SizeOfData);
|
||||||
void ChangePacketID(unsigned int& packetID);
|
void ChangePacketID(unsigned int& packetID);
|
||||||
|
void ChangeGroupIndex(int groupIndex);
|
||||||
|
void ChangeGroupSize(int groupSize);
|
||||||
|
void ChangeGroup(int group);
|
||||||
size_t Size() { return m_Offset; };
|
size_t Size() { return m_Offset; };
|
||||||
char* Data() { return m_Data; };
|
char* Data() { return m_Data; };
|
||||||
MessageType GetMessageType();
|
MessageType GetMessageType();
|
||||||
|
size_t Group();
|
||||||
size_t DataReadSize() { return m_ReturnDataOffset; }
|
size_t DataReadSize() { return m_ReturnDataOffset; }
|
||||||
size_t MaxSize() { return m_MaxPacketSize; }
|
size_t MaxSize() { return m_MaxPacketSize; }
|
||||||
size_t HeaderSize() { return m_HeaderSize; }
|
size_t HeaderSize() { return m_HeaderSize; }
|
||||||
|
size_t GroupIndex();
|
||||||
|
size_t GroupSize();
|
||||||
|
size_t PacketID();
|
||||||
private:
|
private:
|
||||||
char* m_Data;
|
char* m_Data;
|
||||||
size_t m_ReturnDataOffset = 0;
|
size_t m_ReturnDataOffset = 0;
|
||||||
@@ -72,6 +81,13 @@ private:
|
|||||||
size_t m_HeaderSize = 0;
|
size_t m_HeaderSize = 0;
|
||||||
void resizeData();
|
void resizeData();
|
||||||
void resizeData(int size);
|
void resizeData(int size);
|
||||||
|
|
||||||
|
size_t packetSizeOffset = 0;
|
||||||
|
size_t groupOffset = 0;
|
||||||
|
size_t groupIndexOffset = 0;
|
||||||
|
size_t groupSizeOffset = 0;
|
||||||
|
size_t messageTypeOffset = 0;
|
||||||
|
size_t packetIDOffset = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -14,6 +14,7 @@ struct PlayerDefinition {
|
|||||||
unsigned short TCPPort;
|
unsigned short TCPPort;
|
||||||
// use for tcp connections
|
// use for tcp connections
|
||||||
boost::shared_ptr<boost::asio::ip::tcp::socket> TCPSocket;
|
boost::shared_ptr<boost::asio::ip::tcp::socket> TCPSocket;
|
||||||
|
int PacketGroup = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
#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,16 +34,17 @@ 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
|
||||||
TCPServer m_Reliable;
|
TCPServer m_Reliable;
|
||||||
//UDPServer m_Unreliable;
|
UDPServer m_Unreliable;
|
||||||
UDPServer m_ServerlistRequest;
|
UDPServer m_ServerlistRequest;
|
||||||
// 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
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#ifndef UDPClient_h__
|
#ifndef UDPClient_h__
|
||||||
#define UDPClient_h__
|
#define UDPClient_h__
|
||||||
|
#include <map>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include "Network/NetworkClient.h"
|
#include "Network/NetworkClient.h"
|
||||||
@@ -13,16 +15,27 @@ public:
|
|||||||
bool Connect(std::string playerName, std::string address, int port);
|
bool Connect(std::string playerName, std::string address, int port);
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
void Receive(Packet& packet);
|
void Receive(Packet& packet);
|
||||||
void Send(Packet & packet);
|
void ReceivePackets();
|
||||||
|
void Send(Packet& packet);
|
||||||
void Broadcast(Packet& packet, int port);
|
void Broadcast(Packet& packet, int port);
|
||||||
bool IsSocketAvailable();
|
bool IsSocketAvailable();
|
||||||
|
// Returns false if no packets are available
|
||||||
|
bool GetNextPacket(Packet& packet);
|
||||||
private:
|
private:
|
||||||
|
typedef std::map<unsigned int, std::vector<std::pair<int, boost::shared_ptr<char>>>> PacketMap;
|
||||||
// Assio UDP logic
|
// Assio UDP logic
|
||||||
boost::asio::io_service m_IOService;
|
boost::asio::io_service m_IOService;
|
||||||
boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
|
boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
|
||||||
boost::shared_ptr<boost::asio::ip::udp::socket> m_Socket;
|
boost::shared_ptr<boost::asio::ip::udp::socket> m_Socket;
|
||||||
|
int m_LastReceivedSnapshotGroup = 0;
|
||||||
int readBuffer();
|
int readBuffer();
|
||||||
|
void readPartOfPacket();
|
||||||
PacketID m_SendPacketID = 0;
|
PacketID m_SendPacketID = 0;
|
||||||
|
//map:(packetGroup, vector:(pair:(groupIndex, packetData)))
|
||||||
|
PacketMap m_PacketSegmentMap;
|
||||||
|
bool hasReceivedPacket(int packetGroup, int groupIndex);
|
||||||
|
// 2^19
|
||||||
|
const int m_SizeOfSocketBuffer = 524288;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "NetworkServer.h"
|
#include "NetworkServer.h"
|
||||||
#include <boost/asio/ip/udp.hpp>
|
#include <boost/asio/ip/udp.hpp>
|
||||||
|
#define MAXPACKETSIZE 64000
|
||||||
|
|
||||||
class UDPServer : public NetworkServer
|
class UDPServer : public NetworkServer
|
||||||
{
|
{
|
||||||
@@ -13,6 +14,7 @@ public:
|
|||||||
void AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers);
|
void AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers);
|
||||||
void Receive(Packet & packet, PlayerDefinition & playerDefinition);
|
void Receive(Packet & packet, PlayerDefinition & playerDefinition);
|
||||||
void Send(Packet & packet, PlayerDefinition & playerDefinition);
|
void Send(Packet & packet, PlayerDefinition & playerDefinition);
|
||||||
|
void SendToConnectedPlayers(Packet & packet, std::map<PlayerID, PlayerDefinition>& playersTosendTo);
|
||||||
void Send(Packet & packet);
|
void Send(Packet & packet);
|
||||||
void Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint);
|
void Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint);
|
||||||
void Broadcast(Packet & packet, int port);
|
void Broadcast(Packet & packet, int port);
|
||||||
|
|||||||
@@ -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"];
|
||||||
|
|||||||
@@ -33,12 +33,14 @@ public:
|
|||||||
if (m_Quality == 0) {
|
if (m_Quality == 0) {
|
||||||
return m_BlackTexture->m_Texture;
|
return m_BlackTexture->m_Texture;
|
||||||
} else {
|
} else {
|
||||||
return m_GaussianTexture_vert;
|
return m_FinalGaussianTexture;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void GaussianLodPass(GLuint mipMap, GLuint texture);
|
||||||
|
void CombineGaussianBlur();
|
||||||
Texture* m_BlackTexture;
|
Texture* m_BlackTexture;
|
||||||
Model* m_ScreenQuad;
|
Model* m_ScreenQuad;
|
||||||
|
|
||||||
@@ -47,15 +49,19 @@ private:
|
|||||||
//const LightCullingPass* m_LightCullingPass
|
//const LightCullingPass* m_LightCullingPass
|
||||||
int m_Iterations;
|
int m_Iterations;
|
||||||
int m_Quality = 0;
|
int m_Quality = 0;
|
||||||
|
int m_BloomLod = 5;
|
||||||
|
|
||||||
GLuint m_GaussianTexture_horiz = 0;
|
GLuint m_GaussianTexture_horiz = 0;
|
||||||
GLuint m_GaussianTexture_vert = 0;
|
GLuint m_GaussianTexture_vert = 0;
|
||||||
|
GLuint m_FinalGaussianTexture = 0;
|
||||||
|
|
||||||
FrameBuffer m_GaussianFrameBuffer_horiz;
|
FrameBuffer* m_GaussianFrameBuffer_horiz = nullptr;
|
||||||
FrameBuffer m_GaussianFrameBuffer_vert;
|
FrameBuffer* m_GaussianFrameBuffer_vert = nullptr;
|
||||||
|
FrameBuffer m_GaussianCombineBuffer;
|
||||||
|
|
||||||
ShaderProgram* m_GaussianProgram_horiz;
|
ShaderProgram* m_GaussianProgram_horiz;
|
||||||
ShaderProgram* m_GaussianProgram_vert;
|
ShaderProgram* m_GaussianProgram_vert;
|
||||||
|
ShaderProgram* m_GaussianCombineProgram;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef EResolutionChanged_h__
|
||||||
|
#define EResolutionChanged_h__
|
||||||
|
|
||||||
|
#include "../Core/Event.h"
|
||||||
|
#include "../Core/Util/Rectangle.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
// Fired when the framebuffer size changes
|
||||||
|
struct ResolutionChanged : Event
|
||||||
|
{
|
||||||
|
Rectangle OldResolution;
|
||||||
|
Rectangle NewResolution;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -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,11 +7,13 @@
|
|||||||
class BufferResource
|
class BufferResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BufferResource(GLuint* resourceHandle, GLenum resourceType, GLenum attachment);
|
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;
|
||||||
|
bool m_MultiSampling = false;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -20,24 +22,33 @@ template <GLenum RESOURCETYPE>
|
|||||||
class ResourceType : public BufferResource
|
class ResourceType : public BufferResource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ResourceType(GLuint* resourceHandle, GLenum attachment)
|
ResourceType(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod, bool multiSampling)
|
||||||
: BufferResource(resourceHandle, RESOURCETYPE, attachment) { }
|
: 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)
|
Texture2D(GLuint* resourceHandle, GLenum attachment, GLuint mipMapLod = 0)
|
||||||
: ResourceType(resourceHandle, attachment) { };
|
: 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)
|
: ResourceType(resourceHandle, attachment, 0, multiSampling)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
~RenderBuffer();
|
~RenderBuffer();
|
||||||
@@ -47,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)
|
: ResourceType(resourceHandle, attachment, 0, false)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
~Texture2DArray();
|
~Texture2DArray();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -64,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,
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ private:
|
|||||||
struct Frustum {
|
struct Frustum {
|
||||||
Plane Planes[4];
|
Plane Planes[4];
|
||||||
};
|
};
|
||||||
Frustum* m_Frustums;
|
Frustum* m_Frustums = nullptr;
|
||||||
|
|
||||||
//This should be a component
|
//This should be a component
|
||||||
struct LightSource {
|
struct LightSource {
|
||||||
@@ -74,11 +74,11 @@ private:
|
|||||||
glm::vec2 Padding = glm::vec2(1.f, 2.f);
|
glm::vec2 Padding = glm::vec2(1.f, 2.f);
|
||||||
};
|
};
|
||||||
|
|
||||||
LightGrid* m_LightGrid;
|
LightGrid* m_LightGrid = nullptr;
|
||||||
|
|
||||||
int m_LightOffset = 0;
|
int m_LightOffset = 0;
|
||||||
|
|
||||||
float* m_LightIndex;
|
float* m_LightIndex = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -26,24 +26,13 @@ struct ModelJob : RenderJob
|
|||||||
ModelID = model->ResourceID;
|
ModelID = model->ResourceID;
|
||||||
Type = matProp.type;
|
Type = matProp.type;
|
||||||
::RawModel::MaterialBasic* matGroup = matProp.material;
|
::RawModel::MaterialBasic* matGroup = matProp.material;
|
||||||
|
ShaderID = matProp.ShaderID;
|
||||||
switch(matProp.type){
|
switch(matProp.type){
|
||||||
case ::RawModel::MaterialType::Basic:
|
case ::RawModel::MaterialType::Basic:
|
||||||
if (Model->IsSkinned()) {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
TextureID = 0;
|
TextureID = 0;
|
||||||
break;
|
break;
|
||||||
case ::RawModel::MaterialType::SingleTextures:
|
case ::RawModel::MaterialType::SingleTextures:
|
||||||
{
|
{
|
||||||
if (Model->IsSkinned()) {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
::RawModel::MaterialSingleTextures* singleTextures = static_cast<::RawModel::MaterialSingleTextures*>(matProp.material);
|
::RawModel::MaterialSingleTextures* singleTextures = static_cast<::RawModel::MaterialSingleTextures*>(matProp.material);
|
||||||
TextureID = (singleTextures->ColorMap.Texture) ? singleTextures->ColorMap.Texture->ResourceID : 0;
|
TextureID = (singleTextures->ColorMap.Texture) ? singleTextures->ColorMap.Texture->ResourceID : 0;
|
||||||
if (modelComponent["DiffuseTexture"]) {
|
if (modelComponent["DiffuseTexture"]) {
|
||||||
@@ -65,12 +54,6 @@ struct ModelJob : RenderJob
|
|||||||
break;
|
break;
|
||||||
case ::RawModel::MaterialType::SplatMapping:
|
case ::RawModel::MaterialType::SplatMapping:
|
||||||
{
|
{
|
||||||
if (Model->IsSkinned()) {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapSkinnedProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapProgram")->ResourceID;
|
|
||||||
}
|
|
||||||
::RawModel::MaterialSplatMapping* SplatTextures = static_cast<::RawModel::MaterialSplatMapping*>(matProp.material);
|
::RawModel::MaterialSplatMapping* SplatTextures = static_cast<::RawModel::MaterialSplatMapping*>(matProp.material);
|
||||||
|
|
||||||
SplatMap = &SplatTextures->SplatMap;
|
SplatMap = &SplatTextures->SplatMap;
|
||||||
|
|||||||
@@ -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"];
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
|
||||||
#include "boost\endian\buffers.hpp"
|
#include "boost\endian\buffers.hpp"
|
||||||
|
|
||||||
@@ -87,6 +88,7 @@ public:
|
|||||||
struct MaterialProperties {
|
struct MaterialProperties {
|
||||||
MaterialType type;
|
MaterialType type;
|
||||||
MaterialBasic* material;
|
MaterialBasic* material;
|
||||||
|
unsigned int ShaderID = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Vertex* Vertices() const {
|
const Vertex* Vertices() const {
|
||||||
|
|||||||
@@ -14,11 +14,12 @@
|
|||||||
#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"
|
||||||
#include "../Core/ConfigFile.h"
|
#include "../Core/ConfigFile.h"
|
||||||
|
#include "EResolutionChanged.h"
|
||||||
|
|
||||||
class RenderSystem : public ImpureSystem
|
class RenderSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
@@ -36,6 +37,8 @@ private:
|
|||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
Octree<EntityAABB>* m_Octree;
|
Octree<EntityAABB>* m_Octree;
|
||||||
|
|
||||||
|
EventRelay<RenderSystem, Events::ResolutionChanged> m_EResolutionChanged;
|
||||||
|
bool OnResolutionChanged(Events::ResolutionChanged &event);
|
||||||
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
||||||
bool OnSetCamera(Events::SetCamera &event);
|
bool OnSetCamera(Events::SetCamera &event);
|
||||||
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
||||||
|
|||||||
@@ -22,16 +22,18 @@
|
|||||||
#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"
|
||||||
#include "Core/PerformanceTimer.h"
|
#include "Core/PerformanceTimer.h"
|
||||||
#include "ShadowPass.h"
|
#include "ShadowPass.h"
|
||||||
|
#include "EResolutionChanged.h"
|
||||||
|
|
||||||
class Renderer : public IRenderer
|
class Renderer : public IRenderer
|
||||||
{
|
{
|
||||||
static void glfwFrameBufferCallback(GLFWwindow* window, int width, int height);
|
static void glfwFrameBufferCallback(GLFWwindow* window, int width, int height);
|
||||||
|
static void glfwWindowSizeCallback(GLFWwindow* window, int width, int height);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Renderer(EventBroker* eventBroker, ConfigFile* config)
|
Renderer(EventBroker* eventBroker, ConfigFile* config)
|
||||||
@@ -40,13 +42,14 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
~Renderer();
|
~Renderer();
|
||||||
|
|
||||||
|
virtual void SetResolution(const Rectangle& resolution) override;
|
||||||
|
|
||||||
virtual void Initialize() override;
|
virtual void Initialize() override;
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
virtual void Draw(RenderFrame& frame) override;
|
virtual void Draw(RenderFrame& frame) override;
|
||||||
|
|
||||||
virtual PickData Pick(glm::vec2 screenCoord) override;
|
virtual PickData Pick(glm::vec2 screenCoord) override;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//----------------------Variables----------------------//
|
//----------------------Variables----------------------//
|
||||||
|
|
||||||
@@ -68,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;
|
||||||
@@ -90,11 +94,14 @@ private:
|
|||||||
void InputUpdate(double dt);
|
void InputUpdate(double dt);
|
||||||
//void PickingPass(RenderQueueCollection& rq);
|
//void PickingPass(RenderQueueCollection& rq);
|
||||||
//void DrawScreenQuad(GLuint textureToDraw);
|
//void DrawScreenQuad(GLuint textureToDraw);
|
||||||
|
void setWindowSize(Rectangle size);
|
||||||
|
void updateFramebufferSize();
|
||||||
|
|
||||||
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
||||||
void SortRenderJobsByDepth(RenderScene &scene);
|
void SortRenderJobsByDepth(RenderScene &scene);
|
||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
||||||
//--------------------ShaderPrograms-------------------//
|
|
||||||
|
//--------------------ShaderPrograms-------------------//
|
||||||
ShaderProgram* m_BasicForwardProgram;
|
ShaderProgram* m_BasicForwardProgram;
|
||||||
ShaderProgram* m_ExplosionEffectProgram;
|
ShaderProgram* m_ExplosionEffectProgram;
|
||||||
|
|
||||||
|
|||||||
@@ -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,14 +21,16 @@ 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>("Models/Core/UnitQuad.mesh");
|
Model = ResourceManager::Load<::Model>((std::string)cSprite["Model"]);
|
||||||
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
|
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
|
||||||
TextureID = 0;
|
TextureID = 0;
|
||||||
|
|
||||||
DiffuseTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["DiffuseTexture"]);
|
DiffuseTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["DiffuseTexture"]);
|
||||||
|
|
||||||
IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]);
|
IncandescenceTexture = CommonFunctions::TryLoadResource<TextureSprite, true>(cSprite["GlowMap"]);
|
||||||
|
|
||||||
|
Linear = (bool)cSprite["Linear"];
|
||||||
|
ClampToBorder = (bool)cSprite["ClampToBorder"];
|
||||||
|
|
||||||
StartIndex = matProp.material->StartIndex;
|
StartIndex = matProp.material->StartIndex;
|
||||||
EndIndex = matProp.material->EndIndex;
|
EndIndex = matProp.material->EndIndex;
|
||||||
Matrix = matrix;
|
Matrix = matrix;
|
||||||
@@ -36,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));
|
||||||
@@ -48,6 +50,26 @@ struct SpriteJob : RenderJob
|
|||||||
|
|
||||||
FillColor = fillColor;
|
FillColor = fillColor;
|
||||||
FillPercentage = fillPercentage;
|
FillPercentage = fillPercentage;
|
||||||
|
|
||||||
|
glm::vec3 scale = TransformSystem::AbsoluteScale(world, cSprite.EntityID);
|
||||||
|
|
||||||
|
if((bool)cSprite["KeepRatio"] == true) {
|
||||||
|
if(scale.y >= scale.x) {
|
||||||
|
ScaleY = (scale.x)/(scale.y);
|
||||||
|
ScaleX = 1.f;
|
||||||
|
} else {
|
||||||
|
ScaleY = 1.f;
|
||||||
|
ScaleX = (scale.x)/(scale.y);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((bool)cSprite["KeepRatioX"] == true) {
|
||||||
|
ScaleX = scale.x;
|
||||||
|
}
|
||||||
|
if ((bool)cSprite["KeepRatioY"] == true) {
|
||||||
|
ScaleY = scale.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int TextureID;
|
unsigned int TextureID;
|
||||||
@@ -69,6 +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 ScaleY = 1;
|
||||||
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,11 @@ inline bool _GLERROR(const char* info, const char* file, const char* func, unsig
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
#define GLERROR(function) \
|
#define GLERROR(function) \
|
||||||
_GLERROR(function, __BASE_FILE__, __func__, __LINE__)
|
_GLERROR(function, __BASE_FILE__, __func__, __LINE__)
|
||||||
|
#else
|
||||||
|
#define GLERROR(function) false
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -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,19 @@ 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);
|
||||||
|
|
||||||
// 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 +103,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 +113,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 +125,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 +137,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"
|
||||||
|
|||||||
@@ -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,9 @@ 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);
|
||||||
|
|
||||||
bool m_WinnerWasFound = false;
|
bool m_WinnerWasFound = false;
|
||||||
//need to track these variables for the captureSystem to work as per design!
|
//need to track these variables for the captureSystem to work as per design!
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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"];
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
#include "Core/Event.h"
|
#include "Core/Event.h"
|
||||||
#include "Systems/SpawnerSystem.h"
|
#include "Systems/SpawnerSystem.h"
|
||||||
|
|
||||||
|
|
||||||
#include "GUI/EButtonClicked.h"
|
#include "GUI/EButtonClicked.h"
|
||||||
#include "GUI/EButtonPressed.h"
|
#include "GUI/EButtonPressed.h"
|
||||||
#include "GUI/EButtonReleased.h"
|
#include "GUI/EButtonReleased.h"
|
||||||
@@ -24,6 +23,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
|
void OpenSubMenu(const Events::InputCommand& e);
|
||||||
|
void OpenDropDown(const Events::InputCommand& e);
|
||||||
|
|
||||||
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
|
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
|
||||||
bool OnButtonClick(const Events::ButtonClicked& e);
|
bool OnButtonClick(const Events::ButtonClicked& e);
|
||||||
@@ -36,6 +37,7 @@ private:
|
|||||||
|
|
||||||
std::string m_CurrentCommand = "";
|
std::string m_CurrentCommand = "";
|
||||||
EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid;
|
EntityWrapper m_OpenSubMenu = EntityWrapper::Invalid;
|
||||||
|
EntityWrapper m_DropDown = EntityWrapper::Invalid;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ private:
|
|||||||
// Used to track afterimages for sprint effect.
|
// Used to track afterimages for sprint effect.
|
||||||
float m_SprintEffectTimer;
|
float m_SprintEffectTimer;
|
||||||
// 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);
|
||||||
|
|
||||||
|
|||||||
@@ -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,7 +6,7 @@
|
|||||||
#include "GLM.h"
|
#include "GLM.h"
|
||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Events/ESpawnerSpawn.h"
|
#include "Events/ESpawnerSpawn.h"
|
||||||
#include "Core/Transform.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
|
|
||||||
class SpawnerSystem : public System
|
class SpawnerSystem : public System
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
#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"
|
||||||
|
|
||||||
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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]
|
||||||
@@ -84,4 +85,7 @@ NumIterations=5
|
|||||||
NumIterations=9
|
NumIterations=9
|
||||||
|
|
||||||
[GLOW3]
|
[GLOW3]
|
||||||
NumIterations=13
|
NumIterations=13
|
||||||
|
|
||||||
|
[MSAA]
|
||||||
|
Level = 0;
|
||||||
|
|||||||
@@ -68,4 +68,6 @@
|
|||||||
<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/ConfigBtnResolution.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd">
|
<Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd">
|
||||||
<FOV>45</FOV>
|
<FOV>59</FOV> <!-- 90 horizontal FOV at 1080p -->
|
||||||
<NearClip>0.01</NearClip>
|
<NearClip>0.01</NearClip>
|
||||||
<FarClip>5000</FarClip>
|
<FarClip>5000</FarClip>
|
||||||
</Camera>
|
</Camera>
|
||||||
@@ -2,4 +2,5 @@
|
|||||||
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
|
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
|
||||||
<RespawnTime>0.0</RespawnTime>
|
<RespawnTime>0.0</RespawnTime>
|
||||||
<MaxRespawnTime>8.0</MaxRespawnTime>
|
<MaxRespawnTime>8.0</MaxRespawnTime>
|
||||||
|
<ResetCountdown>10.0</ResetCountdown>
|
||||||
</CapturePointGameMode>
|
</CapturePointGameMode>
|
||||||
@@ -12,6 +12,9 @@
|
|||||||
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
|
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="ResetCountdown" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The map will be reset when time reaches 0.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<ConfigBtnFloat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ConfigBtnFloat.xsd">
|
||||||
|
<Header></Header>
|
||||||
|
<Field></Field>
|
||||||
|
<PressValue></PressValue>
|
||||||
|
</ConfigBtnFloat>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?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="ConfigBtnFloat">
|
||||||
|
<xs:annotation><xs:documentation>Used with a Button component, this button will change a variable in the config file.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Header" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The header of the section in config.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Field" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The name of the field to be changed in the config.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PressValue" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The value to give the field.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<ConfigBtnResolution xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ConfigBtnResolution.xsd">
|
||||||
|
<Header></Header>
|
||||||
|
<Field></Field>
|
||||||
|
<PressValue></PressValue>
|
||||||
|
</ConfigBtnResolution>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?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="ConfigBtnResolution">
|
||||||
|
<xs:annotation><xs:documentation>Used with a Button component, this button will change a variable in the config file.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Width" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Value of the resolution width.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Height" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Value of the resolution height.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</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>
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
<SpecularMap>true</SpecularMap>
|
<SpecularMap>true</SpecularMap>
|
||||||
<GlowMap>true</GlowMap>
|
<GlowMap>true</GlowMap>
|
||||||
<Shadow>true</Shadow>
|
<Shadow>true</Shadow>
|
||||||
<GlowIntensity>3.0</GlowIntensity>
|
<GlowIntensity>1.0</GlowIntensity>
|
||||||
</Model>
|
</Model>
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
<Gain>1.0</Gain>
|
<Gain>1.0</Gain>
|
||||||
<Pitch>1.0</Pitch>
|
<Pitch>1.0</Pitch>
|
||||||
<Loop>false</Loop>
|
<Loop>false</Loop>
|
||||||
<MaxDistance>20.0</MaxDistance>
|
<MaxDistance>220.0</MaxDistance>
|
||||||
<RollOffFactor>1.0</RollOffFactor>
|
<RollOffFactor>10</RollOffFactor>
|
||||||
<ReferenceDistance>1.0</ReferenceDistance>
|
<ReferenceDistance>1.0</ReferenceDistance>
|
||||||
</SoundEmitter>
|
</SoundEmitter>
|
||||||
@@ -1,9 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Sprite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Sprite.xsd">
|
<Sprite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Sprite.xsd">
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<DiffuseTexture></DiffuseTexture>
|
<DiffuseTexture></DiffuseTexture>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
<Color R="1" G="1" B="1" A="1"/>
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
<Visible>true</Visible>
|
<Visible>true</Visible>
|
||||||
<DepthSort>true</DepthSort>
|
<DepthSort>true</DepthSort>
|
||||||
|
<KeepRatioX>false</KeepRatioX>
|
||||||
|
<KeepRatioY>false</KeepRatioY>
|
||||||
|
<KeepRatio>false</KeepRatio>
|
||||||
|
<Linear>true</Linear>
|
||||||
|
<ClampToBorder>false</ClampToBorder>
|
||||||
<BlurBackground>false</BlurBackground>
|
<BlurBackground>false</BlurBackground>
|
||||||
</Sprite>
|
</Sprite>
|
||||||
|
|||||||
@@ -9,14 +9,17 @@
|
|||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
|
<xs:element name="Model" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The model the sprite will use.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="DiffuseTexture" type="t:string" minOccurs="0">
|
<xs:element name="DiffuseTexture" type="t:string" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Diffuse Texture file</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Diffuse Texture file.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="GlowMap" type="t:string" minOccurs="0">
|
<xs:element name="GlowMap" type="t:string" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>GlowMap file</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>GlowMap file.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="Color" type="t:Color" minOccurs="0">
|
<xs:element name="Color" type="t:Color" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Color tint</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Color tint.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="Visible" type="t:bool" minOccurs="0">
|
<xs:element name="Visible" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Whether the model is visible or not</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Whether the model is visible or not</xs:documentation></xs:annotation>
|
||||||
@@ -24,6 +27,21 @@
|
|||||||
<xs:element name="DepthSort" type="t:bool" minOccurs="0">
|
<xs:element name="DepthSort" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Whether the sprite should be sorted with depth or not. Only use false for textures that are on HUD</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Whether the sprite should be sorted with depth or not. Only use false for textures that are on HUD</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="KeepRatioX" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Wether the sprite should repeat in x instead of stretch when scaled.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="KeepRatioY" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Wether the sprite should repeat in y instead of stretch when scaled.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="KeepRatio" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Keep a 1:1 ratio between X and Y.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<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: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>
|
||||||
|
|||||||
@@ -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/>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+11584
-6469
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,126 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="BlueCapturepointBorde" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.271661639" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Bottom">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>3</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-8.74227801e-09" Z="-0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.392156869" B="10" G="0.784313738" R="0"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.5" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LowerMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>2</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025388" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.313725501" B="10" G="0.784313738" R="0"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.899999976" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="UpperMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025463" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.196078435" B="10" G="0.784313738" R="0"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.29999995" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Top">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.117647059" B="10" G="0.784313738" R="0"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.70000005" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="RedCapturepointBorde" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.271661639" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Bottom">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>3</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-8.74227801e-09" Z="-0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.392156869" B="0" G="0.235294119" R="21.9607849"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.5" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LowerMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>2</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025388" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.313725501" B="0" G="0.235294119" R="21.9607849"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.899999976" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="UpperMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025463" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.196078435" B="0" G="0.235294119" R="21.9607849"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.29999995" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Top">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.117647059" B="0" G="0.235294119" R="21.9607849"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.70000005" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="SpectatorCapturepointBorde" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.271661639" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Bottom">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>3</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-8.74227801e-09" Z="-0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.392156869" B="8.03921604" G="8.03921604" R="8.03921604"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.5" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LowerMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>2</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025388" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.313725501" B="10" G="8.03921604" R="8.03921604"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.899999976" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="UpperMid">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0866025463" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.196078435" B="8.03921604" G="8.03921604" R="8.03921604"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.29999995" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Top">
|
||||||
|
<Components>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>6</Period>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.10000000149011612</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/DoubleSidedCylinder.mesh</Resource>
|
||||||
|
<Color A="0.117647059" B="8.03921604" G="8.03921604" R="8.03921604"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.70000005" Z="0"/>
|
||||||
|
<Scale X="8.19999981" Y="0.0199999996" Z="8.19999981"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Anchor1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.30000001192092896</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>30</Period>
|
||||||
|
<Time>342.91836260588383</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.47803104" Z="0"/>
|
||||||
|
<Orientation X="0" Y="220.263962" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer1.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="0.392156869" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor2">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>20</Period>
|
||||||
|
<Time>448.85134971162591</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.05921149" Z="0"/>
|
||||||
|
<Orientation X="0" Y="360.699402" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer2.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="0.392156869" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor0">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="-1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>10</Period>
|
||||||
|
<Time>495.36799589902654</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0.11458683" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="-68.9721527" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CenterCrystal.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="0.392156869" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LightOrigin1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Axis X="0.400000006" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="16.781414" Y="41.9535484" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.1234858" Y="0.720658064" Z="3.40589333"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.4723185" Y="0" Z="-4.12240839"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.91954184" Y="1.54033804" Z="-0.0577439293"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.48998797" Y="-3.06706786" Z="-1.78805089"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,174 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="14.8518229" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Anchor1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.30000001192092896</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>30</Period>
|
||||||
|
<Time>1125.9779108477385</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0.711852849" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="455.182343" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer1.mesh</Resource>
|
||||||
|
<Color A="1" B="2" G="0.784313738" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor2">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>20</Period>
|
||||||
|
<Time>1231.9108979534806</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-1.69476664" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="752.229553" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer2.mesh</Resource>
|
||||||
|
<Color A="1" B="2" G="0.784313738" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor0">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="-1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>10</Period>
|
||||||
|
<Time>1278.4275441408811</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0.417467505" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="-147.27742" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CenterCrystal.mesh</Resource>
|
||||||
|
<Color A="1" B="2" G="0.784313738" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LightOrigin1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Axis X="0.400000006" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="330.00589" Y="825.014587" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.1234858" Y="0.720658064" Z="3.40589333"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.4723185" Y="0" Z="-4.12240839"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.91954184" Y="1.54033804" Z="-0.0577439293"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.588235319" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.48998797" Y="-3.06706786" Z="-1.78805089"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="14.8518229" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Anchor1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.30000001192092896</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>30</Period>
|
||||||
|
<Time>1816.9423460293749</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-1.38488328" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="662.475891" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer1.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0.235294119" R="1.09803927"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor2">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>20</Period>
|
||||||
|
<Time>1922.875333135117</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.35616231" Z="0"/>
|
||||||
|
<Orientation X="0" Y="1097.71094" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer2.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0.235294119" R="1.09803927"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor0">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="-1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>10</Period>
|
||||||
|
<Time>1969.3919793225175</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0.186382934" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="-216.374603" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CenterCrystal.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0.235294119" R="1.09803927"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0" Z="-0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LightOrigin1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Axis X="0.400000006" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="606.394653" Y="1515.97461" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.1234858" Y="0.720658064" Z="3.40589333"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.4723185" Y="0" Z="-4.12240839"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.91954184" Y="1.54033804" Z="-0.0577439293"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.48998797" Y="-3.06706786" Z="-1.78805089"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,167 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="14.8518229" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Anchor1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.30000001192092896</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>30</Period>
|
||||||
|
<Time>1622.3711487379048</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.66753078" Z="0"/>
|
||||||
|
<Orientation X="0" Y="604.103943" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer1.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor2">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>20</Period>
|
||||||
|
<Time>1728.3041358436469</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.5237397" Z="0"/>
|
||||||
|
<Orientation X="0" Y="1000.42615" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer2.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor0">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="-1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>10</Period>
|
||||||
|
<Time>1774.8207820310474</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0561612286" Z="0"/>
|
||||||
|
<Orientation X="0" Y="-196.917053" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CenterCrystal.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-0" Z="-0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LightOrigin1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Axis X="0.400000006" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="528.564453" Y="1321.40454" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.1234858" Y="0.720658064" Z="3.40589333"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.4723185" Y="0" Z="-4.12240839"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.91954184" Y="1.54033804" Z="-0.0577439293"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.48998797" Y="-3.06706786" Z="-1.78805089"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="7.3052454" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Anchor0">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.20000000298023224</Speed>
|
||||||
|
<Axis X="0" Y="-1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>10</Period>
|
||||||
|
<Time>1323.7395571102679</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>0.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.355862439" Z="0"/>
|
||||||
|
<Orientation X="0" Y="-363.932587" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CenterCrystalBlue.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="LightOrigin1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Axis X="0.400000006" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="348.130463" Y="870.325134" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.1234858" Y="0.720658064" Z="3.40589333"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.4723185" Y="0" Z="-4.12240839"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.91954184" Y="1.54033804" Z="-0.0577439293"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>4.5</Radius>
|
||||||
|
<Falloff>0.5</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.48998797" Y="-3.06706786" Z="-1.78805089"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor1">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>30</Period>
|
||||||
|
<Time>1171.2899238171258</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3.5</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.93411696" Z="0"/>
|
||||||
|
<Orientation X="0" Y="1483.0957" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer1Blue.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Anchor2">
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:FloatingEffect>
|
||||||
|
<Period>20</Period>
|
||||||
|
<Time>1277.2229109228683</Time>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
<Amplitude>3</Amplitude>
|
||||||
|
</c:FloatingEffect>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0" Y="-2.29767179" Z="-0"/>
|
||||||
|
<Orientation X="0" Y="2074.16089" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/CapturePoint/CrystalsLayer2Blue.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<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:HealthPickup/>
|
<c:HealthPickup/>
|
||||||
<c:Model>
|
<c:Trigger/>
|
||||||
<Resource>Models/Props/PickUps/HealthPickUp.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/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="1" 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.36800003" Z="0"/>
|
||||||
|
<Orientation X="0" Y="19005.3867" 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="18767.0273" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Trigger/>
|
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="MuzzleFlashBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.039999999105930328</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlaneRight">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneRight.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneUp">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneUp.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneDown">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneDown.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneLeft.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.039999999105930328</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlaneRight">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneRight.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneUp">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneUp.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneDown">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneDown.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneLeft.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="MuzzleFlashGay" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.039999999105930328</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlaneRight">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneRight.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone1Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone1Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone2Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone2Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneUp">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneUp.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneDown">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneDown.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneLeft.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="MuzzleFlashRed" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.039999999105930328</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlaneRight">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneRight.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneUp">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneUp.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneDown">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneDown.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneLeft.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
+8977
-6217
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