Compare commits
222 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b98bbbea8 | |||
| 80649ce51d | |||
| a4b0b108d4 | |||
| b7d93058b1 | |||
| 5d53fc74cb | |||
| ecc8d998cf | |||
| e3c0fb2178 | |||
| 090bd806ce | |||
| 3436ba6656 | |||
| fc3a3a8f2e | |||
| 3edc2f4819 | |||
| 9c3fa25834 | |||
| 3eaad275ba | |||
| 47ece6a5bf | |||
| 64df3fd7ad | |||
| 99d663d5a2 | |||
| 388fe7c259 | |||
| 46d7c8bea4 | |||
| c7099de9e4 | |||
| cb9dad5c67 | |||
| a8f2d0a8e6 | |||
| b7a7f7fd5e | |||
| 434ff1e7eb | |||
| e58b5ffd6f | |||
| 4557455e49 | |||
| c1f5cf65a7 | |||
| a8ad85b004 | |||
| 3ac8a5c7ef | |||
| ebd4c58c41 | |||
| 42cccfbac0 | |||
| e2674d915e | |||
| 2b55450c18 | |||
| 7ba0e4ea9d | |||
| d78a7e20e2 | |||
| 5b80ba4398 | |||
| 2187df080a | |||
| eec40b6519 | |||
| 177667eef5 | |||
| 1f047ea300 | |||
| e6472b9745 | |||
| 19ee66fc75 | |||
| 7675af1ef6 | |||
| 2507516a85 | |||
| 0398006fdc | |||
| dbafab2cef | |||
| 103fe98fe2 | |||
| 609f6619a6 | |||
| 03ea9bcf40 | |||
| d37b7c2277 | |||
| 1bd71931b8 | |||
| 0e95c5bb95 | |||
| b7fa7f9119 | |||
| 608e339172 | |||
| 3a8f7c5d03 | |||
| 1ff91a5c5d | |||
| 49802fed91 | |||
| 45991000ae | |||
| 778bbd13ca | |||
| 1616fb20d1 | |||
| 00b5a1771c | |||
| 86306b3132 | |||
| 66374b7ff9 | |||
| fe7c1dd808 | |||
| 118d61c711 | |||
| 4dd46e2e21 | |||
| 7e6d32aaec | |||
| 9426942988 | |||
| 2167b6f7b1 | |||
| bebdacabb4 | |||
| 66c8a17b17 | |||
| e3fbd2082c | |||
| 217c3fe55c | |||
| 0a21fe15dd | |||
| 011aa53bc0 | |||
| 714665f0a3 | |||
| 8466a282b7 | |||
| 80ad76c023 | |||
| c84d7ebb8f | |||
| ae13a2db6b | |||
| 984b8ad3e9 | |||
| f5ea4e06c7 | |||
| b1148c0c6c | |||
| 68332102ea | |||
| 6532e9896e | |||
| e24a0b127b | |||
| 00c585de3c | |||
| c0e160833c | |||
| cbb2ec2fd6 | |||
| c467d54d44 | |||
| 0e5810d39e | |||
| eba296196c | |||
| b2371f4a43 | |||
| f1c5df1418 | |||
| a5c1e34b8d | |||
| e55a399bad | |||
| 06b7052bf2 | |||
| 2dfcd3ad95 | |||
| 44924ea1f9 | |||
| 7943fc7ad6 | |||
| be331cb778 | |||
| a3494b92c8 | |||
| a72dc94d5d | |||
| c5f3bfc0cd | |||
| 98366ec038 | |||
| 398bc725b6 | |||
| 3e9ad7dc14 | |||
| fe36e8b423 | |||
| 8b86c73ecc | |||
| 8859f652b9 | |||
| c125f8c5f5 | |||
| a7bff92899 | |||
| bfcf7b240e | |||
| 73b8bff1f3 | |||
| ed1d203c72 | |||
| 1deb506fb2 | |||
| 8957b0b464 | |||
| f4983cf961 | |||
| 1210c91535 | |||
| ae3cab6cd1 | |||
| 2cd39c7188 | |||
| a9b19d9af1 | |||
| 9c1a638a41 | |||
| 96bc5db7bb | |||
| c8aeae2c96 | |||
| da81f21799 | |||
| cb7beae28c | |||
| ff6e2167d4 | |||
| 27d3ec4118 | |||
| 9d4441852c | |||
| 7ea26d10ee | |||
| 28e9ba1208 | |||
| 362378536e | |||
| 0e8b97dbba | |||
| 40c66f76ae | |||
| 13546aa3fc | |||
| 047a119e3f | |||
| d74ae4e411 | |||
| 050ce57e24 | |||
| 8005ca377c | |||
| f0c2fdead1 | |||
| afd0e69a8a | |||
| e1ca104fc9 | |||
| 6f8023b285 | |||
| b431a875f7 | |||
| 2cb4a307eb | |||
| 9c9d1eede6 | |||
| 6507efc0db | |||
| 96a3e68bf4 | |||
| 2d438060dd | |||
| a339c61f5b | |||
| 8b81ba9019 | |||
| 7af17049e9 | |||
| 85ba5552e9 | |||
| e9bbb5ed2a | |||
| 8b66d29adc | |||
| a9a19193ad | |||
| f84d1ac4a1 | |||
| d8a0e69ff0 | |||
| 1aefa1dec6 | |||
| 0a6653d079 | |||
| cdbc348cfa | |||
| 502a290d36 | |||
| 8422742a9e | |||
| c3f24f494d | |||
| 07ccb9c041 | |||
| e6f46b396e | |||
| cfba8efd24 | |||
| 5a6374f013 | |||
| 1ae2f3f5f3 | |||
| 25331ddd70 | |||
| 141c58005f | |||
| 1961c16fe2 | |||
| d32a483bb4 | |||
| e23ea78aeb | |||
| 4153a31e3a | |||
| 0908be1e02 | |||
| 2ed5fad699 | |||
| 70374fa10e | |||
| 20468cba1b | |||
| 5bc0483f49 | |||
| 7749fc5474 | |||
| 6dd7f1a657 | |||
| 144e548b7a | |||
| 14b0a64720 | |||
| 8647267cad | |||
| ecab5de056 | |||
| 38d8cdded2 | |||
| 22c391df54 | |||
| f220d8088c | |||
| 5c3b472a4d | |||
| af034673f6 | |||
| df2e4abb52 | |||
| 8867e7ac3c | |||
| 21ca3f5b38 | |||
| d9afb527a4 | |||
| c97d0d9381 | |||
| ad97f7f8a9 | |||
| c9c5e9841d | |||
| 606a9bf94f | |||
| 127edb4e60 | |||
| abd36c81f8 | |||
| 73a4336206 | |||
| f2ab02d860 | |||
| bf376f54b6 | |||
| 3c9c95cff4 | |||
| b81bb9eeea | |||
| 178402e964 | |||
| debb1881bf | |||
| db8bc612bd | |||
| e7118ce8e5 | |||
| 36043010af | |||
| cb77c1ff97 | |||
| 69db32337d | |||
| 6af167675d | |||
| ecd823cb9f | |||
| 847c539373 | |||
| cb7f06573f | |||
| 6542d1b444 | |||
| bbf6058c17 | |||
| 0e51ae7dc9 | |||
| c912cd7a42 | |||
| 7f1016476b |
+1
-1
Submodule assets updated: 72530423ad...52ea74c5d5
@@ -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;
|
||||||
@@ -44,7 +45,7 @@ public:
|
|||||||
|
|
||||||
ComponentPool(const ::ComponentInfo& ci)
|
ComponentPool(const ::ComponentInfo& ci)
|
||||||
: m_ComponentInfo(ci)
|
: m_ComponentInfo(ci)
|
||||||
, m_Pool(ci.Meta->Allocation, sizeof(EntityID) + ci.Stride)
|
, m_Pool(ci.Meta->Allocation, ci.GetHeaderSize() + ci.Stride)
|
||||||
{ }
|
{ }
|
||||||
~ComponentPool();
|
~ComponentPool();
|
||||||
ComponentPool(const ComponentPool& other);
|
ComponentPool(const ComponentPool& other);
|
||||||
@@ -61,8 +62,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 +81,7 @@ 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;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,46 +4,66 @@
|
|||||||
#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>
|
|
||||||
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)
|
||||||
: Info(componentInfo)
|
: Info(componentInfo)
|
||||||
, EntityID(*reinterpret_cast<::EntityID*>(data))
|
, EntityID(*reinterpret_cast<::EntityID*>(data))
|
||||||
, Data(data + sizeof(::EntityID))
|
, Data(data + componentInfo.GetHeaderSize())
|
||||||
|
, DirtyBitField(dirtyBitField)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
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);
|
return Info.Meta->FieldEnumDefinitions.at(fieldName).at(enumKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Dirty(DirtySetType type, const std::string& fieldName)
|
||||||
|
{
|
||||||
|
if (DirtyBitField == nullptr) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
auto& field = Info.Fields.at(fieldName);
|
||||||
|
return DirtyBitField->operator[](type).count(field.Index) == 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetDirty(DirtySetType type, const std::string& fieldName, bool dirty = true)
|
||||||
|
{
|
||||||
|
if (DirtyBitField == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& field = Info.Fields.at(fieldName);
|
||||||
|
if (dirty) {
|
||||||
|
DirtyBitField->operator[](type).insert(field.Index);
|
||||||
|
} else {
|
||||||
|
DirtyBitField->operator[](type).erase(field.Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetAllDirty(const std::string& fieldName, bool dirty = true)
|
||||||
|
{
|
||||||
|
LOG_DEBUG("DIRTY: %s %s", Info.Name.c_str(), fieldName.c_str());
|
||||||
|
for (auto& kv : *DirtyBitField) {
|
||||||
|
SetDirty(kv.first, fieldName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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 +75,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 +117,162 @@ 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;
|
||||||
|
|
||||||
|
// 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)
|
||||||
, 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
|
||||||
@@ -10,8 +10,9 @@ namespace Events
|
|||||||
struct PlayerDeath : Event
|
struct PlayerDeath : Event
|
||||||
{
|
{
|
||||||
//KilledBy,KilledByWhat is optional for now. It might be used later in the playerlog-system
|
//KilledBy,KilledByWhat is optional for now. It might be used later in the playerlog-system
|
||||||
EntityWrapper Player;
|
EntityWrapper Player = EntityWrapper::Invalid;
|
||||||
std::string KilledByWhat;
|
EntityWrapper Killer = EntityWrapper::Invalid;
|
||||||
|
std::string KilledByWhat = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ struct EntityWrapper
|
|||||||
bool HasComponent(const std::string& componentType);
|
bool HasComponent(const std::string& componentType);
|
||||||
void AttachComponent(const char* componentName);
|
void AttachComponent(const char* componentName);
|
||||||
EntityWrapper Parent();
|
EntityWrapper Parent();
|
||||||
|
EntityWrapper FirstParentByName(const std::string& parentEntityName);
|
||||||
EntityWrapper FirstChildByName(const std::string& name);
|
EntityWrapper FirstChildByName(const std::string& name);
|
||||||
|
EntityWrapper FirstLevelChildByName(const std::string& name);
|
||||||
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
||||||
EntityWrapper Clone(EntityWrapper parent = EntityWrapper::Invalid);
|
EntityWrapper Clone(EntityWrapper parent = EntityWrapper::Invalid);
|
||||||
std::vector<EntityWrapper> ChildrenWithComponent(const std::string& componentType);
|
std::vector<EntityWrapper> ChildrenWithComponent(const std::string& componentType);
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ protected:
|
|||||||
|
|
||||||
const std::string m_ComponentType;
|
const std::string m_ComponentType;
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) = 0;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImpureSystem : public virtual System
|
class ImpureSystem : public virtual System
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public:
|
|||||||
for (auto& pair : group.PureSystems) {
|
for (auto& pair : group.PureSystems) {
|
||||||
const std::string& componentName = pair.first;
|
const std::string& componentName = pair.first;
|
||||||
auto& systems = pair.second;
|
auto& systems = pair.second;
|
||||||
const ComponentPool* pool = m_World->GetComponents(componentName);
|
ComponentPool* pool = m_World->GetComponents(componentName);
|
||||||
if (pool == nullptr) {
|
if (pool == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ template <typename EventContext>
|
|||||||
class EditorCameraInputController : public FirstPersonInputController<EventContext>
|
class EditorCameraInputController : public FirstPersonInputController<EventContext>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorCameraInputController(EventBroker* eventBroker, unsigned int playerID)
|
EditorCameraInputController(EventBroker* eventBroker, unsigned int playerID, EntityWrapper playerEntity)
|
||||||
: FirstPersonInputController(eventBroker, playerID)
|
: FirstPersonInputController(eventBroker, playerID, playerEntity)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorCameraInputController::OnMousePress);
|
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorCameraInputController::OnMousePress);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &EditorCameraInputController::OnMouseRelease);
|
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &EditorCameraInputController::OnMouseRelease);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "../Core/ELockMouse.h"
|
#include "../Core/ELockMouse.h"
|
||||||
#include "../Core/EFileDropped.h"
|
#include "../Core/EFileDropped.h"
|
||||||
#include "../Rendering/Texture.h"
|
#include "../Rendering/Texture.h"
|
||||||
|
#include "Game/Events/ESpawnerSpawn.h"
|
||||||
|
|
||||||
class EditorGUI
|
class EditorGUI
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,12 +6,13 @@
|
|||||||
#include "../Core/ELockMouse.h"
|
#include "../Core/ELockMouse.h"
|
||||||
#include "../Game/Events/EDashAbility.h"
|
#include "../Game/Events/EDashAbility.h"
|
||||||
#include "InputHandler.h"
|
#include "InputHandler.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
class FirstPersonInputController : public InputController<EventContext>
|
class FirstPersonInputController : public InputController<EventContext>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FirstPersonInputController(EventBroker* eventBroker, int playerID);
|
FirstPersonInputController(EventBroker* eventBroker, int playerID, EntityWrapper playerEntity);
|
||||||
|
|
||||||
virtual const glm::vec3 Movement() const { return m_Movement; }
|
virtual const glm::vec3 Movement() const { return m_Movement; }
|
||||||
virtual const glm::vec3 Rotation() const { return m_Rotation; }
|
virtual const glm::vec3 Rotation() const { return m_Rotation; }
|
||||||
@@ -27,12 +28,15 @@ 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; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const int m_PlayerID;
|
const int m_PlayerID;
|
||||||
|
EntityWrapper m_PlayerEntity;
|
||||||
|
|
||||||
bool m_MouseLocked = false;
|
bool m_MouseLocked = false;
|
||||||
glm::vec3 m_Rotation;
|
glm::vec3 m_Rotation;
|
||||||
glm::vec3 m_Movement;
|
glm::vec3 m_Movement;
|
||||||
@@ -64,9 +68,10 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
FirstPersonInputController<EventContext>::FirstPersonInputController(EventBroker* eventBroker, int playerID)
|
FirstPersonInputController<EventContext>::FirstPersonInputController(EventBroker* eventBroker, int playerID, EntityWrapper playerEntity)
|
||||||
: InputController(eventBroker)
|
: InputController(eventBroker)
|
||||||
, m_PlayerID(playerID)
|
, m_PlayerID(playerID)
|
||||||
|
, m_PlayerEntity(playerEntity)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse);
|
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse);
|
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse);
|
||||||
@@ -117,13 +122,84 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
if (e.Command == "Forward") {
|
if (e.Command == "Forward") {
|
||||||
float val = glm::clamp(e.Value, -1.f, 1.f);
|
float val = glm::clamp(e.Value, -1.f, 1.f);
|
||||||
m_Movement.z = -val;
|
m_Movement.z = -val;
|
||||||
|
|
||||||
|
if (m_PlayerEntity.Valid()) {
|
||||||
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
|
if (playerModel.Valid()) {
|
||||||
|
if (val > 0) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
|
||||||
|
if(m_Crouching) {
|
||||||
|
aeb.NodeName = "Walk";
|
||||||
|
} else {
|
||||||
|
aeb.NodeName = "Run";
|
||||||
|
}
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
} else if (val < 0) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
if (m_Crouching) {
|
||||||
|
aeb.NodeName = "Walk";
|
||||||
|
} else {
|
||||||
|
aeb.NodeName = "Run";
|
||||||
|
}
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
aeb.Reverse = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (e.Command == "Right") {
|
if (e.Command == "Right") {
|
||||||
float val = glm::clamp(e.Value, -1.f, 1.f);
|
float val = glm::clamp(e.Value, -1.f, 1.f);
|
||||||
m_Movement.x = val;
|
m_Movement.x = val;
|
||||||
|
|
||||||
|
if (m_PlayerEntity.Valid()) {
|
||||||
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
|
|
||||||
|
if (playerModel.Valid()) {
|
||||||
|
if (val > 0) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
aeb.NodeName = "Right";
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
} else if (val < 0) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
aeb.NodeName = "Left";
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (glm::length2(m_Movement) > 0) {
|
if (glm::length2(m_Movement) > 0) {
|
||||||
m_Movement = glm::normalize(m_Movement);
|
m_Movement = glm::normalize(m_Movement);
|
||||||
|
} else {
|
||||||
|
if (m_PlayerEntity.Valid()) {
|
||||||
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
|
|
||||||
|
if (playerModel.Valid()) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.1;
|
||||||
|
aeb.NodeName = "Idle";
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,10 +221,10 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
if (m_NumberOfMovementKeysDown == 0) {
|
if (m_NumberOfMovementKeysDown == 0) {
|
||||||
m_MovementKeyDown = false;
|
m_MovementKeyDown = false;
|
||||||
}
|
}
|
||||||
//you have just released the key, store what key it was and reset the doubletap-sensitivity-timer
|
//you have just released the key, store what key it was and reset the doubletap-sensitivity-timer
|
||||||
m_AssaultDashTapDirection = m_CurrentDirectionVector;
|
m_AssaultDashTapDirection = m_CurrentDirectionVector;
|
||||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,21 +234,40 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
|
|
||||||
if (e.Command == "Crouch") {
|
if (e.Command == "Crouch") {
|
||||||
m_Crouching = e.Value > 0;
|
m_Crouching = e.Value > 0;
|
||||||
|
|
||||||
|
if (m_PlayerEntity.Valid()) {
|
||||||
|
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
|
||||||
|
if (playerModel.Valid()) {
|
||||||
|
if (e.Value == 0.f) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.3;
|
||||||
|
aeb.NodeName = "StandMovement";
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
aeb.Restart = true;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
} else if(e.Value == 1.0f) {
|
||||||
|
Events::AutoAnimationBlend aeb;
|
||||||
|
aeb.Duration = 0.3;
|
||||||
|
aeb.NodeName = "CrouchMovement";
|
||||||
|
aeb.RootNode = playerModel;
|
||||||
|
aeb.Start = true;
|
||||||
|
aeb.Restart = true;
|
||||||
|
aeb.SingleLevelBlend = true;
|
||||||
|
m_EventBroker->Publish(aeb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.Command == "SpecialAbility") {
|
if (e.Command == "SpecialAbility") {
|
||||||
if (e.Value > 0) {
|
m_SpecialAbilityKeyDown = e.Value > 0;
|
||||||
m_SpecialAbilityKeyDown = true;
|
|
||||||
} else {
|
|
||||||
m_SpecialAbilityKeyDown = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (m_SpecialAbilityKeyDown && m_MovementKeyDown) {
|
|
||||||
m_ShiftDashing = true;
|
|
||||||
} else {
|
|
||||||
m_ShiftDashing = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_ShiftDashing = m_SpecialAbilityKeyDown && m_MovementKeyDown;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +286,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;
|
||||||
m_DashEffectResetTimer += dt;
|
m_DashEffectResetTimer += dt;
|
||||||
assaultDashCoolDownTimer -= dt;
|
assaultDashCoolDownTimer -= dt;
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public:
|
|||||||
void Connect(std::string address, int port);
|
void Connect(std::string address, int port);
|
||||||
void Update() override;
|
void Update() 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();
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef Events_KillDeath_h__
|
||||||
|
#define Events_KillDeath_h__
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
typedef unsigned int PlayerID;
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct KillDeath : public Event
|
||||||
|
{
|
||||||
|
PlayerID Casualty = -1;
|
||||||
|
PlayerID Killer = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef Events_PlayerConnected
|
||||||
|
#define Events_PlayerConnected
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct PlayerConnected : public Event
|
||||||
|
{
|
||||||
|
std::string PlayerName = "";
|
||||||
|
int PlayerID = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif // !Events_PlayerConnected
|
||||||
|
|
||||||
@@ -24,7 +24,9 @@ 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)) {
|
||||||
LOG_WARNING("Packet AddPrimitive(): You are trying to add more than we have allocated for! New size is %i bytes\n", m_MaxPacketSize*2);
|
if (m_MaxPacketSize >= 32000) {
|
||||||
|
LOG_WARNING("Package::WritePrimitive(): New size is huge %i bytes\n", m_MaxPacketSize*2);
|
||||||
|
}
|
||||||
resizeData();
|
resizeData();
|
||||||
}
|
}
|
||||||
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
#include "Core/EEntityDeleted.h"
|
#include "Core/EEntityDeleted.h"
|
||||||
#include "Core/EComponentDeleted.h"
|
#include "Core/EComponentDeleted.h"
|
||||||
#include "Core/EAmmoPickup.h"
|
#include "Core/EAmmoPickup.h"
|
||||||
|
#include "Core/EPlayerDeath.h"
|
||||||
|
#include "Network/EPlayerConnected.h"
|
||||||
|
#include "Network/EKillDeath.h"
|
||||||
|
|
||||||
class Server : public Network
|
class Server : public Network
|
||||||
{
|
{
|
||||||
@@ -33,7 +36,7 @@ public:
|
|||||||
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;
|
||||||
@@ -77,7 +80,8 @@ private:
|
|||||||
void parseOnPlayerDamage(Packet& packet);
|
void parseOnPlayerDamage(Packet& packet);
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
void kick(PlayerID player);
|
void kick(PlayerID player);
|
||||||
PlayerID GetPlayerIDFromEndpoint();
|
PlayerID getPlayerIDFromEndpoint();
|
||||||
|
PlayerID getPlayerIDFromEntityID(EntityID entityID);
|
||||||
void parsePlayerTransform(Packet& packet);
|
void parsePlayerTransform(Packet& packet);
|
||||||
void parseOnInputCommand(Packet& packet);
|
void parseOnInputCommand(Packet& packet);
|
||||||
void parseClientPing();
|
void parseClientPing();
|
||||||
@@ -103,6 +107,8 @@ private:
|
|||||||
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
||||||
EventRelay<Server, Events::AmmoPickup> m_EAmmoPickup;
|
EventRelay<Server, Events::AmmoPickup> m_EAmmoPickup;
|
||||||
bool OnAmmoPickup(const Events::AmmoPickup& e);
|
bool OnAmmoPickup(const Events::AmmoPickup& e);
|
||||||
|
EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath;
|
||||||
|
bool OnPlayerDeath(const Events::PlayerDeath& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,27 +3,32 @@
|
|||||||
|
|
||||||
#include "GLM.h"
|
#include "GLM.h"
|
||||||
|
|
||||||
#include "Common.h"
|
#include "../Common.h"
|
||||||
#include "Core/System.h"
|
#include "../Core/System.h"
|
||||||
#include "Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
#include "Rendering/Model.h"
|
#include "Rendering/Model.h"
|
||||||
#include "Rendering/EAnimationComplete.h"
|
|
||||||
#include "Rendering/Skeleton.h"
|
#include "Rendering/Skeleton.h"
|
||||||
#include <imgui/imgui.h>
|
#include "Rendering/BlendTree.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
#include "Rendering/AutoBlendQueue.h"
|
||||||
|
#include "../Input/EInputCommand.h"
|
||||||
|
#include "imgui/imgui.h"
|
||||||
|
|
||||||
class AnimationSystem : public PureSystem
|
class AnimationSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AnimationSystem(SystemParams params)
|
AnimationSystem(SystemParams params);
|
||||||
: System(params)
|
|
||||||
, PureSystem("Animation")
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
~AnimationSystem() { }
|
~AnimationSystem() { }
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt) override;
|
virtual void Update(double dt) override;
|
||||||
private:
|
private:
|
||||||
|
void CreateBlendTrees();
|
||||||
|
void UpdateAnimations(double dt);
|
||||||
|
void UpdateWeights(double dt);
|
||||||
|
|
||||||
|
EventRelay<AnimationSystem, Events::AutoAnimationBlend> m_EAutoAnimationBlend;
|
||||||
|
bool OnAutoAnimationBlend(Events::AutoAnimationBlend& e);
|
||||||
|
std::unordered_map<EntityWrapper, AutoBlendQueue> m_AutoBlendQueues;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#ifndef AutoBlendQueue_h__
|
||||||
|
#define AutoBlendQueue_h__
|
||||||
|
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "Skeleton.h"
|
||||||
|
#include "Model.h"
|
||||||
|
#include "BlendTree.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
|
class AutoBlendQueue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct AutoBlendJob
|
||||||
|
{
|
||||||
|
EntityWrapper RootNode = EntityWrapper::Invalid;
|
||||||
|
double Duration;
|
||||||
|
double CurrentTime = 0.0;
|
||||||
|
double Delay = 0.0;
|
||||||
|
EntityWrapper AnimationEntity = EntityWrapper::Invalid;
|
||||||
|
BlendTree::AutoBlendInfo BlendInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AutoblendNode
|
||||||
|
{
|
||||||
|
AutoBlendJob BlendJob;
|
||||||
|
double StartTime;
|
||||||
|
double EndTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
AutoBlendQueue() { };
|
||||||
|
|
||||||
|
void Insert(AutoBlendJob autoBlendJob);
|
||||||
|
void UpdateTime(double dt);
|
||||||
|
|
||||||
|
void PrintQueue();
|
||||||
|
bool HasActiveBlendJob();
|
||||||
|
std::shared_ptr<BlendTree> GetBlendTree();
|
||||||
|
|
||||||
|
AutoBlendQueue::AutoBlendJob& GetActiveBlendJob();
|
||||||
|
private:
|
||||||
|
std::list<AutoblendNode> m_BlendQueue;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
#ifndef BlendTree_h__
|
||||||
|
#define BlendTree_h__
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "Skeleton.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
#include "../Core/World.h"
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
class BlendTree
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class NodeType
|
||||||
|
{
|
||||||
|
Additive,
|
||||||
|
Blend,
|
||||||
|
Override,
|
||||||
|
Animation,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct Node
|
||||||
|
{
|
||||||
|
std::string Name;
|
||||||
|
EntityWrapper Entity;
|
||||||
|
Node* Parent = nullptr;
|
||||||
|
Node* Child[2] = { nullptr, nullptr };
|
||||||
|
NodeType Type;
|
||||||
|
std::map<int, Skeleton::PoseData> Pose;
|
||||||
|
bool SubTreeRoot = false;
|
||||||
|
double Weight = 0.0;
|
||||||
|
|
||||||
|
Node* Next() {
|
||||||
|
Node* next = this;
|
||||||
|
|
||||||
|
if (next->Child[1] == nullptr) {
|
||||||
|
// Node has no right child
|
||||||
|
next = this;
|
||||||
|
while (next->Parent != nullptr && next == next->Parent->Child[1]) {
|
||||||
|
next = next->Parent;
|
||||||
|
}
|
||||||
|
next = next->Parent;
|
||||||
|
} else {
|
||||||
|
// Find the leftmost node in the right subtree
|
||||||
|
next = next->Child[1];
|
||||||
|
while (next->Child[0] != nullptr) {
|
||||||
|
next = next->Child[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return next;
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct AutoBlendInfo
|
||||||
|
{
|
||||||
|
std::string NodeName;
|
||||||
|
double progress;
|
||||||
|
bool Start;
|
||||||
|
bool SingleBlend;
|
||||||
|
double Weight;
|
||||||
|
std::unordered_map<EntityWrapper, double> StartWeights;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BlendTree(EntityWrapper ModelEntity, Skeleton* skeleton);
|
||||||
|
~BlendTree();
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<glm::mat4> GetFinalPose() { return m_FinalPose; }
|
||||||
|
glm::mat4 GetBoneTransform(int boneID);
|
||||||
|
bool IsValid() { return (m_Root == nullptr ? false : true); }
|
||||||
|
|
||||||
|
void PrintTree();
|
||||||
|
BlendTree::AutoBlendInfo AutoBlendStep(AutoBlendInfo blendInfo);
|
||||||
|
|
||||||
|
BlendTree::Node* GetCommonParent(std::string NodeName1, std::string NodeName2);
|
||||||
|
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
|
||||||
|
|
||||||
|
EntityWrapper GetSubTreeRoot(std::string nodeName);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Skeleton* m_Skeleton = nullptr;
|
||||||
|
Node* m_Root = nullptr;
|
||||||
|
|
||||||
|
std::vector<glm::mat4> m_FinalPose;
|
||||||
|
std::map<int, glm::mat4> m_FinalBoneTransforms;
|
||||||
|
|
||||||
|
std::vector<glm::mat4> AccumulateFinalPose();
|
||||||
|
BlendTree::Node* FillTreeByName(Node* parentNode, std::string name, EntityWrapper parentEntity);
|
||||||
|
std::vector<BlendTree::Node*> FindNodesByName(std::string name);
|
||||||
|
|
||||||
|
void Blend(std::map<int, Skeleton::PoseData>& pose);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
#include "Rendering/Model.h"
|
#include "Rendering/Model.h"
|
||||||
#include "Rendering/Skeleton.h"
|
#include "Rendering/Skeleton.h"
|
||||||
|
#include "Rendering/BlendTree.h"
|
||||||
|
|
||||||
//Needs to be a higher orderlevel than AnimationSystem
|
//Needs to be a higher orderlevel than AnimationSystem
|
||||||
class BoneAttachmentSystem : public PureSystem
|
class BoneAttachmentSystem : public PureSystem
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef Events_AutoAnimationBlend_h__
|
||||||
|
#define Events_AutoAnimationBlend_h__
|
||||||
|
|
||||||
|
#include "../Core/EventBroker.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct AutoAnimationBlend : Event
|
||||||
|
{
|
||||||
|
EntityWrapper RootNode = EntityWrapper::Invalid;
|
||||||
|
std::string NodeName;
|
||||||
|
double Duration = 0.0;
|
||||||
|
double Delay = 0.0;
|
||||||
|
|
||||||
|
bool Start = false;
|
||||||
|
bool Reverse = false;
|
||||||
|
bool Restart = false;
|
||||||
|
bool SingleLevelBlend = false;
|
||||||
|
|
||||||
|
double Weight = -1.0;
|
||||||
|
|
||||||
|
EntityWrapper AnimationEntity = EntityWrapper::Invalid;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -18,15 +18,15 @@ 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)
|
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded)
|
||||||
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded)
|
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded)
|
||||||
{
|
{
|
||||||
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"];
|
||||||
};
|
};
|
||||||
|
|
||||||
glm::vec3 ExplosionOrigin;
|
glm::vec3 ExplosionOrigin;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
#include "ShaderProgram.h"
|
#include "ShaderProgram.h"
|
||||||
|
#include "BlendTree.h"
|
||||||
|
|
||||||
struct ModelJob : RenderJob
|
struct ModelJob : RenderJob
|
||||||
{
|
{
|
||||||
@@ -123,32 +124,14 @@ struct ModelJob : RenderJob
|
|||||||
Skeleton = Model->m_RawModel->m_Skeleton;
|
Skeleton = Model->m_RawModel->m_Skeleton;
|
||||||
|
|
||||||
if (Skeleton != nullptr) {
|
if (Skeleton != nullptr) {
|
||||||
if (world->HasComponent(Entity, "Animation")) {
|
|
||||||
auto animationComponent = world->GetComponent(Entity, "Animation");
|
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
|
||||||
|
|
||||||
for (int i = 1; i <= 3; i++) {
|
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
|
||||||
::Skeleton::AnimationData animationData;
|
BlendTree = Skeleton->BlendTrees.at(entityWrapper);
|
||||||
animationData.animation = model->m_RawModel->m_Skeleton->GetAnimation(animationComponent["AnimationName" + std::to_string(i)]);
|
|
||||||
if (animationData.animation == nullptr) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
animationData.time = (double)animationComponent["Time" + std::to_string(i)];
|
|
||||||
animationData.weight = (double)animationComponent["Weight" + std::to_string(i)];
|
|
||||||
|
|
||||||
Animations.push_back(animationData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world->HasComponent(Entity, "AnimationOffset")) {
|
|
||||||
auto animationOffsetComponent = world->GetComponent(Entity, "AnimationOffset");
|
|
||||||
AnimationOffset.animation = model->m_RawModel->m_Skeleton->GetAnimation(animationOffsetComponent["AnimationName"]);
|
|
||||||
AnimationOffset.time = (double)animationOffsetComponent["Time"];
|
|
||||||
} else {
|
|
||||||
AnimationOffset.animation = nullptr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int TextureID;
|
unsigned int TextureID;
|
||||||
@@ -167,10 +150,7 @@ struct ModelJob : RenderJob
|
|||||||
glm::vec4 Color;
|
glm::vec4 Color;
|
||||||
const ::Model* Model = nullptr;
|
const ::Model* Model = nullptr;
|
||||||
::Skeleton* Skeleton = nullptr;
|
::Skeleton* Skeleton = nullptr;
|
||||||
std::vector<::Skeleton::AnimationData> Animations;
|
std::shared_ptr<::BlendTree> BlendTree = nullptr;
|
||||||
::Skeleton::AnimationOffset AnimationOffset;
|
|
||||||
|
|
||||||
|
|
||||||
float GlowIntensity = 8.0;
|
float GlowIntensity = 8.0;
|
||||||
glm::vec4 DiffuseColor;
|
glm::vec4 DiffuseColor;
|
||||||
glm::vec4 SpecularColor;
|
glm::vec4 SpecularColor;
|
||||||
|
|||||||
@@ -6,27 +6,9 @@
|
|||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include <glm/gtx/matrix_decompose.hpp>
|
#include <glm/gtx/matrix_decompose.hpp>
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
//struct Bone
|
class BlendTree;
|
||||||
//{
|
|
||||||
// Bone(std::string name, glm::mat4 offsetMatrix)
|
|
||||||
// : Name(name)
|
|
||||||
// , OffsetMatrix(offsetMatrix)
|
|
||||||
// { }
|
|
||||||
//
|
|
||||||
// ~Bone()
|
|
||||||
// {
|
|
||||||
// for (auto kv : Children) {
|
|
||||||
// delete kv.second;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// std::string Name;
|
|
||||||
// glm::mat4 OffsetMatrix;
|
|
||||||
// glm::mat4 LocalMatrix;
|
|
||||||
//
|
|
||||||
// std::map<std::string, Bone*> Children;
|
|
||||||
//};
|
|
||||||
|
|
||||||
class Skeleton
|
class Skeleton
|
||||||
{
|
{
|
||||||
@@ -68,58 +50,43 @@ public:
|
|||||||
std::map<int, std::vector<Keyframe>> JointAnimations;
|
std::map<int, std::vector<Keyframe>> JointAnimations;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AnimationData
|
struct PoseData {
|
||||||
{
|
glm::vec3 Translation;
|
||||||
const Animation* animation;
|
glm::quat Orientation;
|
||||||
float time;
|
glm::vec3 Scale;
|
||||||
float weight;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct JointFrameTransform {
|
|
||||||
glm::vec3 PositionInterp = glm::vec3(0);
|
|
||||||
glm::quat RotationInterp = glm::quat();
|
|
||||||
glm::vec3 ScaleInterp = glm::vec3(0);
|
|
||||||
float Weight;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AnimationOffset {
|
|
||||||
const Animation* animation;
|
|
||||||
float time;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Skeleton() { }
|
Skeleton() { }
|
||||||
~Skeleton();
|
~Skeleton();
|
||||||
|
|
||||||
Bone* RootBone;
|
Bone* RootBone;
|
||||||
|
|
||||||
std::map<int, Bone*> Bones;
|
std::map<int, Bone*> Bones;
|
||||||
|
|
||||||
|
std::unordered_map<EntityWrapper, std::shared_ptr<BlendTree>> BlendTrees;
|
||||||
|
|
||||||
// Attach a new bone to the skeleton
|
// Attach a new bone to the skeleton
|
||||||
// Returns: New bone index
|
// Returns: New bone index
|
||||||
int CreateBone(int ID, int parentID, std::string name, glm::mat4 offsetMatrix);
|
int CreateBone(int ID, int parentID, std::string name, glm::mat4 offsetMatrix);
|
||||||
|
|
||||||
int GetBoneID(std::string name);
|
int GetBoneID(std::string name);
|
||||||
|
|
||||||
std::vector<glm::mat4> GetFrameBones(std::vector<AnimationData> animations, AnimationOffset animationOffset, bool noRootMotion = false);
|
|
||||||
std::vector<glm::mat4> GetFrameBones(std::vector<AnimationData> animations, bool noRootMotion = false);
|
|
||||||
|
|
||||||
const Animation* GetAnimation(std::string name);
|
const Animation* GetAnimation(std::string name);
|
||||||
|
|
||||||
void AccumulateBoneTransforms(bool noRootMotion, std::vector<AnimationData> animations, std::map<int, glm::mat4>& frameBones, const Bone* bone, glm::mat4 parentMatrix);
|
std::map<int, Skeleton::PoseData> GetFrameBones(const Animation* animation, double time, bool additive, bool noRootMotion = false);
|
||||||
void AccumulateBoneTransforms(bool noRootMotion, std::vector<AnimationData> animations, AnimationOffset animationOffset, std::map<int, glm::mat4>& frameBones, const Bone* bone, glm::mat4 parentMatrix);
|
|
||||||
|
std::map<int, Skeleton::PoseData> BlendPoses(const std::map<int, PoseData>& pose1, const std::map<int, PoseData>& pose2, double weight);
|
||||||
|
std::map<int, Skeleton::PoseData> OverridePose(const std::map<int, PoseData>& overridePose, const std::map<int, PoseData>& targetPose);
|
||||||
|
std::map<int, Skeleton::PoseData> BlendPoseAdditive(const std::map<int, PoseData>& additivePose, const std::map<int, PoseData>& targetPose);
|
||||||
|
void GetFinalPose(std::map<int, Skeleton::PoseData>& boneMatrices, std::vector<glm::mat4>& finalPose, std::map<int, glm::mat4>& boneTransforms);
|
||||||
|
|
||||||
|
std::vector<glm::mat4> GetTPose();
|
||||||
|
|
||||||
void PrintSkeleton();
|
|
||||||
void PrintSkeleton(const Bone* parent, int depthCount);
|
|
||||||
std::map<std::string, Animation> Animations;
|
|
||||||
|
|
||||||
glm::mat4 GetBoneTransform(const Bone* bone, const Animation* animation, float time, glm::mat4 childMatrix);
|
|
||||||
glm::mat4 GetBoneTransform(bool noRootMotion, const Bone* bone, std::vector<AnimationData> animations, AnimationOffset animationOffset, glm::mat4 childMatrix);
|
|
||||||
glm::mat4 GetBoneTransform(bool noRootMotion, const Bone* bone, std::vector<AnimationData> animations, glm::mat4 childMatrix);
|
|
||||||
int GetKeyframe(const Animation& animation, double time);
|
|
||||||
|
|
||||||
|
std::map<std::string, Animation> Animations;
|
||||||
private:
|
private:
|
||||||
|
Skeleton::PoseData GetAdditiveBonePose(const Bone* bone, const Animation* animation, double time);
|
||||||
glm::mat4 GetOffsetTransform(const Bone* bone, AnimationOffset animationOffset);
|
|
||||||
|
void AccumulateFinalPose(std::map<int, glm::mat4>& boneMatrices, std::map<int, Skeleton::PoseData>& poseDatas, std::map<int, glm::mat4>& boneTransforms, const Bone* bone, glm::mat4 parentMatrix);
|
||||||
|
void AdditiveBoneTransforms(const Animation* animation, double time, std::map<int, PoseData>& boneMatrices, const Bone* bone);
|
||||||
|
void AccumulateBoneTransforms(bool noRootMotion, const Animation* animation, double time, std::map<int, PoseData>& boneMatrices, const Bone* bone);
|
||||||
|
|
||||||
std::map<std::string, Bone*> m_BonesByName;
|
std::map<std::string, Bone*> m_BonesByName;
|
||||||
|
|
||||||
|
|||||||
@@ -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")) {
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef AbilityCooldownHUDSystem_h__
|
||||||
|
#define AbilityCooldownHUDSystem_h__
|
||||||
|
|
||||||
|
#include "../../Engine/Core/System.h"
|
||||||
|
#include "../../Engine/GLM.h"
|
||||||
|
|
||||||
|
class AbilityCooldownHUDSystem : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AbilityCooldownHUDSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#ifndef AmmunitionHUDSystem_h__
|
|
||||||
#define AmmunitionHUDSystem_h__
|
|
||||||
|
|
||||||
#include "../../Engine/Core/System.h"
|
|
||||||
#include "../../Engine/GLM.h"
|
|
||||||
|
|
||||||
class AmmunitionHUDSystem : public ImpureSystem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AmmunitionHUDSystem(SystemParams params)
|
|
||||||
: System(params)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef BoostIconsHUDSystem_h__
|
||||||
|
#define BoostIconsHUDSystem_h__
|
||||||
|
|
||||||
|
#include "../../Engine/Core/System.h"
|
||||||
|
#include "../../Engine/GLM.h"
|
||||||
|
|
||||||
|
class BoostIconsHUDSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BoostIconsHUDSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem("BoostIconsHUD")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -12,8 +12,8 @@ public:
|
|||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||||
{
|
{
|
||||||
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
||||||
(double&)component["Time"] += dt;
|
(Field<double>)component["Time"] += dt;
|
||||||
(glm::vec3&)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
|
(Field<glm::vec3>)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -10,7 +10,7 @@ public:
|
|||||||
: System(params)
|
: System(params)
|
||||||
, PureSystem("Lifetime")
|
, PureSystem("Lifetime")
|
||||||
{
|
{
|
||||||
LOG_INFO("ASDASDASSA");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ private:
|
|||||||
bool m_LeftFoot = false;
|
bool m_LeftFoot = false;
|
||||||
// To get a difference when calculating the walking state.
|
// To get a difference when calculating the walking state.
|
||||||
glm::vec3 m_LastPosition = glm::vec3();
|
glm::vec3 m_LastPosition = glm::vec3();
|
||||||
|
// Used to track afterimages for sprint effect.
|
||||||
|
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);
|
||||||
// Spawn a hexagon at origin of an Entity
|
// Spawn a hexagon at origin of an Entity
|
||||||
|
|||||||
@@ -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"];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#ifndef ScoreScreenSystem_h__
|
||||||
|
#define ScoreScreenSystem_h__
|
||||||
|
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Core/ResourceManager.h"
|
||||||
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Network/EKillDeath.h"
|
||||||
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
#include "Network/EPlayerConnected.h"
|
||||||
|
#include "Network/EPlayerDisconnected.h"
|
||||||
|
#include "GLM.h"
|
||||||
|
|
||||||
|
class ScoreScreenSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ScoreScreenSystem(SystemParams params);
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) override;
|
||||||
|
|
||||||
|
EventRelay<ScoreScreenSystem, Events::KillDeath> m_EPlayerDeath;
|
||||||
|
bool OnPlayerDeath(const Events::KillDeath& e);
|
||||||
|
EventRelay<ScoreScreenSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool OnPlayerSpawn(const Events::PlayerSpawned& e);
|
||||||
|
EventRelay<ScoreScreenSystem, Events::PlayerConnected> m_EPlayerConnected;
|
||||||
|
bool OnPlayerConnected(const Events::PlayerConnected& e);
|
||||||
|
EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected;
|
||||||
|
bool OnPlayerDisconnected(const Events::PlayerDisconnected& e);
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct PlayerData {
|
||||||
|
int ID = -1;
|
||||||
|
std::string Name = "";
|
||||||
|
int Team = 1;
|
||||||
|
int Kills = 0;
|
||||||
|
int Deaths = 0;
|
||||||
|
EntityWrapper Player = EntityWrapper::Invalid;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<int> m_DisconnectedIdentities;
|
||||||
|
int m_PlayerCounter = 0;
|
||||||
|
std::unordered_map<int, PlayerData> m_PlayerIdentities;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef AmmunitionHUDSystem_h__
|
||||||
|
#define AmmunitionHUDSystem_h__
|
||||||
|
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include "../../Engine/Core/System.h"
|
||||||
|
#include "../../Engine/GLM.h"
|
||||||
|
|
||||||
|
class TextFieldReader : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextFieldReader(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem("TextFieldReader")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cTextFieldReader, double dt) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,47 +1,42 @@
|
|||||||
#ifndef AssaultWeaponBehaviour_h__
|
#ifndef AssaultWeaponBehaviour_h__
|
||||||
#define AssaultWeaponBehaviour_h__
|
#define AssaultWeaponBehaviour_h__
|
||||||
|
|
||||||
#include "Sound/EPlaySoundOnEntity.h"
|
|
||||||
#include "Collision/Collision.h"
|
|
||||||
#include "Core/ConfigFile.h"
|
|
||||||
#include "WeaponBehaviour.h"
|
#include "WeaponBehaviour.h"
|
||||||
#include "../SpawnerSystem.h"
|
#include "Collision/Collision.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Core/EShoot.h"
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
|
||||||
class AssaultWeaponBehaviour : public WeaponBehaviour<AssaultWeaponBehaviour>
|
class AssaultWeaponBehaviour : public WeaponBehaviour<AssaultWeaponBehaviour>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AssaultWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
AssaultWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
||||||
: WeaponBehaviour(systemParams, "AssaultWeapon", renderer, collisionOctree)
|
: System(systemParams)
|
||||||
|
, WeaponBehaviour(systemParams, "AssaultWeapon", renderer, collisionOctree)
|
||||||
|
, m_RandomEngine(m_RandomDevice())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
protected:
|
void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override;
|
||||||
virtual void OnPrimaryFire(WeaponInfo& wi) override;
|
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
||||||
virtual void OnCeasePrimaryFire(WeaponInfo& wi) override;
|
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
virtual void OnReload(WeaponInfo& wi) override;
|
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
//bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// State
|
std::random_device m_RandomDevice;
|
||||||
bool m_Firing = false;
|
std::mt19937 m_RandomEngine;
|
||||||
bool m_Reloading = false;
|
|
||||||
double m_ReloadTimer = 0.0;
|
|
||||||
double m_TimeSinceLastFire = 0.0;
|
|
||||||
EntityWrapper m_FirstPersonReloadImpostor;
|
|
||||||
|
|
||||||
bool hasAmmo();
|
// Weapon functions
|
||||||
void fireRound();
|
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
void spawnTracer();
|
//void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
|
||||||
float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
void playFireSound();
|
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
void playEmptySound();
|
|
||||||
void viewPunch();
|
// Utility
|
||||||
void finishReload();
|
//Camera cameraFromEntity(EntityWrapper camera);
|
||||||
void playShootAnimation();
|
|
||||||
void playIdleAnimation();
|
|
||||||
void playReloadAnimation();
|
|
||||||
bool shoot(double damage);
|
|
||||||
void showHitMarker();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
|
#ifndef DefenderWeaponBehaviour_h__
|
||||||
|
#define DefenderWeaponBehaviour_h__
|
||||||
|
|
||||||
#include "WeaponBehaviour.h"
|
#include "WeaponBehaviour.h"
|
||||||
#include "Collision/Collision.h"
|
#include "Collision/Collision.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Rendering/ESetCamera.h"
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
|
||||||
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
||||||
{
|
{
|
||||||
@@ -10,29 +13,27 @@ public:
|
|||||||
: System(systemParams)
|
: System(systemParams)
|
||||||
, WeaponBehaviour(systemParams, "DefenderWeapon", renderer, collisionOctree)
|
, WeaponBehaviour(systemParams, "DefenderWeapon", renderer, collisionOctree)
|
||||||
, m_RandomEngine(m_RandomDevice())
|
, m_RandomEngine(m_RandomDevice())
|
||||||
{
|
{ }
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &DefenderWeaponBehaviour::OnSetCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override;
|
void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override;
|
||||||
void UpdateWeapon(WeaponInfo& wi, double dt) override;
|
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
||||||
void OnPrimaryFire(WeaponInfo& wi) override;
|
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnCeasePrimaryFire(WeaponInfo& wi) override;
|
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
bool OnInputCommand(WeaponInfo& wi, const Events::InputCommand& e) override;
|
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::random_device m_RandomDevice;
|
std::random_device m_RandomDevice;
|
||||||
std::mt19937 m_RandomEngine;
|
std::mt19937 m_RandomEngine;
|
||||||
EntityWrapper m_CurrentCamera;
|
|
||||||
|
|
||||||
EventRelay<DefenderWeaponBehaviour, Events::SetCamera> m_ESetCamera;
|
|
||||||
bool OnSetCamera(const Events::SetCamera& e);
|
|
||||||
|
|
||||||
// Weapon functions
|
// Weapon functions
|
||||||
void fireShell(WeaponInfo& wi);
|
void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
void dealDamage(WeaponInfo& wi, glm::vec3 direction, double damage);
|
void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
|
||||||
|
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
|
||||||
// Utility
|
// Utility
|
||||||
float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
|
||||||
Camera cameraFromEntity(EntityWrapper camera);
|
Camera cameraFromEntity(EntityWrapper camera);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef SidearmWeaponBehaviour_h__
|
||||||
|
#define SidearmWeaponBehaviour_h__
|
||||||
|
|
||||||
|
#include "WeaponBehaviour.h"
|
||||||
|
#include "Collision/Collision.h"
|
||||||
|
#include "Core/EPlayerDamage.h"
|
||||||
|
|
||||||
|
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SidearmWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
||||||
|
: System(systemParams)
|
||||||
|
, WeaponBehaviour(systemParams, "SidearmWeapon", renderer, collisionOctree)
|
||||||
|
, m_RandomEngine(m_RandomDevice())
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override;
|
||||||
|
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
||||||
|
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::random_device m_RandomDevice;
|
||||||
|
std::mt19937 m_RandomEngine;
|
||||||
|
|
||||||
|
// Weapon functions
|
||||||
|
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
//void dealDamage(WeaponInfo& wi, glm::vec3 direction, double damage);
|
||||||
|
|
||||||
|
// Utility
|
||||||
|
bool canFire(ComponentWrapper cWeapon);
|
||||||
|
bool playerInFirstPerson(EntityWrapper player);
|
||||||
|
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -7,6 +7,9 @@
|
|||||||
#include "Collision/EntityAABB.h"
|
#include "Collision/EntityAABB.h"
|
||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Systems/SpawnerSystem.h"
|
#include "Systems/SpawnerSystem.h"
|
||||||
|
#include "Rendering/ESetCamera.h"
|
||||||
|
#include "Core/ConfigFile.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
|
||||||
template <typename ETYPE>
|
template <typename ETYPE>
|
||||||
class WeaponBehaviour : public PureSystem
|
class WeaponBehaviour : public PureSystem
|
||||||
@@ -20,42 +23,158 @@ public:
|
|||||||
, m_Renderer(renderer)
|
, m_Renderer(renderer)
|
||||||
, m_CollisionOctree(collisionOctree)
|
, m_CollisionOctree(collisionOctree)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &WeaponBehaviour::_OnInputCommand)
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &WeaponBehaviour::_OnInputCommand);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &WeaponBehaviour::_OnSetCamera);
|
||||||
|
auto config = ResourceManager::Load<ConfigFile>("Config.ini");
|
||||||
|
m_ConfigAutoReload = config->Get<bool>("Gameplay.AutoReload", true);
|
||||||
}
|
}
|
||||||
virtual ~WeaponBehaviour() = default;
|
virtual ~WeaponBehaviour() = default;
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override
|
||||||
{
|
{
|
||||||
|
EntityWrapper firstPersonWeapon = entity.FirstChildByName("Hands").FirstChildByName("AssaultWeapon");
|
||||||
|
EntityWrapper thirdPersonWeapon = entity.FirstChildByName("PlayerModel").FirstChildByName("AssaultWeapon");
|
||||||
|
if (IsClient && (firstPersonWeapon.Valid() || thirdPersonWeapon.Valid())) {
|
||||||
|
if (m_ActiveWeapons.count(entity) == 0) {
|
||||||
|
|
||||||
|
WeaponInfo& wi = m_ActiveWeapons[entity];
|
||||||
|
wi.Player = entity;
|
||||||
|
wi.WeaponEntity = entity;
|
||||||
|
wi.FirstPersonEntity = firstPersonWeapon;
|
||||||
|
wi.ThirdPersonEntity = thirdPersonWeapon;
|
||||||
|
|
||||||
|
OnEquip(cWeapon, wi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto weapon = getActiveWeapon(entity);
|
auto weapon = getActiveWeapon(entity);
|
||||||
if (!weapon) {
|
if (!weapon) {
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
UpdateWeapon(*weapon, dt);
|
UpdateWeapon(cWeapon, *weapon, dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct WeaponInfo
|
struct WeaponInfo
|
||||||
{
|
{
|
||||||
std::string WeaponComponent;
|
|
||||||
EntityWrapper Player;
|
EntityWrapper Player;
|
||||||
EntityWrapper WeaponEntity;
|
EntityWrapper WeaponEntity;
|
||||||
EntityWrapper FirstPersonEntity;
|
EntityWrapper FirstPersonEntity;
|
||||||
EntityWrapper ThirdPersonEntity;
|
EntityWrapper ThirdPersonEntity;
|
||||||
ComponentWrapper GetComponent() { return WeaponEntity[WeaponComponent]; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
|
EntityWrapper m_CurrentCamera;
|
||||||
Octree<EntityAABB>* m_CollisionOctree;
|
Octree<EntityAABB>* m_CollisionOctree;
|
||||||
std::unordered_map<EntityWrapper, WeaponInfo> m_ActiveWeapons;
|
std::unordered_map<EntityWrapper, WeaponInfo> m_ActiveWeapons;
|
||||||
|
bool m_ConfigAutoReload;
|
||||||
|
|
||||||
virtual void UpdateWeapon(WeaponInfo& wi, double dt) { }
|
virtual void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) { }
|
||||||
virtual void OnPrimaryFire(WeaponInfo& wi) { }
|
virtual void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) { }
|
||||||
virtual void OnCeasePrimaryFire(WeaponInfo& wi) { }
|
virtual void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) { }
|
||||||
virtual void OnReload(WeaponInfo& wi) { }
|
virtual void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) { }
|
||||||
virtual bool OnInputCommand(WeaponInfo& wi, const Events::InputCommand& e) { return false; }
|
virtual void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) { }
|
||||||
|
virtual void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) { }
|
||||||
|
virtual bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) { return false; }
|
||||||
|
|
||||||
|
bool isPlayerInFirstPerson(EntityWrapper player)
|
||||||
|
{
|
||||||
|
if (!m_CurrentCamera.Valid()) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return m_CurrentCamera == player || m_CurrentCamera.IsChildOf(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns wi.FirstPersonEntity or wi.ThirdPersonEntity depending on
|
||||||
|
// if the player is in first person mode or not.
|
||||||
|
EntityWrapper getRelevantWeaponModelEntity(WeaponInfo& wi)
|
||||||
|
{
|
||||||
|
if (isPlayerInFirstPerson(wi.Player)) {
|
||||||
|
return wi.FirstPersonEntity;
|
||||||
|
} else {
|
||||||
|
return wi.ThirdPersonEntity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float traceRayDistance(glm::vec3 origin, glm::vec3 direction)
|
||||||
|
{
|
||||||
|
float distance;
|
||||||
|
glm::vec3 pos;
|
||||||
|
auto entity = Collision::EntityFirstHitByRay(Ray(origin, direction), m_CollisionOctree, distance, pos);
|
||||||
|
if (entity) {
|
||||||
|
return distance;
|
||||||
|
} else {
|
||||||
|
return 100.f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void playAnimation(EntityWrapper weaponModelEntity, const std::string& subTreeName, const std::string& animationNodeName)
|
||||||
|
{
|
||||||
|
EntityWrapper root = weaponModelEntity.FirstParentWithComponent("Model");
|
||||||
|
if (!root.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityWrapper subTree = root.FirstChildByName(subTreeName);
|
||||||
|
if (!subTree.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityWrapper animationNode = subTree.FirstChildByName(animationNodeName);
|
||||||
|
if (!animationNode.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Events::AutoAnimationBlend eFireBlend;
|
||||||
|
eFireBlend.RootNode = root;
|
||||||
|
eFireBlend.NodeName = animationNodeName;
|
||||||
|
eFireBlend.Restart = true;
|
||||||
|
eFireBlend.Start = true;
|
||||||
|
m_EventBroker->Publish(eFireBlend);
|
||||||
|
}
|
||||||
|
|
||||||
|
void playAnimationAndReturn(EntityWrapper weaponModelEntity, const std::string& subTreeName, const std::string& animationNodeName)
|
||||||
|
{
|
||||||
|
EntityWrapper root = weaponModelEntity.FirstParentWithComponent("Model");
|
||||||
|
if (!root.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityWrapper subTree = root.FirstChildByName(subTreeName);
|
||||||
|
if (!subTree.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityWrapper animationNode = subTree.FirstChildByName(animationNodeName);
|
||||||
|
if (!animationNode.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Events::AutoAnimationBlend eFireBlend;
|
||||||
|
eFireBlend.RootNode = root;
|
||||||
|
eFireBlend.NodeName = animationNodeName;
|
||||||
|
eFireBlend.Restart = true;
|
||||||
|
eFireBlend.Start = true;
|
||||||
|
m_EventBroker->Publish(eFireBlend);
|
||||||
|
|
||||||
|
Events::AutoAnimationBlend eIdleBlend;
|
||||||
|
eIdleBlend.RootNode = root;
|
||||||
|
eIdleBlend.NodeName = "Idle";
|
||||||
|
eIdleBlend.AnimationEntity = animationNode;
|
||||||
|
eIdleBlend.Delay = -0.2;
|
||||||
|
eIdleBlend.Duration = 0.2;
|
||||||
|
m_EventBroker->Publish(eIdleBlend);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
EventRelay<ETYPE, Events::SetCamera> m_ESetCamera;
|
||||||
|
bool _OnSetCamera(const Events::SetCamera& e)
|
||||||
|
{
|
||||||
|
m_CurrentCamera = e.CameraEntity;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
EventRelay<ETYPE, Events::InputCommand> m_EInputCommand;
|
EventRelay<ETYPE, Events::InputCommand> m_EInputCommand;
|
||||||
bool _OnInputCommand(const Events::InputCommand& e)
|
bool _OnInputCommand(const Events::InputCommand& e)
|
||||||
{
|
{
|
||||||
@@ -70,15 +189,19 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure the player has this weapon
|
// Make sure the player has this weapon
|
||||||
auto weapon = getWeaponComponent(player);
|
auto cWeapon = getWeaponComponent(player);
|
||||||
if (!weapon) {
|
if (!cWeapon) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Weapon selection
|
// Weapon selection
|
||||||
if (e.Command == "SelectWeapon") {
|
if (e.Command == "SelectWeapon") {
|
||||||
if (static_cast<ComponentInfo::EnumType>(e.Value) == static_cast<ComponentInfo::EnumType>((*weapon)["Slot"])) {
|
if (e.Value > 0) {
|
||||||
selectWeapon(player);
|
if (static_cast<ComponentInfo::EnumType>(e.Value) == static_cast<ComponentInfo::EnumType>((*cWeapon)["Slot"])) {
|
||||||
|
selectWeapon(*cWeapon, player);
|
||||||
|
} else {
|
||||||
|
holsterWeapon(*cWeapon, player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,18 +214,18 @@ private:
|
|||||||
// Fire
|
// Fire
|
||||||
if (e.Command == "PrimaryFire") {
|
if (e.Command == "PrimaryFire") {
|
||||||
if (e.Value > 0) {
|
if (e.Value > 0) {
|
||||||
OnPrimaryFire(*activeWeapon);
|
OnPrimaryFire(*cWeapon, *activeWeapon);
|
||||||
} else {
|
} else {
|
||||||
OnCeasePrimaryFire(*activeWeapon);
|
OnCeasePrimaryFire(*cWeapon, *activeWeapon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reload
|
// Reload
|
||||||
if (e.Command == "Reload" && e.Value != 0) {
|
if (e.Command == "Reload" && e.Value != 0) {
|
||||||
OnReload(*activeWeapon);
|
OnReload(*cWeapon, *activeWeapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
return OnInputCommand(*activeWeapon, e);
|
return OnInputCommand(*cWeapon, *activeWeapon, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<ComponentWrapper> getWeaponComponent(EntityWrapper player)
|
boost::optional<ComponentWrapper> getWeaponComponent(EntityWrapper player)
|
||||||
@@ -129,15 +252,25 @@ private:
|
|||||||
return activeWeapon;
|
return activeWeapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectWeapon(EntityWrapper player)
|
void selectWeapon(ComponentWrapper cWeapon, EntityWrapper player)
|
||||||
{
|
{
|
||||||
|
if (!IsServer) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't reselect weapon if it's already active
|
||||||
|
if (getActiveWeapon(player)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Find the weapon attachments matching the weapon type
|
// Find the weapon attachments matching the weapon type
|
||||||
std::vector<EntityWrapper> weaponAttachments = player.ChildrenWithComponent("WeaponAttachment");
|
std::vector<EntityWrapper> weaponAttachments = player.ChildrenWithComponent("WeaponAttachment");
|
||||||
EntityWrapper firstPersonAttachment;
|
EntityWrapper firstPersonAttachment;
|
||||||
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;
|
||||||
@@ -152,29 +285,48 @@ private:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Purge other weapon entities
|
|
||||||
for (auto& attachment : weaponAttachments) {
|
|
||||||
//if (attachment == firstPersonAttachment || attachment == thirdPersonAttachment) {
|
|
||||||
// continue;
|
|
||||||
//}
|
|
||||||
attachment.DeleteChildren();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Spawn the weapon(s)
|
// Spawn the weapon(s)
|
||||||
EntityWrapper firstPersonWeapon;
|
EntityWrapper firstPersonWeapon;
|
||||||
EntityWrapper thirdPersonWeapon;
|
EntityWrapper thirdPersonWeapon;
|
||||||
if (firstPersonAttachment.Valid()) {
|
//if (IsClient) {
|
||||||
firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment);
|
if (firstPersonAttachment.Valid()) {
|
||||||
}
|
firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment);
|
||||||
|
}
|
||||||
|
//}
|
||||||
if (thirdPersonAttachment.Valid()) {
|
if (thirdPersonAttachment.Valid()) {
|
||||||
thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment);
|
thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ActiveWeapons[player].WeaponComponent = m_ComponentType;
|
WeaponInfo& wi = m_ActiveWeapons[player];
|
||||||
m_ActiveWeapons[player].Player = player;
|
wi.Player = player;
|
||||||
m_ActiveWeapons[player].WeaponEntity = player;
|
wi.WeaponEntity = player;
|
||||||
m_ActiveWeapons[player].FirstPersonEntity = firstPersonWeapon;
|
wi.FirstPersonEntity = firstPersonWeapon;
|
||||||
m_ActiveWeapons[player].ThirdPersonEntity = thirdPersonWeapon;
|
wi.ThirdPersonEntity = thirdPersonWeapon;
|
||||||
|
|
||||||
|
OnEquip(cWeapon, wi);
|
||||||
|
}
|
||||||
|
|
||||||
|
void holsterWeapon(ComponentWrapper cWeapon, EntityWrapper player)
|
||||||
|
{
|
||||||
|
auto activeWeapon = getActiveWeapon(player);
|
||||||
|
if (!activeWeapon) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WeaponInfo& wi = *activeWeapon;
|
||||||
|
|
||||||
|
// Send holster event
|
||||||
|
OnHolster(cWeapon, wi);
|
||||||
|
|
||||||
|
// Delete weapon entities
|
||||||
|
if (wi.FirstPersonEntity.Valid()) {
|
||||||
|
m_World->DeleteEntity(wi.FirstPersonEntity.ID);
|
||||||
|
}
|
||||||
|
if (wi.ThirdPersonEntity.Valid()) {
|
||||||
|
m_World->DeleteEntity(wi.ThirdPersonEntity.ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make weapon inactive
|
||||||
|
m_ActiveWeapons.erase(player);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
[Gameplay]
|
||||||
|
AutoReload=true
|
||||||
|
|
||||||
[Debug]
|
[Debug]
|
||||||
LogLevel=1
|
LogLevel=1
|
||||||
LoadMap=
|
LoadMap=
|
||||||
@@ -72,7 +75,7 @@ NumIterations=9
|
|||||||
TextureQuality=0
|
TextureQuality=0
|
||||||
|
|
||||||
[GLOW]
|
[GLOW]
|
||||||
Quality=3;
|
Quality=3
|
||||||
|
|
||||||
[GLOW1]
|
[GLOW1]
|
||||||
NumIterations=5
|
NumIterations=5
|
||||||
|
|||||||
@@ -27,4 +27,5 @@ M=SwitchToClient
|
|||||||
P=SwitchToPlayer
|
P=SwitchToPlayer
|
||||||
K=TakeDamage,1500
|
K=TakeDamage,1500
|
||||||
F2=PerformanceTimingResetAllTimers
|
F2=PerformanceTimingResetAllTimers
|
||||||
F3=PerformanceTimingCreateExcelData
|
F3=PerformanceTimingCreateExcelData
|
||||||
|
F4=SwapToClassPick
|
||||||
@@ -33,7 +33,6 @@
|
|||||||
<xs:include schemaLocation="Components/HiddenForLocalPlayer.xsd"/>
|
<xs:include schemaLocation="Components/HiddenForLocalPlayer.xsd"/>
|
||||||
<xs:include schemaLocation="Components/HealthPickup.xsd"/>
|
<xs:include schemaLocation="Components/HealthPickup.xsd"/>
|
||||||
<xs:include schemaLocation="Components/AmmoPickup.xsd"/>
|
<xs:include schemaLocation="Components/AmmoPickup.xsd"/>
|
||||||
<xs:include schemaLocation="Components/AnimationOffset.xsd"/>
|
|
||||||
<xs:include schemaLocation="Components/DashAbility.xsd"/>
|
<xs:include schemaLocation="Components/DashAbility.xsd"/>
|
||||||
<xs:include schemaLocation="Components/ShieldAbility.xsd"/>
|
<xs:include schemaLocation="Components/ShieldAbility.xsd"/>
|
||||||
<xs:include schemaLocation="Components/SprintAbility.xsd"/>
|
<xs:include schemaLocation="Components/SprintAbility.xsd"/>
|
||||||
@@ -45,16 +44,25 @@
|
|||||||
<xs:include schemaLocation="Components/Sprite.xsd"/>
|
<xs:include schemaLocation="Components/Sprite.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
||||||
<xs:include schemaLocation="Components/CapturePointHUD.xsd"/>
|
<xs:include schemaLocation="Components/CapturePointHUD.xsd"/>
|
||||||
<xs:include schemaLocation="Components/AmmunitionHUD.xsd"/>
|
<xs:include schemaLocation="Components/TextFieldReader.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Menu.xsd"/>
|
<xs:include schemaLocation="Components/Menu.xsd"/>
|
||||||
<xs:include schemaLocation="Components/KillFeed.xsd"/>
|
<xs:include schemaLocation="Components/KillFeed.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/BlendOverride.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Blend.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/BlendAdditive.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Page.xsd"/>
|
<xs:include schemaLocation="Components/Page.xsd"/>
|
||||||
<xs:include schemaLocation="Components/SpriteIndicator.xsd"/>
|
<xs:include schemaLocation="Components/SpriteIndicator.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Button.xsd"/>
|
<xs:include schemaLocation="Components/Button.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/AbilityCooldownHUD.xsd"/>
|
||||||
<xs:include schemaLocation="Components/DoubleJump.xsd"/>
|
<xs:include schemaLocation="Components/DoubleJump.xsd"/>
|
||||||
<xs:include schemaLocation="Components/WeaponAttachment.xsd"/>
|
<xs:include schemaLocation="Components/WeaponAttachment.xsd"/>
|
||||||
<xs:include schemaLocation="Components/DefenderWeapon.xsd"/>
|
<xs:include schemaLocation="Components/DefenderWeapon.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/SidearmWeapon.xsd"/>
|
||||||
<xs:include schemaLocation="Components/CapturePointGameMode.xsd"/>
|
<xs:include schemaLocation="Components/CapturePointGameMode.xsd"/>
|
||||||
<xs:include schemaLocation="Components/CapturePointArrowHUD.xsd"/>
|
<xs:include schemaLocation="Components/CapturePointArrowHUD.xsd"/>
|
||||||
<xs:include schemaLocation="Components/FloatingEffect.xsd"/>
|
<xs:include schemaLocation="Components/FloatingEffect.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/BoostIconsHUD.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/InputCmdButton.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/ScoreScreen.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/ScoreIdentity.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<AbilityCooldownHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AbilityCooldownHUD.xsd">
|
||||||
|
</AbilityCooldownHUD>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?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="AbilityCooldownHUD">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>HUD element for tracking ability cooldown. If it has a sprite and fill component it will fill the sprite with chosen color depending on the cooldown.\n A child with text component named "Cooldown"</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
|
||||||
<AmmunitionHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AmmunitionHUD.xsd">
|
|
||||||
</AmmunitionHUD>
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<?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:include schemaLocation="../Types/TeamEnum.xsd"/>
|
|
||||||
<xs:element name="AmmunitionHUD">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Hud element for tracking ammunition from parent with AssaultWeapon component. Child with the name "MagazineAmmo" tracks clip ammunition. Child with the name "Ammo" tracks ammo.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
</xs:schema>
|
|
||||||
@@ -1,18 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Animation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
<Animation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
||||||
<AnimationName1></AnimationName1>
|
<AnimationName></AnimationName>
|
||||||
<Weight1>1.0</Weight1>
|
<Time>0</Time>
|
||||||
<Time1>0</Time1>
|
<Play>false</Play>
|
||||||
<Speed1>0</Speed1>
|
<Reverse>false</Reverse>
|
||||||
<Loop1>true</Loop1>
|
<Speed>0</Speed>
|
||||||
<AnimationName2></AnimationName2>
|
<Loop>true</Loop>
|
||||||
<Weight2>1.0</Weight2>
|
<Additive>false</Additive>
|
||||||
<Time2>0</Time2>
|
|
||||||
<Speed2>0</Speed2>
|
|
||||||
<Loop2>true</Loop2>
|
|
||||||
<AnimationName3></AnimationName3>
|
|
||||||
<Weight3>1.0</Weight3>
|
|
||||||
<Time3>0</Time3>
|
|
||||||
<Speed3>0</Speed3>
|
|
||||||
<Loop3>true</Loop3>
|
|
||||||
</Animation>
|
</Animation>
|
||||||
@@ -2,27 +2,17 @@
|
|||||||
|
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
<xs:element name="Animation">
|
<xs:element name="Animation">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="AnimationName1" type="t:string" minOccurs="0"/>
|
<xs:element name="AnimationName" type="t:string" minOccurs="0"/>
|
||||||
<xs:element name="Weight1" type="t:double" minOccurs="0"/>
|
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Time1" type="t:double" minOccurs="0"/>
|
<xs:element name="Speed" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Speed1" type="t:double" minOccurs="0"/>
|
<xs:element name="Play" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="Loop1" type="t:bool" minOccurs="0"/>
|
<xs:element name="Reverse" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="AnimationName2" type="t:string" minOccurs="0"/>
|
<xs:element name="Loop" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="Weight2" type="t:double" minOccurs="0"/>
|
<xs:element name="Additive" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="Time2" type="t:double" minOccurs="0"/>
|
|
||||||
<xs:element name="Speed2" type="t:double" minOccurs="0"/>
|
|
||||||
<xs:element name="Loop2" type="t:bool" minOccurs="0"/>
|
|
||||||
<xs:element name="AnimationName3" type="t:string" minOccurs="0"/>
|
|
||||||
<xs:element name="Weight3" type="t:double" minOccurs="0"/>
|
|
||||||
<xs:element name="Time3" type="t:double" minOccurs="0"/>
|
|
||||||
<xs:element name="Speed3" type="t:double" minOccurs="0"/>
|
|
||||||
<xs:element name="Loop3" type="t:bool" minOccurs="0"/>
|
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute name="replicated" type="xs:boolean" fixed="true"/>
|
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
|
||||||
<AnimationOffset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AnimationOffset.xsd">
|
|
||||||
<AnimationName></AnimationName>
|
|
||||||
<Time>0</Time>
|
|
||||||
</AnimationOffset>
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<?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="AnimationOffset">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Aim animation offset for the skeleton</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:all>
|
|
||||||
<xs:element name="AnimationName" type="t:string" minOccurs="0"/>
|
|
||||||
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
|
||||||
</xs:all>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
</xs:schema>
|
|
||||||
@@ -1,12 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<AssaultWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AssaultWeapon.xsd">
|
<AssaultWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AssaultWeapon.xsd">
|
||||||
|
<Slot><Primary/></Slot>
|
||||||
<MagazineAmmo>32</MagazineAmmo>
|
<MagazineAmmo>32</MagazineAmmo>
|
||||||
<MagazineSize>32</MagazineSize>
|
<MagazineSize>32</MagazineSize>
|
||||||
<Ammo>360</Ammo>
|
<Ammo>320</Ammo>
|
||||||
<MaxAmmo>360</MaxAmmo>
|
<MaxAmmo>320</MaxAmmo>
|
||||||
<BaseDamage>5</BaseDamage>
|
<BaseDamage>15</BaseDamage>
|
||||||
<RPM>120</RPM>
|
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
<ViewPunch>0.01</ViewPunch>
|
<MaxTravelAngle>0.10</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
<ReloadTime>2</ReloadTime>
|
<RPM>420</RPM>
|
||||||
<Slot><Primary/></Slot>
|
<ViewPunch>0.03</ViewPunch>
|
||||||
|
<ViewReturnSpeed>0.18</ViewReturnSpeed>
|
||||||
|
<ReloadTime>1.65</ReloadTime>
|
||||||
|
<EquipTime>0.5</EquipTime>
|
||||||
|
<TriggerHeld>false</TriggerHeld>
|
||||||
|
<FireCooldown>0</FireCooldown>
|
||||||
|
<ReloadQueued>false</ReloadQueued>
|
||||||
|
<IsReloading>false</IsReloading>
|
||||||
|
<ReloadTimer>0</ReloadTimer>
|
||||||
|
<CurrentTravel>0</CurrentTravel>
|
||||||
</AssaultWeapon>
|
</AssaultWeapon>
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
<xs:element name="AssaultWeapon">
|
<xs:element name="AssaultWeapon">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
|
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
||||||
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
@@ -20,16 +21,33 @@
|
|||||||
<xs:annotation><xs:documentation>Maximum ammo able to be carried</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Maximum ammo able to be carried</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="BaseDamage" type="t:double" minOccurs="0"/>
|
<xs:element name="BaseDamage" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="RPM" type="t:double" minOccurs="0">
|
<xs:element name="RPM" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>View punch in radians for each bullet fired</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ViewReturnSpeed" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The speed in radians per second the view returns to its original position after being punched</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Time it takes to reload the weapon in seconds</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
<xs:element name="EquipTime" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Time it takes from selecting the weapon until it's ready to fire</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="CurrentTravel" type="t:float" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Blend xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Blend.xsd">
|
||||||
|
<Pose1></Pose1>
|
||||||
|
<Pose2></Pose2>
|
||||||
|
<Weight>0.5</Weight>
|
||||||
|
<SubTreeRoot>false</SubTreeRoot>
|
||||||
|
</Blend>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?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="Blend">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Pose1" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Pose2" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Weight" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="SubTreeRoot" type="t:bool" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<BlendAdditive xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BlendAdditive.xsd">
|
||||||
|
<Adder></Adder>
|
||||||
|
<Receiver></Receiver>
|
||||||
|
</BlendAdditive>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?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="BlendAdditive">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Adder" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Receiver" type="t:string" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<BlendOverride xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BlendOverride.xsd">
|
||||||
|
<Master></Master>
|
||||||
|
<Slave></Slave>
|
||||||
|
</BlendOverride>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?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="BlendOverride">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Master" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Slave" type="t:string" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<BoostIconsHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostIconsHUD.xsd"/>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="BoostIconsHUD">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Origin for the 3 boost states. Create 3 children with Sprite and Fill components, name them "Sprint", "Defender", "Assault"</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,16 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
|
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
|
||||||
|
<Slot><Primary/></Slot>
|
||||||
<MagazineAmmo>8</MagazineAmmo>
|
<MagazineAmmo>8</MagazineAmmo>
|
||||||
<MagazineSize>8</MagazineSize>
|
<MagazineSize>8</MagazineSize>
|
||||||
<Ammo>64</Ammo>
|
<Ammo>64</Ammo>
|
||||||
<MaxAmmo>64</MaxAmmo>
|
<MaxAmmo>64</MaxAmmo>
|
||||||
<BaseDamage>90</BaseDamage>
|
<BaseDamage>90</BaseDamage>
|
||||||
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
|
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
|
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
|
||||||
<NumPellets>10</NumPellets>
|
<NumPellets>10</NumPellets>
|
||||||
<RPM>120</RPM>
|
<RPM>120</RPM>
|
||||||
<ViewPunch>0.01</ViewPunch>
|
<ViewPunch>0.03</ViewPunch>
|
||||||
|
<ViewReturnSpeed>0.2</ViewReturnSpeed>
|
||||||
<ReloadTime>0.5</ReloadTime>
|
<ReloadTime>0.5</ReloadTime>
|
||||||
<Slot><Primary/></Slot>
|
<TriggerHeld>false</TriggerHeld>
|
||||||
<IsFiring>false</IsFiring>
|
<FireCooldown>0</FireCooldown>
|
||||||
<TimeSinceLastFire>0</TimeSinceLastFire>
|
<IsReloading>false</IsReloading>
|
||||||
|
<ReloadTimer>0</ReloadTimer>
|
||||||
|
<CurrentTravel>0</CurrentTravel>
|
||||||
</DefenderWeapon>
|
</DefenderWeapon>
|
||||||
@@ -4,9 +4,22 @@
|
|||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
<xs:include schemaLocation="../Types/WeaponSlotEnum.xsd"/>
|
<xs:include schemaLocation="../Types/WeaponSlotEnum.xsd"/>
|
||||||
|
|
||||||
|
<xs:complexType name="WeaponStateEnum" mixed="true">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="t:enum">
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="Idle" type="t:int" fixed="0" minOccurs="0"/>
|
||||||
|
<xs:element name="Firing" type="t:int" fixed="1" minOccurs="0"/>
|
||||||
|
<xs:element name="Reloading" type="t:int" fixed="2" minOccurs="0"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
<xs:element name="DefenderWeapon">
|
<xs:element name="DefenderWeapon">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
|
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
||||||
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
@@ -25,6 +38,9 @@
|
|||||||
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="NumPellets" type="t:int" minOccurs="0"/>
|
<xs:element name="NumPellets" type="t:int" minOccurs="0"/>
|
||||||
<xs:element name="RPM" type="t:double" minOccurs="0">
|
<xs:element name="RPM" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
||||||
@@ -32,12 +48,17 @@
|
|||||||
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="ViewReturnSpeed" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The speed in radians per second the view returns to its original position after being punched</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="IsFiring" type="t:bool" minOccurs="0"/>
|
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="TimeSinceLastFire" type="t:double" minOccurs="0"/>
|
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="CurrentTravel" type="t:float" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<InputCmdButton xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="InputCmdButton.xsd">
|
||||||
|
<Command></Command>
|
||||||
|
<PressValue>0.0</PressValue>
|
||||||
|
</InputCmdButton>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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="InputCmdButton">
|
||||||
|
<xs:annotation><xs:documentation>Used with a Button component, the button will send an inputCommand event instead of ButtonPressed/Released event.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Command" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The command name for the inputCommand.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PressValue" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The value in inputCommand.Value that will be sent on button press.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<ScoreIdentity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ScoreIdentity.xsd">
|
||||||
|
<Name></Name>
|
||||||
|
<ID>-1</ID>
|
||||||
|
<KD>0.0</KD>
|
||||||
|
<Kills>0</Kills>
|
||||||
|
<Deaths>0</Deaths>
|
||||||
|
<Ping>0</Ping>
|
||||||
|
<Connected>true</Connected>
|
||||||
|
</ScoreIdentity>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?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="ScoreIdentity">
|
||||||
|
<xs:annotation><xs:documentation>A component tracking data for the score of a player.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Name" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>A name for tracking score identities, this should be unique.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ID" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>An id for tracking identities</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="KD" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The Kills per death score.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Kills" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The amount of kills.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Deaths" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The amount of deaths.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Ping" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Ping of a player.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Connected" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>If the player is currently connected or not</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" ?>
|
||||||
|
<ScoreScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ScoreScreen.xsd">
|
||||||
|
<TotalIdentities>0</TotalIdentities>
|
||||||
|
<NextPosition>0</NextPosition>
|
||||||
|
<Offset X="0.0" Y="0.0" Z="0.0"/>
|
||||||
|
</ScoreScreen>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?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="ScoreScreen">
|
||||||
|
<xs:annotation><xs:documentation>The screen where player scores will be shown.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="TotalIdentities" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The amount of score identities this scoreboard hold</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="NextPosition" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Where the next scoreIdentity should be placed.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Offset" type="t:Vector" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>How much offset should be applied per position</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<ShieldAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ShieldAbility.xsd">
|
<ShieldAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ShieldAbility.xsd">
|
||||||
<CoolDownMaxTimer>2.0</CoolDownMaxTimer>
|
<Active>false</Active>
|
||||||
</ShieldAbility>
|
</ShieldAbility>
|
||||||
@@ -9,8 +9,8 @@
|
|||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="CoolDownMaxTimer" type="t:double" minOccurs="0">
|
<xs:element name="Active" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>This is the cooldown on shield</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>If the shield is active or not</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<SidearmWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SidearmWeapon.xsd">
|
||||||
|
<Slot><Secondary/></Slot>
|
||||||
|
<MagazineAmmo>16</MagazineAmmo>
|
||||||
|
<MagazineSize>16</MagazineSize>
|
||||||
|
<BaseDamage>20</BaseDamage>
|
||||||
|
<RPM>500</RPM>
|
||||||
|
<Automatic>false</Automatic>
|
||||||
|
<ViewPunch>0.01</ViewPunch>
|
||||||
|
<ReloadTime>0.5</ReloadTime>
|
||||||
|
<EquipTime>0.5</EquipTime>
|
||||||
|
<TriggerHeld>false</TriggerHeld>
|
||||||
|
<FireCooldown>0</FireCooldown>
|
||||||
|
<IsReloading>false</IsReloading>
|
||||||
|
<ReloadTimer>0</ReloadTimer>
|
||||||
|
</SidearmWeapon>
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?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:include schemaLocation="../Types/WeaponSlotEnum.xsd"/>
|
||||||
|
|
||||||
|
<xs:complexType name="WeaponStateEnum" mixed="true">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="t:enum">
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="Idle" type="t:int" fixed="0" minOccurs="0"/>
|
||||||
|
<xs:element name="Firing" type="t:int" fixed="1" minOccurs="0"/>
|
||||||
|
<xs:element name="Reloading" type="t:int" fixed="2" minOccurs="0"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:element name="SidearmWeapon">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
||||||
|
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="MagazineSize" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Max number of rounds in a magazine</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="BaseDamage" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RPM" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Automatic" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="ViewPunch" type="t:float" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="EquipTime" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Time it takes from selecting the weapon until it's ready to fire</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
|
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
|
||||||
<CoolDownMaxTimer>2.0</CoolDownMaxTimer>
|
<StrengthOfEffect>1.3</StrengthOfEffect>
|
||||||
|
<Active>false</Active>
|
||||||
</SprintAbility>
|
</SprintAbility>
|
||||||
@@ -9,8 +9,11 @@
|
|||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="CoolDownMaxTimer" type="t:double" minOccurs="0">
|
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>This is the cooldown on sprint</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>This is the strength of the sprint effect</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Active" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>True if currently sprinting.</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
||||||
<Content></Content>
|
<Content></Content>
|
||||||
<Resource></Resource>
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
<Color R="1" G="1" B="1" A="1"/>
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
<Visible>true</Visible>
|
<Visible>true</Visible>
|
||||||
<Alignment><Center/></Alignment>
|
<Alignment><Center/></Alignment>
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<TextFieldReader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="TextFieldReader.xsd">
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType></ComponentType>
|
||||||
|
<Field></Field>
|
||||||
|
</TextFieldReader>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?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="TextFieldReader">
|
||||||
|
<xs:annotation><xs:documentation>Reads a value from a specific field of a compoent of parent entity and writes it to the Text component on this entity.</xs:documentation></xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="ParentEntityName" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The name of the parent entity to read the component field from. Leave empty to read from this entity.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ComponentType" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The component type to read the field value from.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Field" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The field name to read the value from.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/PickUpHolder.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.20782185" Y="7.18348074" Z="-51.9578781"/>
|
||||||
|
<Scale X="0.5" Y="0.5" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="0.324000001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AmmoPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>8</Speed>
|
||||||
|
<Axis X="0" Y="0.100000001" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.36784196" Z="0"/>
|
||||||
|
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
|
||||||
|
<Orientation X="0" Y="72.7095108" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -2,6 +2,10 @@
|
|||||||
<Entity name="AnimationTests" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
<Entity name="AnimationTests" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:SceneLight>
|
||||||
|
<Gamma>0.30000001192092896</Gamma>
|
||||||
|
<Exposure>3</Exposure>
|
||||||
|
</c:SceneLight>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
@@ -9,138 +13,542 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.100000001" Y="-1.11500001" Z="-3.10500026"/>
|
<Position X="0.100000001" Y="-1.5150001" Z="-3.70500016"/>
|
||||||
|
<Orientation X="0" Y="2.41300011" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:DirectionalLight/>
|
<c:DirectionalLight>
|
||||||
|
<Intensity>0</Intensity>
|
||||||
|
</c:DirectionalLight>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
||||||
<Orientation X="5.40800047" Y="3.65100026" Z="0"/>
|
<Orientation X="5.60000038" Y="3.14159203" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="Running">
|
<Entity name="Light">
|
||||||
<Components>
|
|
||||||
<c:Animation>
|
|
||||||
<AnimationName1>Run</AnimationName1>
|
|
||||||
<Weight1>0.5</Weight1>
|
|
||||||
<Time1>0.60188997954429357</Time1>
|
|
||||||
<Speed1>-1</Speed1>
|
|
||||||
<Speed2>1</Speed2>
|
|
||||||
<Weight2>0.5</Weight2>
|
|
||||||
<Time2>0.96957233017255007</Time2>
|
|
||||||
<Time3>0.093923612201312068</Time3>
|
|
||||||
<Speed3>1</Speed3>
|
|
||||||
</c:Animation>
|
|
||||||
<c:AnimationOffset>
|
|
||||||
<AnimationName>AimRifle</AnimationName>
|
|
||||||
<Time>0.5</Time>
|
|
||||||
</c:AnimationOffset>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="-0.690088332" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children>
|
|
||||||
<Entity name="R_Arm_Weapon_Joint">
|
|
||||||
<Components>
|
|
||||||
<c:BoneAttachment>
|
|
||||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
|
||||||
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
|
||||||
</c:BoneAttachment>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0.161975682" Y="1.06281972" Z="-0.216630161"/>
|
|
||||||
<Orientation X="-0.064812161" Y="-0.0739696771" Z="0.143780142"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
</Children>
|
|
||||||
</Entity>
|
|
||||||
<Entity>
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="0.70588237" G="0.70588237" R="1"/>
|
<Color A="1" B="0.70588237" G="0.70588237" R="1"/>
|
||||||
<Radius>10</Radius>
|
<Radius>8</Radius>
|
||||||
|
<Intensity>0.60000002384185791</Intensity>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.375567257" Y="2.13093901" Z="-0.718547285"/>
|
<Position X="1.32209361" Y="1.37392569" Z="-0.0505663045"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Assault">
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>AimBlend</Adder>
|
||||||
|
<Receiver>FinalBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>5</GlowIntensity>
|
||||||
|
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity name="WeaponAttachment">
|
||||||
<Components>
|
<Components>
|
||||||
<c:PointLight>
|
<c:BoneAttachment>
|
||||||
<Color A="1" B="1" G="0.70588237" R="0.70588237"/>
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
<Radius>10</Radius>
|
</c:BoneAttachment>
|
||||||
</c:PointLight>
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1.96873236" Y="0" Z="0"/>
|
<Position X="0.154985309" Y="1.07679462" Z="-0.201120675"/>
|
||||||
|
<Scale X="1.00000012" Y="1" Z="1.00000012"/>
|
||||||
|
<Orientation X="-0.0289514996" Y="-0.119508959" Z="0.18072544"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="AimBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>AimPrimary</Pose1>
|
||||||
|
<Pose2>AimSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AimPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimRifleA</AnimationName>
|
||||||
|
<Time>0.49999979138374329</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AimSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimSecWepA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FinalBlend">
|
||||||
|
<Components>
|
||||||
|
<c:BlendOverride>
|
||||||
|
<Master>ReloadSwitchBlend</Master>
|
||||||
|
<Slave>MovementBlend</Slave>
|
||||||
|
</c:BlendOverride>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandCrouchBlend</Pose1>
|
||||||
|
<Pose2>JumpDashBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StandCrouchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandMovement</Pose1>
|
||||||
|
<Pose2>CrouchMovement</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StandMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>RunWalkBlend</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="RunWalkBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>WalkF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunF</AnimationName>
|
||||||
|
<Time>0.89967686078176468</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeLeftF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeRightF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Time>0.33219857512804407</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="CrouchMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeLeftF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeRightF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchWalkF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchF</AnimationName>
|
||||||
|
<Time>0.86553330718370836</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="JumpDashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Jump</Pose1>
|
||||||
|
<Pose2>DashBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Jump">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>JumpF</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashFBBlend</Pose1>
|
||||||
|
<Pose2>DashLRBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashFBBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashForward</Pose1>
|
||||||
|
<Pose2>DashBackward</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashForward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashForwardF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBackward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashBackwardF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashLeft</Pose1>
|
||||||
|
<Pose2>DashRight</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashLeftF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashRight">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashRightF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadSwitchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ReloadSwitch</Pose1>
|
||||||
|
<Pose2>WeaponActionBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSwitch">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchU</AnimationName>
|
||||||
|
<Time>0.86721706215490468</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdleBlend</Pose1>
|
||||||
|
<Pose2>ShootBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdleBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdlePrimary</Pose1>
|
||||||
|
<Pose2>IdleSecondary</Pose2>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdlePrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleAssaultRifleU</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="IdleSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleSecWepU</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ShootPrimary</Pose1>
|
||||||
|
<Pose2>ShootSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ShootPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootFastRifleU</AnimationName>
|
||||||
|
<Time>0.19605135393254369</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootSecWepFastU</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity name="Plane">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Scale X="10" Y="1" Z="10"/>
|
<Scale X="5" Y="1" Z="5"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity name="Light">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:PointLight>
|
||||||
<AnimationName1>ShootFastRifle</AnimationName1>
|
<Color A="1" B="0.956862748" G="0.960784316" R="0.819607854"/>
|
||||||
<Time1>0.056234247235838808</Time1>
|
<Radius>8</Radius>
|
||||||
<Speed1>1</Speed1>
|
<Intensity>0.60000002384185791</Intensity>
|
||||||
<Speed2>1</Speed2>
|
</c:PointLight>
|
||||||
<AnimationName2>Idl</AnimationName2>
|
<c:Transform>
|
||||||
<Weight2>0.5</Weight2>
|
<Position X="-1.36898434" Y="1.37392569" Z="0.620898128"/>
|
||||||
<Time2>1.8308673495784191</Time2>
|
</c:Transform>
|
||||||
<AnimationName3>StrafeRigh</AnimationName3>
|
|
||||||
<Weight3>0.5</Weight3>
|
|
||||||
<Time3>0.32167823998061529</Time3>
|
|
||||||
<Speed3>1</Speed3>
|
|
||||||
</c:Animation>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform/>
|
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children/>
|
||||||
<Entity>
|
</Entity>
|
||||||
<Components>
|
<Entity name="Light">
|
||||||
<c:BoneAttachment>
|
<Components>
|
||||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
<c:PointLight>
|
||||||
</c:BoneAttachment>
|
<Radius>8</Radius>
|
||||||
<c:Model>
|
<Intensity>0.80000001192092896</Intensity>
|
||||||
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
</c:PointLight>
|
||||||
</c:Model>
|
<c:Transform>
|
||||||
<c:Transform>
|
<Position X="-0.127636135" Y="1.37392569" Z="-1.52101767"/>
|
||||||
<Position X="0" Y="0.803468645" Z="0"/>
|
</c:Transform>
|
||||||
</c:Transform>
|
</Components>
|
||||||
</Components>
|
<Children/>
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
</Children>
|
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="BlendTreeAim" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>AimPrimary</Pose1>
|
||||||
|
<Pose2>AimSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="AimSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimSecWepA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AimPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimRifleA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,445 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="BlendTreeAssault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BlendOverride>
|
||||||
|
<Master>ReloadSwitchBlend</Master>
|
||||||
|
<Slave>MovementBlend</Slave>
|
||||||
|
</c:BlendOverride>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandCrouchBlend</Pose1>
|
||||||
|
<Pose2>JumpDashBlend</Pose2>
|
||||||
|
<Weight>2.5146881298480398e-63</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StandCrouchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandMovement</Pose1>
|
||||||
|
<Pose2>CrouchMovement</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="CrouchMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0.033793529385008014</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeLeftF</AnimationName>
|
||||||
|
<Time>0.86105870560012221</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeRightF</AnimationName>
|
||||||
|
<Time>0.78838016755090479</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchWalkF</AnimationName>
|
||||||
|
<Time>0.56675415272830776</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchF</AnimationName>
|
||||||
|
<Time>0.99862473341677438</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="StandMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>RunWalkBlend</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>2.4565650245976452e-16</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="RunWalkBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>1.2938206818383024e-24</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>WalkF</AnimationName>
|
||||||
|
<Time>0.071908782138081051</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunF</AnimationName>
|
||||||
|
<Time>0.34392228616198395</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0.033793529385008014</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeLeftF</AnimationName>
|
||||||
|
<Time>0.25350140317161873</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeRightF</AnimationName>
|
||||||
|
<Time>0.27701693305173336</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Time>0.07079692416292005</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="JumpDashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Jump</Pose1>
|
||||||
|
<Pose2>DashBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Jump">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>JumpF</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashFBBlend</Pose1>
|
||||||
|
<Pose2>DashLRBlend</Pose2>
|
||||||
|
<Weight>0.014621149736541383</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashFBBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashForward</Pose1>
|
||||||
|
<Pose2>DashBackward</Pose2>
|
||||||
|
<Weight>0.014363533804961248</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashForward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashForwardF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBackward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashBackwardF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashLeft</Pose1>
|
||||||
|
<Pose2>DashRight</Pose2>
|
||||||
|
<Weight>4.3244885367500671e-16</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashLeftF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashRight">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashRightF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadSwitchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ReloadSwitch</Pose1>
|
||||||
|
<Pose2>WeaponActionBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSwitch">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchU</AnimationName>
|
||||||
|
<Time>0.00030848838797092881</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdleBlend</Pose1>
|
||||||
|
<Pose2>ShootBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdleBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdlePrimary</Pose1>
|
||||||
|
<Pose2>IdleSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdlePrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleAssaultRifleU</AnimationName>
|
||||||
|
<Time>1.4961314671805894</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="IdleSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleSecWepU</AnimationName>
|
||||||
|
<Time>1.4996565074703767</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ShootPrimary</Pose1>
|
||||||
|
<Pose2>ShootSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ShootPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootFastRifleU</AnimationName>
|
||||||
|
<Time>0.12914212153428517</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootSecWepFastU</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="PrimaryBlendTree" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>WeaponAction</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponAction">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Fire</Pose1>
|
||||||
|
<Pose2>Reload</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Fire">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootShotgunF</AnimationName>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Reload">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchF</AnimationName>
|
||||||
|
<Time>0.58991607886241582</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Time>0.14837891922093149</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="SecondaryBlendTree" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,598 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="AnimationTests" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:SceneLight>
|
||||||
|
<Gamma>0.30000001192092896</Gamma>
|
||||||
|
<Exposure>3</Exposure>
|
||||||
|
</c:SceneLight>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.100000001" Y="-1.5150001" Z="-3.70500016"/>
|
||||||
|
<Orientation X="0" Y="2.41300011" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight>
|
||||||
|
<Intensity>0</Intensity>
|
||||||
|
</c:DirectionalLight>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
||||||
|
<Orientation X="5.60000038" Y="3.14159203" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.70588237" G="0.70588237" R="1"/>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>0.60000002384185791</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.32209361" Y="1.37392569" Z="-0.0505663045"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Assault">
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>AimBlend</Adder>
|
||||||
|
<Receiver>FinalBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>5</GlowIntensity>
|
||||||
|
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponAttachment">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.157041892" Y="1.0375092" Z="-0.236085728"/>
|
||||||
|
<Orientation X="-0.00432149554" Y="-0.0343661793" Z="0.138000518"/>
|
||||||
|
<Scale X="1.00000012" Y="1" Z="1.00000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AimBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>AimPrimary</Pose1>
|
||||||
|
<Pose2>AimSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AimSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimSecWepA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AimPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimRifleA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FinalBlend">
|
||||||
|
<Components>
|
||||||
|
<c:BlendOverride>
|
||||||
|
<Master>ReloadSwitchBlend</Master>
|
||||||
|
<Slave>MovementBlend</Slave>
|
||||||
|
</c:BlendOverride>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandCrouchBlend</Pose1>
|
||||||
|
<Pose2>JumpDashBlend</Pose2>
|
||||||
|
<Weight>2.5146881298480398e-63</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StandCrouchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>StandMovement</Pose1>
|
||||||
|
<Pose2>CrouchMovement</Pose2>
|
||||||
|
<Weight>0.012867419418159054</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StandMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>RunWalkBlend</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>2.4565650245976452e-16</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="RunWalkBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>1.2938206818383024e-24</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>WalkF</AnimationName>
|
||||||
|
<Time>0.28642783708275554</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunF</AnimationName>
|
||||||
|
<Time>0.55844134110665933</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0.033793529385008014</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeLeftF</AnimationName>
|
||||||
|
<Time>0.46802045811629411</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>StrafeRightF</AnimationName>
|
||||||
|
<Time>0.49153598799640874</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Time>1.9353306180083529</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="CrouchMovement">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>MovementBlend</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Walk</Pose1>
|
||||||
|
<Pose2>StrafeLRBlend</Pose2>
|
||||||
|
<Weight>2.4565650245976452e-16</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="StrafeLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Left</Pose1>
|
||||||
|
<Pose2>Right</Pose2>
|
||||||
|
<Weight>0.033793529385008014</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Left">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeLeftF</AnimationName>
|
||||||
|
<Time>0.075577760544797146</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Right">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchStrafeRightF</AnimationName>
|
||||||
|
<Time>0.0028992224955801671</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Walk">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchWalkF</AnimationName>
|
||||||
|
<Time>0.78127320767298225</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>CrouchF</AnimationName>
|
||||||
|
<Time>0.99862473341677438</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="JumpDashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Jump</Pose1>
|
||||||
|
<Pose2>DashBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Jump">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>JumpF</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashFBBlend</Pose1>
|
||||||
|
<Pose2>DashLRBlend</Pose2>
|
||||||
|
<Weight>0.014621149736541383</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashFBBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashForward</Pose1>
|
||||||
|
<Pose2>DashBackward</Pose2>
|
||||||
|
<Weight>0.014363533804961248</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashForward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashForwardF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashBackward">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashBackwardF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashLRBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>DashLeft</Pose1>
|
||||||
|
<Pose2>DashRight</Pose2>
|
||||||
|
<Weight>4.3244885367500671e-16</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DashLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashLeftF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DashRight">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>DashRightF</AnimationName>
|
||||||
|
<Time>1</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadSwitchBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ReloadSwitch</Pose1>
|
||||||
|
<Pose2>WeaponActionBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSwitch">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchU</AnimationName>
|
||||||
|
<Time>0.00030848838797092881</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdleBlend</Pose1>
|
||||||
|
<Pose2>ShootBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdleBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>IdlePrimary</Pose1>
|
||||||
|
<Pose2>IdleSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="IdlePrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleAssaultRifleU</AnimationName>
|
||||||
|
<Time>0.71065052212526325</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="IdleSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleSecWepU</AnimationName>
|
||||||
|
<Time>0.71417556241505054</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
<Play>true</Play>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ShootPrimary</Pose1>
|
||||||
|
<Pose2>ShootSecondary</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ShootPrimary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootFastRifleU</AnimationName>
|
||||||
|
<Time>0.12914212153428517</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShootSecondary">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootSecWepFastU</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Plane">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="5" Y="1" Z="5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.956862748" G="0.960784316" R="0.819607854"/>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>0.60000002384185791</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.36898434" Y="1.37392569" Z="0.620898128"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>0.80000001192092896</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.127636135" Y="1.37392569" Z="-1.52101767"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -2,13 +2,15 @@
|
|||||||
<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:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
<Color A="0" B="0" G="0" R="39.2156868"/>
|
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Scale X="0.0400000028" Y="26.2000008" Z="0.0400000028"/>
|
<Position X="0.136586398" Y="0.92942369" Z="-0.139760047"/>
|
||||||
<Orientation X="1.57070005" Y="0" Z="0"/>
|
<Orientation X="-0.601206124" Y="0.132410824" Z="-0.129014626"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
+2334
-1708
File diff suppressed because it is too large
Load Diff
@@ -4,14 +4,39 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:CapturePoint/>
|
<c:CapturePoint/>
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
<c:Transform/>
|
|
||||||
<c:Trigger/>
|
<c:Trigger/>
|
||||||
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children/>
|
<Children>
|
||||||
|
<Entity name="Red">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/core/unitcube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Blue">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/core/unitcube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Spectator">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/core/unitcube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -2,36 +2,36 @@
|
|||||||
<Entity name="Shield" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
<Entity name="Shield" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Deploy</Pose1>
|
||||||
|
<Pose2>Idle</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Defender/DefenderShield.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="Shield">
|
<Entity name="Deploy">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Animation>
|
||||||
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
<AnimationName>ActivateDeactiveShieldF</AnimationName>
|
||||||
</c:Model>
|
<Time>1</Time>
|
||||||
<c:Shield/>
|
<Speed>1</Speed>
|
||||||
<c:Transform>
|
</c:Animation>
|
||||||
<Scale X="1.11800003" Y="0.0320000015" Z="1.9180001"/>
|
<c:Transform/>
|
||||||
<Orientation X="-1.57079995" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="VisibleSide">
|
<Entity name="Idle">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Shielded/>
|
<c:Animation>
|
||||||
<c:Model>
|
<AnimationName>ShieldFrontF</AnimationName>
|
||||||
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
<Speed>1</Speed>
|
||||||
<Color A="0" B="1" G="0" R="0"/>
|
</c:Animation>
|
||||||
<Transparent>true</Transparent>
|
<c:Transform/>
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0" Y="0" Z="0.0179871861"/>
|
|
||||||
<Scale X="1.01900005" Y="0.0120000001" Z="1.91000009"/>
|
|
||||||
<Orientation X="-1.57079995" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="HealthHUDAssault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
|
||||||
|
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="HealthText">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="1" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Text>
|
||||||
|
<Content>100/100</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57070696"/>
|
||||||
|
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="HealthBar">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="0.301960796" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BoostIcons">
|
||||||
|
<Components>
|
||||||
|
<c:BoostIconsHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.00500000035" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Assault">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Defender">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Sniper">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.345098048" G="0" R="1"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShiftAbility">
|
||||||
|
<Components>
|
||||||
|
<c:AbilityCooldownHUD/>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Abilities/Superman-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14159203"/>
|
||||||
|
<Scale X="0.0800000057" Y="0.0700000003" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Cooldown">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>0.0</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57099998"/>
|
||||||
|
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="HealthHUDDefender" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
|
||||||
|
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="HealthText">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="1" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Text>
|
||||||
|
<Content>100/100</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57070696"/>
|
||||||
|
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="HealthBar">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="0.301960796" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BoostIcons">
|
||||||
|
<Components>
|
||||||
|
<c:BoostIconsHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.00500000035" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Assault">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Defender">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Sniper">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.345098048" G="0" R="1"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShiftAbility">
|
||||||
|
<Components>
|
||||||
|
<c:AbilityCooldownHUD/>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Abilities/SheildDots-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14159203"/>
|
||||||
|
<Scale X="0.0400000028" Y="0.0400000028" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Cooldown">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>0.0</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57099998"/>
|
||||||
|
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="HealthHUDSniper" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
|
||||||
|
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="HealthText">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="1" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Text>
|
||||||
|
<Content>100/100</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57070696"/>
|
||||||
|
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="HealthBar">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="0.301960796" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BoostIcons">
|
||||||
|
<Components>
|
||||||
|
<c:BoostIconsHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.00500000035" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Assault">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Defender">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Sniper">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.345098048" G="0" R="1"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14199996"/>
|
||||||
|
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ShiftAbility">
|
||||||
|
<Components>
|
||||||
|
<c:AbilityCooldownHUD/>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Icons/Abilities/Dash-01.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DepthSort>false</DepthSort>
|
||||||
|
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="3.14159203"/>
|
||||||
|
<Scale X="0.0400000028" Y="0.0400000028" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Cooldown">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>0.0</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57099998"/>
|
||||||
|
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/PickUpHolder.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-7.1308527" Y="7.18348074" Z="-50.9762192"/>
|
||||||
|
<Scale X="0.5" Y="0.5" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="0.324000001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>8</Speed>
|
||||||
|
<Axis X="0" Y="0.100000001" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.36784196" Z="0"/>
|
||||||
|
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
|
||||||
|
<Orientation X="0" Y="40.1343727" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -8,15 +8,15 @@
|
|||||||
<Children>
|
<Children>
|
||||||
<Entity name="RedSpawn">
|
<Entity name="RedSpawn">
|
||||||
<Components>
|
<Components>
|
||||||
<c:PlayerSpawn/>
|
|
||||||
<c:Spawner>
|
|
||||||
<EntityFile>Schema/Entities/PlayerRed.xml</EntityFile>
|
|
||||||
</c:Spawner>
|
|
||||||
<c:Team>
|
<c:Team>
|
||||||
<Team>
|
<Team>
|
||||||
<Red/>
|
<Red/>
|
||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
|
<c:PlayerSpawn/>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/PlayerDefenderBlue.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.300000012" Y="0.0270000007" Z="0"/>
|
<Position X="0.300000012" Y="0.0270000007" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultRed.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultRed.mesh</Resource>
|
||||||
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -76,15 +76,15 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="BlueSpawn">
|
<Entity name="BlueSpawn">
|
||||||
<Components>
|
<Components>
|
||||||
<c:PlayerSpawn/>
|
|
||||||
<c:Spawner>
|
|
||||||
<EntityFile>Schema/Entities/Player.xml</EntityFile>
|
|
||||||
</c:Spawner>
|
|
||||||
<c:Team>
|
<c:Team>
|
||||||
<Team>
|
<Team>
|
||||||
<Blue/>
|
<Blue/>
|
||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
|
<c:PlayerSpawn/>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/PlayerAssaultBlue.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
|
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
@@ -94,11 +94,11 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.800000012" Y="0" Z="0"/>
|
<Position X="-0.600000024" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -107,11 +107,11 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.600000024" Y="0" Z="0"/>
|
<Position X="0.800000012" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,308 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="OverwatchCamera" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.049999997019767761</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-4" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="CameraAnchor">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="66" Y="59.2180023" Z="0"/>
|
||||||
|
<Orientation X="5.89000034" Y="1.57079637" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="SpectatorCamera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="SpectatorHUD">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="CapturePointHUD">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.190541431" Z="0"/>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.919596612" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ProgressionHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:CapturePointHUD>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePointHUD>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.811270177" Y="0.440691769" Z="-0.100000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ProgressionHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:CapturePointHUD>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePointHUD>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.62788737" Y="0.919596612" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ProgressionHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:CapturePointHUD>
|
||||||
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
|
</c:CapturePointHUD>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.820431828" Y="0.441878349" Z="-0.100000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ProgressionHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:CapturePointHUD>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePointHUD>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>0.10332605343919568</Percentage>
|
||||||
|
<Color A="0.699999988" B="0" G="0" R="1"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Orientation X="0" Y="0" Z="4.71238899"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<Color A="0.699999988" B="0" G="0" R="1"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.58304751" Y="0.919596612" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ProgressionHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:CapturePointHUD/>
|
||||||
|
<c:Fill>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="RespawnTimer">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>16</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="0.784313738"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.178199276" Z="0"/>
|
||||||
|
<Scale X="0.0250000004" Y="0.0250000004" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PickClassCamera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="PickClassHUD">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="DefenderClassPick">
|
||||||
|
<Components>
|
||||||
|
<c:Button/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:InputCmdButton>
|
||||||
|
<Command>PickClass</Command>
|
||||||
|
<PressValue>2</PressValue>
|
||||||
|
</c:InputCmdButton>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.349999994" Y="0.0500000007" Z="0"/>
|
||||||
|
<Scale X="0.0799999982" Y="0.0799999982" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AssaultClassPick">
|
||||||
|
<Components>
|
||||||
|
<c:Button/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitRaptor.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:InputCmdButton>
|
||||||
|
<Command>PickClass</Command>
|
||||||
|
<PressValue>1</PressValue>
|
||||||
|
</c:InputCmdButton>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.349999994" Y="0.149504215" Z="0"/>
|
||||||
|
<Scale X="0.0799999982" Y="0.0799999982" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="SniperClassPick">
|
||||||
|
<Components>
|
||||||
|
<c:Button/>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Test/aM4ME4GR.png</DiffuseTexture>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:InputCmdButton>
|
||||||
|
<Command>PickClass</Command>
|
||||||
|
<PressValue>3</PressValue>
|
||||||
|
</c:InputCmdButton>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.349999994" Y="-0.0500000007" Z="0"/>
|
||||||
|
<Scale X="0.0799999982" Y="0.0799999982" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user