Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 494746ad8b | |||
| b886d9146b | |||
| 57715d5846 | |||
| 16ef09b20b | |||
| fe87aa8e90 | |||
| b9b5f4bff7 | |||
| 5db1bddd08 | |||
| b366a8c149 | |||
| 483091a1de | |||
| 0e9be1d650 | |||
| 5679a88ddb | |||
| 289bde0395 | |||
| a3fef7bcd1 | |||
| 04fbd0d517 | |||
| 9308e60932 | |||
| 407149fbb0 | |||
| 4c52f55bf0 | |||
| 8449818cb7 | |||
| f632b45c9b | |||
| 7e6830af35 | |||
| dea57b4872 | |||
| 562afac9d1 | |||
| 0516794db6 | |||
| 7b32d92170 | |||
| 46eaedb186 | |||
| bb6e491eed | |||
| 669a7d13cf | |||
| 9229b77893 |
+1
-1
Submodule assets updated: 9e9d799f11...ed93148764
@@ -48,13 +48,13 @@ bool RayVsTriangle(const Ray& ray,
|
|||||||
bool trueOnNegativeDistance = false);
|
bool trueOnNegativeDistance = false);
|
||||||
//Return true if the ray hits any of the triangles in the model. Stops checking when a hit is detected.
|
//Return true if the ray hits any of the triangles in the model. Stops checking when a hit is detected.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
//Return true if the ray hits any of the triangles in the model.
|
//Return true if the ray hits any of the triangles in the model.
|
||||||
//Also returns the position of the intersection point. Will loop through all the whole model indices.
|
//Also returns the position of the intersection point. Will loop through all the whole model indices.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& outHitPosition);
|
glm::vec3& outHitPosition);
|
||||||
@@ -62,7 +62,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
//Also returns the distance from the ray origin to the closest
|
//Also returns the distance from the ray origin to the closest
|
||||||
//intersection point, and the barycentric u,v-coordinates. Will loop through all the whole model indices.
|
//intersection point, and the barycentric u,v-coordinates. Will loop through all the whole model indices.
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
float& outDistance,
|
float& outDistance,
|
||||||
@@ -70,7 +70,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
float& outVCoord);
|
float& outVCoord);
|
||||||
|
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& boxVelocity,
|
glm::vec3& boxVelocity,
|
||||||
@@ -80,7 +80,7 @@ bool AABBvsTriangles(const AABB& box,
|
|||||||
|
|
||||||
//Detects collision, but does not resolve.
|
//Detects collision, but does not resolve.
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ enum Output
|
|||||||
};
|
};
|
||||||
//Detects intersection and containment.
|
//Detects intersection and containment.
|
||||||
Output AABBvsTrianglesWContainment(const AABB& box,
|
Output AABBvsTrianglesWContainment(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix);
|
const glm::mat4& modelMatrix);
|
||||||
|
|
||||||
|
|||||||
@@ -16,15 +16,18 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
~Model();
|
~Model();
|
||||||
const std::vector<RawModel::MaterialProperties>& MaterialGroups() const { return m_RawModel->m_Materials; }
|
const std::vector<RawModel::MaterialProperties>& MaterialGroups() const { return m_Materials; }
|
||||||
const glm::mat4& Matrix() const { return m_RawModel->m_Matrix; }
|
unsigned int NumberOfVertices() const { return m_Vertices.size(); }
|
||||||
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
|
|
||||||
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
|
|
||||||
const AABB& Box() const { return m_Box; }
|
const AABB& Box() const { return m_Box; }
|
||||||
bool IsSkinned() const { return m_RawModel->IsSkinned(); }
|
bool IsSkinned() const { return m_IsSkinned; }
|
||||||
GLuint VAO;
|
GLuint VAO;
|
||||||
GLuint ElementBuffer;
|
GLuint ElementBuffer;
|
||||||
RawModel* m_RawModel;
|
//RawModel* m_RawModel;
|
||||||
|
|
||||||
|
Skeleton* m_Skeleton = nullptr;
|
||||||
|
std::vector<glm::vec3> m_Vertices;
|
||||||
|
std::vector<unsigned int> m_Indices;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AABB m_Box;
|
AABB m_Box;
|
||||||
@@ -34,6 +37,9 @@ private:
|
|||||||
GLuint TangentNormalsBuffer;
|
GLuint TangentNormalsBuffer;
|
||||||
GLuint BiTangentNormalsBuffer;
|
GLuint BiTangentNormalsBuffer;
|
||||||
GLuint TextureCoordBuffer;
|
GLuint TextureCoordBuffer;
|
||||||
|
|
||||||
|
std::vector<RawModel::MaterialProperties> m_Materials;
|
||||||
|
bool m_IsSkinned;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ struct ModelJob : RenderJob
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (model->IsSkinned()) {
|
if (model->IsSkinned()) {
|
||||||
Skeleton = Model->m_RawModel->m_Skeleton;
|
Skeleton = Model->m_Skeleton;
|
||||||
|
|
||||||
if (Skeleton != nullptr) {
|
if (Skeleton != nullptr) {
|
||||||
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
|
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
#include <boost/endian/buffers.hpp>
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
@@ -20,22 +21,17 @@
|
|||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
#include "ShaderProgram.h"
|
#include "ShaderProgram.h"
|
||||||
|
|
||||||
#include "boost\endian\buffers.hpp"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RawModelCustom : public Resource
|
class RawModelCustom : public Resource
|
||||||
{
|
{
|
||||||
friend class ResourceManager;
|
friend class ResourceManager;
|
||||||
|
friend class Model;
|
||||||
protected:
|
protected:
|
||||||
RawModelCustom(std::string fileName);
|
RawModelCustom(std::string fileName);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~RawModelCustom();
|
~RawModelCustom();
|
||||||
|
|
||||||
struct Vertex
|
struct RenderVertex {
|
||||||
{
|
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
glm::vec3 Normal;
|
glm::vec3 Normal;
|
||||||
glm::vec3 Tangent;
|
glm::vec3 Tangent;
|
||||||
@@ -43,7 +39,7 @@ public:
|
|||||||
glm::vec2 TextureCoords;
|
glm::vec2 TextureCoords;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SkinedVertex : public Vertex {
|
struct SkinedVertex : public RenderVertex {
|
||||||
glm::vec4 BoneIndices;
|
glm::vec4 BoneIndices;
|
||||||
glm::vec4 BoneWeights;
|
glm::vec4 BoneWeights;
|
||||||
};
|
};
|
||||||
@@ -91,7 +87,7 @@ public:
|
|||||||
unsigned int ShaderID = 0;
|
unsigned int ShaderID = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Vertex* Vertices() const {
|
const RenderVertex* Vertices() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return m_SkinedVertices.data();
|
return m_SkinedVertices.data();
|
||||||
} else {
|
} else {
|
||||||
@@ -99,16 +95,16 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int VertexSize() const {
|
unsigned int VertexSize() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return sizeof(SkinedVertex);
|
return sizeof(SkinedVertex);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return sizeof(Vertex);
|
return sizeof(RenderVertex);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int NumVertices() const {
|
size_t NumVertices() const {
|
||||||
if (hasSkin) {
|
if (hasSkin) {
|
||||||
return m_SkinedVertices.size();
|
return m_SkinedVertices.size();
|
||||||
} else {
|
} else {
|
||||||
@@ -116,17 +112,39 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const std::vector<unsigned int>& Indices() const {
|
||||||
|
return m_Indices;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsSkinned() const { return hasSkin; };
|
bool IsSkinned() const { return hasSkin; };
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& CollisionVertices();
|
||||||
|
|
||||||
|
size_t NumCollisionVertices() const {
|
||||||
|
return m_CollisionVertices.size();
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::vector<unsigned int>& CollisionIndices() const {
|
||||||
|
if (hasCollisionMesh) {
|
||||||
|
return m_CollisionIndices;
|
||||||
|
} else {
|
||||||
|
return m_Indices;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
std::vector<MaterialProperties> m_Materials;
|
std::vector<MaterialProperties> m_Materials;
|
||||||
|
|
||||||
std::vector<unsigned int> m_Indices;
|
|
||||||
Skeleton* m_Skeleton = nullptr;
|
Skeleton* m_Skeleton = nullptr;
|
||||||
glm::mat4 m_Matrix;
|
glm::mat4 m_Matrix;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool hasSkin;
|
bool hasSkin;
|
||||||
std::vector<Vertex> m_Vertices;
|
bool hasCollisionMesh = false;
|
||||||
|
std::vector<unsigned int> m_Indices;
|
||||||
|
std::vector<unsigned int> m_CollisionIndices;
|
||||||
|
std::vector<glm::vec3> m_CollisionVertices;
|
||||||
|
std::vector<RenderVertex> m_Vertices;
|
||||||
std::vector<SkinedVertex> m_SkinedVertices;
|
std::vector<SkinedVertex> m_SkinedVertices;
|
||||||
|
|
||||||
void ReadMeshFile(std::string filePath);
|
void ReadMeshFile(std::string filePath);
|
||||||
@@ -150,6 +168,11 @@ private:
|
|||||||
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
||||||
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
|
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
|
||||||
|
|
||||||
|
|
||||||
|
void ReadCollisionFile(std::string filePath);
|
||||||
|
void ReadCollisionFileData(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& ConstructCollisionList();
|
||||||
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Network/ESearchForServers.h"
|
#include "Network/ESearchForServers.h"
|
||||||
#include "Network/EConnectRequest.h"
|
#include "Network/EConnectRequest.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
class MainMenuSystem : public ImpureSystem
|
class MainMenuSystem : public ImpureSystem
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "Events/ESpawnerSpawn.h"
|
#include "Events/ESpawnerSpawn.h"
|
||||||
#include "Core/TransformSystem.h"
|
#include "Core/TransformSystem.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Rendering/Model.h"
|
||||||
|
|
||||||
class SpawnerSystem : public System
|
class SpawnerSystem : public System
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
<Gamma>1</Gamma>
|
<Gamma>1</Gamma>
|
||||||
<Exposure>0.82000017166137695</Exposure>
|
<Exposure>0.82000017166137695</Exposure>
|
||||||
</c:SceneLight>
|
</c:SceneLight>
|
||||||
|
<c:CapturePointGameMode>
|
||||||
|
<RespawnTime>0.32289272439493288</RespawnTime>
|
||||||
|
<MaxRespawnTime>0.5</MaxRespawnTime>
|
||||||
|
</c:CapturePointGameMode>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
@@ -73,7 +77,9 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="Cam">
|
<Entity name="Cam">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Camera/>
|
<c:Camera>
|
||||||
|
<FOV>47</FOV>
|
||||||
|
</c:Camera>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Shadow>false</Shadow>
|
<Shadow>false</Shadow>
|
||||||
@@ -92,6 +98,11 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="Spawn">
|
<Entity name="Spawn">
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Blue/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
<c:PlayerSpawn>
|
<c:PlayerSpawn>
|
||||||
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
|
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
|
||||||
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
|
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
|
||||||
@@ -99,6 +110,7 @@
|
|||||||
</c:PlayerSpawn>
|
</c:PlayerSpawn>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
<EntityFile></EntityFile>
|
<EntityFile></EntityFile>
|
||||||
@@ -109,6 +121,18 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Highgrounds/Hg21.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-1.75605178" Z="-20.9220009"/>
|
||||||
|
<Scale X="0.407000005" Y="0.407000005" Z="0.407000005"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,151 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="FriendlyBoostHUD" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.5</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="1.20000005" Y="1.20000005" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="BoostHUDBackground">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00300000003"/>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BoostIcons">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.47358617e-06" Y="-0.0191892758" Z="4.05375999e-07"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AssaultBoost">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0120000001" Y="0.00899999961" Z="-8.43336147e-06"/>
|
||||||
|
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Active">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\1</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="1.37254906"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.0149999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Inactive">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\1</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-8.43336147e-06"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DefenderBoost">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0120000001" Y="0.00900000054" Z="-8.43336147e-06"/>
|
||||||
|
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Active">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\2</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="1.17647064"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Inactive">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\2</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-8.43336147e-06"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="SniperBoost">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0310000014" Z="-1.21438188e-05"/>
|
||||||
|
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Active">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\3</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.392156869" G="0.392156869" R="1.17647064"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Inactive">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>\3</Content>
|
||||||
|
<Resource>Fonts/Hind-Edited.otf,64</Resource>
|
||||||
|
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-8.43336147e-06"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:PlayerSpawn>
|
<c:PlayerSpawn>
|
||||||
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
|
<AssaultFile>Schema/Entities/PlayerAssaultRed.xml</AssaultFile>
|
||||||
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
|
<DefenderFile>Schema/Entities/PlayerDefenderRed.xml</DefenderFile>
|
||||||
<SniperFile></SniperFile>
|
<SniperFile></SniperFile>
|
||||||
</c:PlayerSpawn>
|
</c:PlayerSpawn>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<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.549540162"/>
|
<Position X="0.800000012" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
<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.549540162"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
@@ -130,6 +130,66 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="Lights">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Light_front">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.000288648967" Y="0.000489665952" Z="0.0824639797"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light_Side">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
<Radius>0.40000000596046448</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0870000049" Y="0.0210000016" Z="0.186000004"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light_front2">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.000448234321" Y="-0.000760387513" Z="-0.323961914"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,219 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="MuzzleFlashBlueSidearm" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.080000000000000002</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Level1">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Cone1Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone1Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Level2">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Cone2Inside">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Inside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Cone2Outside">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Outside.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Level3">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlaneLeft">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneLeft.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneRight">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneRight.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneUp">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneUp.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlaneDown">
|
||||||
|
<Components>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>2</GlowIntensity>
|
||||||
|
<Resource>Models/Effects/MuzzleFlash/Red/PlaneDown.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Lights">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Light_front">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.000288648967" Y="0.000489665952" Z="0.0824639797"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light_Side">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
<Radius>0.40000000596046448</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0870000049" Y="0.0210000016" Z="0.186000004"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light_front2">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="1"/>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.000448234321" Y="-0.000760387513" Z="-0.323961914"/>
|
||||||
|
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
+3065
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,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.079999998211860657</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="-1.57099998" Z="0"/>
|
||||||
|
<Scale X="1" Y="0.0700000003" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
|
||||||
|
<Scale X="1" Y="0.0700000003" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.079999998211860657</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay7.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="-1.57099998" Z="0"/>
|
||||||
|
<Scale X="1" Y="0.0700000003" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay7.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
|
||||||
|
<Scale X="1" Y="0.0700000003" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.080000000000000002</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Fade>
|
||||||
|
<FadeTime>0.080000000000000002</FadeTime>
|
||||||
|
</c:Fade>
|
||||||
|
<c:NetworkComponent/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="-1.57099998" Z="0"/>
|
||||||
|
<Scale X="1" Y="0.0250000004" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
|
||||||
|
<Color A="1" B="0.588235319" G="0.588235319" R="2.35294127"/>
|
||||||
|
<KeepRatio>true</KeepRatio>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
|
||||||
|
<Scale X="1" Y="0.0250000004" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Entity name="WeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
<Entity name="ReloadEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Lifetime>
|
<c:Lifetime>
|
||||||
<Lifetime>2</Lifetime>
|
<Lifetime>1</Lifetime>
|
||||||
</c:Lifetime>
|
</c:Lifetime>
|
||||||
<c:ExplosionEffect>
|
<c:ExplosionEffect>
|
||||||
<ColorByDistance>true</ColorByDistance>
|
<Velocity X="0" Y="1" Z="0"/>
|
||||||
<Velocity X="3.33300018" Y="0.0320000015" Z="0"/>
|
<ExplosionOrigin X="-0.0450000018" Y="0.148000002" Z="-0.646000028"/>
|
||||||
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
<ExplosionDuration>1</ExplosionDuration>
|
||||||
<ExponentialAccelaration>true</ExponentialAccelaration>
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
<EndColor A="0" B="1" G="1" R="19.6078434"/>
|
|
||||||
<Randomness>true</Randomness>
|
<Randomness>true</Randomness>
|
||||||
</c:ExplosionEffect>
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -6,12 +6,14 @@
|
|||||||
<Lifetime>2</Lifetime>
|
<Lifetime>2</Lifetime>
|
||||||
</c:Lifetime>
|
</c:Lifetime>
|
||||||
<c:ExplosionEffect>
|
<c:ExplosionEffect>
|
||||||
<ColorByDistance>true</ColorByDistance>
|
<Velocity X="1.78000009" Y="0.0320000015" Z="0"/>
|
||||||
<Velocity X="1.63300014" Y="0.0320000015" Z="0"/>
|
<ExplosionOrigin X="0" Y="0.142000005" Z="-0.659000039"/>
|
||||||
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
<EndColor A="0" B="19.6078434" G="0.00392156886" R="1.96078432"/>
|
||||||
<ExponentialAccelaration>true</ExponentialAccelaration>
|
<RandomnessScalar>1.3399996757507324</RandomnessScalar>
|
||||||
<EndColor A="0" B="1" G="1" R="19.6078434"/>
|
|
||||||
<Randomness>true</Randomness>
|
<Randomness>true</Randomness>
|
||||||
|
<ColorByDistance>true</ColorByDistance>
|
||||||
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
|
<ColorDistanceScalar>5.0899982452392578</ColorDistanceScalar>
|
||||||
</c:ExplosionEffect>
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="SidearmWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Shielded/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0169804785" Y="-0.0188358482" Z="-0.222064406"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RaySideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.125075191" Z="-0.206788138"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashSideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0240342002" Y="0.116005458" Z="-0.0419839472"/>
|
||||||
|
<Scale X="0.5" Y="0.5" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
+2778
-2774
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,233 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>MovementBlend</Adder>
|
||||||
|
<Receiver>ActionBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/FirstPersonAssaultRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="ActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Fire</Pose1>
|
||||||
|
<Pose2>Reload</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Reload">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchF</AnimationName>
|
||||||
|
<Speed>0.5</Speed>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Fire">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootRifleF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ViewModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>1.5</GlowIntensity>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.120748267" Y="-0.22843127" Z="-0.181454599"/>
|
||||||
|
<Orientation X="0.0102799674" Y="-0.00312504289" Z="0.0428140014"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/WeaponAssaultReloadEffectViewRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00728808995" Y="0.0896582007" Z="-0.643795013"/>
|
||||||
|
<Orientation X="6.27600002" Y="0.00499999989" Z="0.00600000005"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.000221854658" Y="-0.000376355601" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayAssaultRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00179657922" Y="-0.00304772682" Z="-0.334699303"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmoHUD">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Ammo_Joint</BoneName>
|
||||||
|
<ScaleOffset X="0.5" Y="0.5" Z="1"/>
|
||||||
|
<InheritScale>true</InheritScale>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0540265888" Y="-0.0954296291" Z="-0.255526036"/>
|
||||||
|
<Orientation X="0.000777846028" Y="0.0774231106" Z="0.00124278688"/>
|
||||||
|
<Scale X="0.25000006" Y="0.250000149" Z="0.500000238"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Background">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||||
|
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Text">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MagazineAmmo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>32</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>AssaultWeapon</ComponentType>
|
||||||
|
<Field>MagazineAmmo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Ammo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>320</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>AssaultWeapon</ComponentType>
|
||||||
|
<Field>Ammo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FriendlyBoostAttachment">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/FriendlyBoostRedHUD.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="AssaultWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Shielded/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/ReloadEffectWorldRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00728808995" Y="0.0896582007" Z="-0.643795013"/>
|
||||||
|
<Orientation X="6.27600002" Y="0.00499999989" Z="0.00600000005"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-8.41593719e-05" Y="-0.000816107844" Z="0.0612007342"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayAssaultRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00179657922" Y="-0.00304772682" Z="-0.334699303"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="ReloadEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>2</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Out">
|
||||||
|
<Components>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="1" Z="0"/>
|
||||||
|
<ExplosionOrigin X="-0.0450000018" Y="0.148000002" Z="-0.646000028"/>
|
||||||
|
<TimeSinceDeath>1</TimeSinceDeath>
|
||||||
|
<Delay>1</Delay>
|
||||||
|
<Speed>-1</Speed>
|
||||||
|
<ExplosionDuration>1</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="In">
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>1</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="1" Z="0"/>
|
||||||
|
<ExplosionOrigin X="-0.0450000018" Y="0.148000002" Z="-0.646000028"/>
|
||||||
|
<ExplosionDuration>1</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,303 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>MovementBlend</Adder>
|
||||||
|
<Receiver>FinalBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Defender/FirstPersonDefenderRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="FinalBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ActionBlend</Pose1>
|
||||||
|
<Pose2>Shield</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Shield">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ActivateShieldF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Fire</Pose1>
|
||||||
|
<Pose2>ReloadBlend</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Fire">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootShotgunF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ReloadLoop</Pose1>
|
||||||
|
<Pose2>ReloadTransitionBlend</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadLoop">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShotgunReloadTwoF</AnimationName>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadTransitionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>ReloadStart</Pose1>
|
||||||
|
<Pose2>ReloadEnd</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadStart">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShotgunReloadOneF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadEnd">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShotgunReloadThreeF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmoHUD">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Ammo_Joint</BoneName>
|
||||||
|
<ScaleOffset X="0.600000024" Y="0.600000024" Z="0.600000024"/>
|
||||||
|
<InheritScale>true</InheritScale>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0540262833" Y="-0.0954347998" Z="-0.225546926"/>
|
||||||
|
<Orientation X="0.00124507793" Y="0.077417776" Z="0.00737103401"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000042" Z="0.299999952"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Background">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||||
|
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Text">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Ammo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>38</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>DefenderWeapon</ComponentType>
|
||||||
|
<Field>Ammo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="MagazineAmmo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>5</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>DefenderWeapon</ComponentType>
|
||||||
|
<Field>MagazineAmmo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FriendlyBoostAttachment">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/FriendlyBoostRedHUD.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0762779638" Y="-0.04478902" Z="6.07890324e-05"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponOrigin">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ViewModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/DefenderWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.120748043" Y="-0.228436321" Z="-0.151475564"/>
|
||||||
|
<Orientation X="0.0102800643" Y="-0.00312487315" Z="0.0428144038"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.119734153" Y="-0.145251781" Z="-0.564532101"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayDefenderRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.109966502"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0201820824" Y="0" Z="0"/>
|
||||||
|
<Scale X="1.5" Y="1.5" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Shielded/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/DefenderWeaponRed.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="ThirdPersonReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0100463303" Y="0.0624945536" Z="-0.372351319"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayDefenderRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0180841181" Y="0.0252480619" Z="-0.135249734"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0201820824" Y="0.0212024488" Z="-0.0305794869"/>
|
||||||
|
<Scale X="1.5" Y="1.5" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>MovementBlend</Adder>
|
||||||
|
<Receiver>ActionBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/FirstPersonAssaultRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleSecF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunSecF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Fire</Pose1>
|
||||||
|
<Pose2>Reload</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Fire">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootSecF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Reload">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchSecF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmunitionHUD">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Ammo_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.109812237" Y="-0.0832184851" Z="-0.403451651"/>
|
||||||
|
<Orientation X="0.000778344634" Y="0.077423349" Z="0.0012426693"/>
|
||||||
|
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AmmunitionHUDBackground">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00300000003"/>
|
||||||
|
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmunitionText">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MagazineAmmo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>16</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>SidearmWeapon</ComponentType>
|
||||||
|
<Field>MagazineAmmo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.00600000005" Z="0"/>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Infinity!">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>8</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0150000006" Y="-0.029000001" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.5710001"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FriendlyAmmoAttachment">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/FriendlyAmmoHUD.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmoShareEffectSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/AmmoShareEffectView.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponOrigin">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ViewModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>1.2999999523162842</GlowIntensity>
|
||||||
|
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.185786247" Y="-0.21622014" Z="-0.412707269"/>
|
||||||
|
<Orientation X="0.0102805095" Y="-0.00312478957" Z="0.0428138711"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/WeaponSidearmReloadEffectViewRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.189540595" Y="-0.114737265" Z="-0.681462705"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RaySideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashSideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.5" Y="0.5" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,239 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BlendAdditive>
|
||||||
|
<Adder>MovementBlend</Adder>
|
||||||
|
<Receiver>ActionBlend</Receiver>
|
||||||
|
</c:BlendAdditive>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Defender/FirstPersonDefenderRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="MovementBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Idle">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>IdleSecF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Run">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>RunSecF</AnimationName>
|
||||||
|
<Play>true</Play>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Fire</Pose1>
|
||||||
|
<Pose2>Reload</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</c:Blend>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Fire">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ShootSecF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Reload">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>ReloadSwitchSecF</AnimationName>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmunitionHUD">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Ammo_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.109812573" Y="-0.0832190216" Z="-0.373473227"/>
|
||||||
|
<Orientation X="0.00118373742" Y="0.077411525" Z="0.00458352407"/>
|
||||||
|
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AmmunitionHUDBackground">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00300000003"/>
|
||||||
|
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmunitionText">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MagazineAmmo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>16</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:TextFieldReader>
|
||||||
|
<ParentEntityName></ParentEntityName>
|
||||||
|
<ComponentType>SidearmWeapon</ComponentType>
|
||||||
|
<Field>MagazineAmmo</Field>
|
||||||
|
</c:TextFieldReader>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.00600000005" Z="0"/>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Infinity!">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>8</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0150000006" Y="-0.029000001" Z="0"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.5710001"/>
|
||||||
|
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FriendlyAmmoAttachment">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/FriendlyAmmoHUD.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmoShareEffectSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/AmmoShareEffectView.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponOrigin">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ViewModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>1.5</GlowIntensity>
|
||||||
|
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.18578662" Y="-0.216220587" Z="-0.382728726"/>
|
||||||
|
<Orientation X="0.010279973" Y="-0.00312555139" Z="0.0428142436"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/WeaponSidearmReloadEffectViewRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Muzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.192775041" Y="-0.117133088" Z="-0.647809923"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzleRay">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RaySideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzleFlash">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/MuzzleFlashSideArmRed.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.5" Y="0.5" Z="0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="ReloadEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="In">
|
||||||
|
<Components>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ExplosionOrigin X="0" Y="0.112999998" Z="-0.430000007"/>
|
||||||
|
<TimeSinceDeath>0.5</TimeSinceDeath>
|
||||||
|
<Delay>0.5</Delay>
|
||||||
|
<Speed>-1</Speed>
|
||||||
|
<ExplosionDuration>0.5</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>1.5</GlowIntensity>
|
||||||
|
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Out">
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.5</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ExplosionOrigin X="0" Y="0.113000005" Z="-0.430000007"/>
|
||||||
|
<ExplosionDuration>0.5</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<GlowIntensity>1.5</GlowIntensity>
|
||||||
|
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
|
||||||
|
<Shadow>false</Shadow>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -146,14 +146,14 @@ bool RayVsTriangle(const Ray& ray,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix)
|
const glm::mat4& modelMatrix)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < modelIndices.size();) {
|
for (int i = 0; i < modelIndices.size();) {
|
||||||
glm::vec3 v0 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v0 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
glm::vec3 v1 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v1 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
glm::vec3 v2 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v2 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
if (RayVsTriangle(ray, v0, v1, v2)) {
|
if (RayVsTriangle(ray, v0, v1, v2)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -194,7 +194,7 @@ bool RayVsTriangle(const Ray& ray,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
float& outDistance,
|
float& outDistance,
|
||||||
@@ -204,9 +204,9 @@ bool RayVsModel(const Ray& ray,
|
|||||||
outDistance = INFINITY;
|
outDistance = INFINITY;
|
||||||
bool hit = false;
|
bool hit = false;
|
||||||
for (int i = 0; i < modelIndices.size();) {
|
for (int i = 0; i < modelIndices.size();) {
|
||||||
glm::vec3 v0 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v0 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
glm::vec3 v1 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v1 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
glm::vec3 v2 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
|
glm::vec3 v2 = TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix);
|
||||||
float dist = outDistance;
|
float dist = outDistance;
|
||||||
float u;
|
float u;
|
||||||
float v;
|
float v;
|
||||||
@@ -221,7 +221,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RayVsModel(const Ray& ray,
|
bool RayVsModel(const Ray& ray,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& outHitPosition)
|
glm::vec3& outHitPosition)
|
||||||
@@ -548,7 +548,7 @@ BoxTriRes AABBvsTriangle(const AABB& box,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Output AABBvsTriangles(const AABB& box,
|
Output AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& boxVelocity,
|
glm::vec3& boxVelocity,
|
||||||
@@ -565,9 +565,9 @@ Output AABBvsTriangles(const AABB& box,
|
|||||||
glm::vec3 originalBoxVelocity(boxVelocity);
|
glm::vec3 originalBoxVelocity(boxVelocity);
|
||||||
for (int i = 0; i < modelIndices.size(); ) {
|
for (int i = 0; i < modelIndices.size(); ) {
|
||||||
std::array<glm::vec3, 3> triVertices = {
|
std::array<glm::vec3, 3> triVertices = {
|
||||||
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix),
|
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix),
|
||||||
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix),
|
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix),
|
||||||
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix)
|
TransformSystem::TransformPoint(modelVertices[modelIndices[i++]], modelMatrix)
|
||||||
};
|
};
|
||||||
glm::vec3 outVec;
|
glm::vec3 outVec;
|
||||||
bool collideWithGround = isOnGround;
|
bool collideWithGround = isOnGround;
|
||||||
@@ -595,7 +595,7 @@ Output AABBvsTriangles(const AABB& box,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& boxVelocity,
|
glm::vec3& boxVelocity,
|
||||||
@@ -615,7 +615,7 @@ bool AABBvsTriangles(const AABB& box,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix)
|
const glm::mat4& modelMatrix)
|
||||||
{
|
{
|
||||||
@@ -633,7 +633,7 @@ bool AABBvsTriangles(const AABB& box,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Output AABBvsTrianglesWContainment(const AABB& box,
|
Output AABBvsTrianglesWContainment(const AABB& box,
|
||||||
const RawModel::Vertex* modelVertices,
|
const std::vector<glm::vec3>& modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix)
|
const glm::mat4& modelMatrix)
|
||||||
{
|
{
|
||||||
@@ -741,7 +741,7 @@ boost::optional<EntityAABB> EntityFirstHitByRay(const Ray& ray, std::vector<Enti
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
float u, v;
|
float u, v;
|
||||||
if (RayVsModel(ray, model->Vertices(), model->m_RawModel->m_Indices, TransformSystem::ModelMatrix(entityBox.Entity), outDistance, u, v)) {
|
if (RayVsModel(ray, model->m_Vertices, model->m_Indices, TransformSystem::ModelMatrix(entityBox.Entity), outDistance, u, v)) {
|
||||||
outIntersectPos = ray.Origin() + outDistance * ray.Direction();
|
outIntersectPos = ray.Origin() + outDistance * ray.Direction();
|
||||||
return entityBox;
|
return entityBox;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,15 +41,15 @@ void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
|
|||||||
// Don't collide against invisible models.
|
// Don't collide against invisible models.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
RawModel* model;
|
Model* model;
|
||||||
std::string res = (std::string)boxB.Entity["Model"]["Resource"];
|
std::string res = (std::string)boxB.Entity["Model"]["Resource"];
|
||||||
try {
|
try {
|
||||||
model = ResourceManager::Load<RawModel, true>(res);
|
model = ResourceManager::Load<Model, true>(res);
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
float u, v;
|
float u, v;
|
||||||
hit = Collision::RayVsModel(ray, model->Vertices(), model->m_Indices, TransformSystem::ModelMatrix(boxB.Entity), dist, u, v);
|
hit = Collision::RayVsModel(ray, model->m_Vertices, model->m_Indices, TransformSystem::ModelMatrix(boxB.Entity), dist, u, v);
|
||||||
} else {
|
} else {
|
||||||
hit = Collision::RayVsAABB(ray, boxB, dist);
|
hit = Collision::RayVsAABB(ray, boxB, dist);
|
||||||
}
|
}
|
||||||
@@ -86,9 +86,9 @@ void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
|
|||||||
// Don't collide against invisible models.
|
// Don't collide against invisible models.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
RawModel* model;
|
Model* model;
|
||||||
try {
|
try {
|
||||||
model = ResourceManager::Load<RawModel, true>(boxB.Entity["Model"]["Resource"]);
|
model = ResourceManager::Load<Model, true>(boxB.Entity["Model"]["Resource"]);
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -98,7 +98,7 @@ void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
|
|||||||
glm::vec3 inOutVelocity = (glm::vec3)cPhysics["Velocity"];
|
glm::vec3 inOutVelocity = (glm::vec3)cPhysics["Velocity"];
|
||||||
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
||||||
float verticalStepHeight = (float)(double)cPhysics["VerticalStepHeight"];
|
float verticalStepHeight = (float)(double)cPhysics["VerticalStepHeight"];
|
||||||
if (Collision::AABBvsTriangles(boxA, model->Vertices(), model->m_Indices, modelMatrix, inOutVelocity, verticalStepHeight, isOnGround, resolutionVector)) {
|
if (Collision::AABBvsTriangles(boxA, model->m_Vertices, model->m_Indices, modelMatrix, inOutVelocity, verticalStepHeight, isOnGround, resolutionVector)) {
|
||||||
//Move the position to previous position if it is not moving in the xz-plane, else resolve with the resolution vector.
|
//Move the position to previous position if it is not moving in the xz-plane, else resolve with the resolution vector.
|
||||||
(Field<glm::vec3>)cTransform["Position"] += resolutionVector;
|
(Field<glm::vec3>)cTransform["Position"] += resolutionVector;
|
||||||
boxA = *Collision::EntityAbsoluteAABB(entity);
|
boxA = *Collision::EntityAbsoluteAABB(entity);
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ void TriggerSystem::UpdateComponent(EntityWrapper& triggerEntity, ComponentWrapp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RawModel* triggerModel = nullptr;
|
Model* triggerModel = nullptr;
|
||||||
glm::mat4 triggerModelMat;
|
glm::mat4 triggerModelMat;
|
||||||
if (triggerEntity.HasComponent("Model")) {
|
if (triggerEntity.HasComponent("Model")) {
|
||||||
try {
|
try {
|
||||||
triggerModel = ResourceManager::Load<RawModel, true>(triggerEntity["Model"]["Resource"]);
|
triggerModel = ResourceManager::Load<Model, true>(triggerEntity["Model"]["Resource"]);
|
||||||
triggerModelMat = TransformSystem::ModelMatrix(triggerEntity);
|
triggerModelMat = TransformSystem::ModelMatrix(triggerEntity);
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ void TriggerSystem::UpdateComponent(EntityWrapper& triggerEntity, ComponentWrapp
|
|||||||
? Collision::Output::OutContained
|
? Collision::Output::OutContained
|
||||||
: Collision::AABBvsTrianglesWContainment(
|
: Collision::AABBvsTrianglesWContainment(
|
||||||
colliderBox,
|
colliderBox,
|
||||||
triggerModel->Vertices(),
|
triggerModel->m_Vertices,
|
||||||
triggerModel->m_Indices,
|
triggerModel->m_Indices,
|
||||||
triggerModelMat);
|
triggerModelMat);
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ void AnimationSystem::CreateBlendTrees()
|
|||||||
continue;;
|
continue;;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ void AnimationSystem::UpdateAnimations(double dt)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -177,7 +177,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
LOG_ERROR("%s, RootNode skeleton invalid %s", e.NodeName, e.RootNode.Name().c_str());
|
LOG_ERROR("%s, RootNode skeleton invalid %s", e.NodeName, e.RootNode.Name().c_str());
|
||||||
return false;
|
return false;
|
||||||
@@ -300,7 +300,7 @@ bool AnimationSystem::OnEntityDeleted(Events::EntityDeleted& e)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -331,7 +331,7 @@ bool AnimationSystem::OnSetBlendWeight(Events::SetBlendWeight& e)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ void AutoBlendQueue::Insert(AutoBlendJob autoBlendJob)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -130,7 +130,7 @@ bool AutoBlendQueue::HasActiveBlendJob()
|
|||||||
return HasActiveBlendJob();
|
return HasActiveBlendJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
m_BlendQueue.pop_front();
|
m_BlendQueue.pop_front();
|
||||||
return HasActiveBlendJob();
|
return HasActiveBlendJob();
|
||||||
@@ -173,7 +173,7 @@ std::shared_ptr<BlendTree> AutoBlendQueue::GetBlendTree()
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ void BoneAttachmentSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_Skeleton;
|
||||||
|
|
||||||
if(skeleton == nullptr) {
|
if(skeleton == nullptr) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -332,14 +332,6 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass)
|
|||||||
glClearStencil(0x00);
|
glClearStencil(0x00);
|
||||||
glClear(GL_STENCIL_BUFFER_BIT);
|
glClear(GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
//Fill depth buffer
|
|
||||||
state->Enable(GL_STENCIL_TEST);
|
|
||||||
state->StencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
|
||||||
state->StencilFunc(GL_ALWAYS, 1, 0xFF);
|
|
||||||
state->StencilMask(0xFF);
|
|
||||||
state->DepthMask(GL_FALSE);
|
|
||||||
//DrawToDepthStencilBuffer(scene.Jobs.ShieldObjects, scene);
|
|
||||||
state->DepthMask(GL_TRUE);
|
|
||||||
|
|
||||||
//Draw Opaque shielded objects
|
//Draw Opaque shielded objects
|
||||||
state->Disable(GL_STENCIL_TEST);
|
state->Disable(GL_STENCIL_TEST);
|
||||||
@@ -354,10 +346,10 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass)
|
|||||||
GLERROR("OpaqueObjects");
|
GLERROR("OpaqueObjects");
|
||||||
|
|
||||||
//state->Disable(GL_STENCIL_TEST);
|
//state->Disable(GL_STENCIL_TEST);
|
||||||
//Draw Transparen Shielded objects
|
//Draw Transparen objects
|
||||||
state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
DrawModelRenderQueuesWithShieldCheck(scene.Jobs.TransparentObjects, scene); //might need changing
|
DrawModelRenderQueuesWithShieldCheck(scene.Jobs.TransparentObjects, scene); //might need changing
|
||||||
GLERROR("Shielded Transparent objects");
|
GLERROR("Transparent objects");
|
||||||
|
|
||||||
//Generate blur texture.
|
//Generate blur texture.
|
||||||
delete state;
|
delete state;
|
||||||
@@ -379,12 +371,6 @@ void DrawFinalPass::Draw(RenderScene& scene, BlurHUD* blurHUDPass)
|
|||||||
} else {
|
} else {
|
||||||
stateSprite = new DrawFinalPassState(m_FinalPassFrameBuffer->GetHandle());
|
stateSprite = new DrawFinalPassState(m_FinalPassFrameBuffer->GetHandle());
|
||||||
}
|
}
|
||||||
//Draw Transparen objects
|
|
||||||
//state->BlendFunc(GL_ONE, GL_ONE);
|
|
||||||
//state->StencilFunc(GL_EQUAL, 1, 0xFF);
|
|
||||||
//DrawModelRenderQueues(scene.Jobs.TransparentObjects, scene);
|
|
||||||
GLERROR("TransparentObjects");
|
|
||||||
//state->BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
stateSprite->Enable(GL_DEPTH_TEST);
|
stateSprite->Enable(GL_DEPTH_TEST);
|
||||||
//stateSprite->AlphaFunc(GL_GEQUAL, 0.05f);
|
//stateSprite->AlphaFunc(GL_GEQUAL, 0.05f);
|
||||||
//stateSprite->Enable(GL_ALPHA_TEST);
|
//stateSprite->Enable(GL_ALPHA_TEST);
|
||||||
@@ -638,7 +624,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
std::vector<glm::mat4> frameBones;
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
} else {
|
} else if (modelJob->Skeleton != nullptr) {
|
||||||
frameBones = modelJob->Skeleton->GetTPose();
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
Model::Model(std::string fileName)
|
Model::Model(std::string fileName)
|
||||||
{
|
{
|
||||||
//Try loading the model asyncronously, if it throws any exceptions then let it propagate back to caller.
|
//Try loading the model asyncronously, if it throws any exceptions then let it propagate back to caller.
|
||||||
m_RawModel = ResourceManager::Load<RawModel, true>(fileName);
|
auto rawModel = ResourceManager::Load<RawModel, true>(fileName);
|
||||||
|
|
||||||
for (auto& materialProperty : m_RawModel->m_Materials) {
|
for (auto& materialProperty : rawModel->m_Materials) {
|
||||||
switch (materialProperty.type) {
|
switch (materialProperty.type) {
|
||||||
case RawModel::MaterialType::SingleTextures:
|
case RawModel::MaterialType::SingleTextures:
|
||||||
{
|
{
|
||||||
@@ -46,11 +46,11 @@ Model::Model(std::string fileName)
|
|||||||
glGenBuffers(1, &buffer);
|
glGenBuffers(1, &buffer);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||||
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, m_RawModel->NumVertices() * m_RawModel->VertexSize(), m_RawModel->Vertices(), GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, rawModel->NumVertices() * rawModel->VertexSize(), rawModel->Vertices(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
glGenBuffers(1, &ElementBuffer);
|
glGenBuffers(1, &ElementBuffer);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementBuffer);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ElementBuffer);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_RawModel->m_Indices.size() * sizeof(unsigned int), &m_RawModel->m_Indices[0], GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, rawModel->Indices().size() * sizeof(unsigned int), rawModel->Indices().data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
glGenVertexArrays(1, &VAO);
|
glGenVertexArrays(1, &VAO);
|
||||||
glBindVertexArray(VAO);
|
glBindVertexArray(VAO);
|
||||||
@@ -58,7 +58,7 @@ Model::Model(std::string fileName)
|
|||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||||
std::vector<int> structSizes;
|
std::vector<int> structSizes;
|
||||||
if (m_RawModel->IsSkinned()) {
|
if (rawModel->IsSkinned()) {
|
||||||
structSizes = { 3, 3, 3, 3, 2, 4, 4 };
|
structSizes = { 3, 3, 3, 3, 2, 4, 4 };
|
||||||
} else {
|
} else {
|
||||||
structSizes = { 3, 3, 3, 3, 2 };
|
structSizes = { 3, 3, 3, 3, 2 };
|
||||||
@@ -77,7 +77,7 @@ Model::Model(std::string fileName)
|
|||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
if (m_RawModel->IsSkinned()) {
|
if (rawModel->IsSkinned()) {
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
}
|
}
|
||||||
@@ -89,7 +89,7 @@ Model::Model(std::string fileName)
|
|||||||
glEnableVertexAttribArray(2);
|
glEnableVertexAttribArray(2);
|
||||||
glEnableVertexAttribArray(3);
|
glEnableVertexAttribArray(3);
|
||||||
glEnableVertexAttribArray(4);
|
glEnableVertexAttribArray(4);
|
||||||
if (m_RawModel->IsSkinned()) {
|
if (rawModel->IsSkinned()) {
|
||||||
glEnableVertexAttribArray(5);
|
glEnableVertexAttribArray(5);
|
||||||
glEnableVertexAttribArray(6);
|
glEnableVertexAttribArray(6);
|
||||||
}
|
}
|
||||||
@@ -99,17 +99,29 @@ Model::Model(std::string fileName)
|
|||||||
|
|
||||||
glm::vec3 mini(INFINITY);
|
glm::vec3 mini(INFINITY);
|
||||||
glm::vec3 maxi(-INFINITY);
|
glm::vec3 maxi(-INFINITY);
|
||||||
|
for (unsigned int i = 0; i < rawModel->NumVertices(); i++) {
|
||||||
for (unsigned int i = 0; i < m_RawModel->NumVertices(); i++) {
|
const auto& v = rawModel->Vertices()[i];
|
||||||
const auto& v = m_RawModel->Vertices()[i];
|
|
||||||
mini = glm::min(mini, v.Position);
|
mini = glm::min(mini, v.Position);
|
||||||
maxi = glm::max(maxi, v.Position);
|
maxi = glm::max(maxi, v.Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Box = AABB(mini, maxi);
|
m_Box = AABB(mini, maxi);
|
||||||
|
|
||||||
|
m_Skeleton = rawModel->m_Skeleton;
|
||||||
|
m_Materials = rawModel->m_Materials;
|
||||||
|
m_Indices = rawModel->CollisionIndices();
|
||||||
|
m_IsSkinned = rawModel->IsSkinned();
|
||||||
|
// Copy vertex positions for collisions later
|
||||||
|
m_Vertices = rawModel->CollisionVertices();
|
||||||
|
|
||||||
|
ResourceManager::Release("RawModel", fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Model::~Model()
|
Model::~Model()
|
||||||
{
|
{
|
||||||
|
if (m_Skeleton != nullptr) {
|
||||||
|
delete m_Skeleton;
|
||||||
|
}
|
||||||
|
for (auto material : m_Materials) {
|
||||||
|
delete material.material;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
std::vector<glm::mat4> frameBones;
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
} else {
|
} else if (modelJob->Skeleton != nullptr) {
|
||||||
frameBones = modelJob->Skeleton->GetTPose();
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ RawModelCustom::RawModelCustom(std::string fileName)
|
|||||||
ReadMeshFile(fileName);
|
ReadMeshFile(fileName);
|
||||||
ReadMaterialFile(fileName);
|
ReadMaterialFile(fileName);
|
||||||
ReadAnimationFile(fileName);
|
ReadAnimationFile(fileName);
|
||||||
|
ReadCollisionFile(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RawModelCustom::ReadMeshFile(std::string filePath)
|
void RawModelCustom::ReadMeshFile(std::string filePath)
|
||||||
@@ -71,11 +72,11 @@ void RawModelCustom::ReadVertices(std::size_t& offset, char* fileData, const uns
|
|||||||
memcpy(&m_SkinedVertices[0], fileData + offset, m_SkinedVertices.size() * sizeof(SkinedVertex));
|
memcpy(&m_SkinedVertices[0], fileData + offset, m_SkinedVertices.size() * sizeof(SkinedVertex));
|
||||||
offset += m_SkinedVertices.size() * sizeof(SkinedVertex);
|
offset += m_SkinedVertices.size() * sizeof(SkinedVertex);
|
||||||
} else {
|
} else {
|
||||||
if (offset + m_Vertices.size() * sizeof(Vertex) > fileByteSize) {
|
if (offset + m_Vertices.size() * sizeof(RenderVertex) > fileByteSize) {
|
||||||
throw Resource::FailedLoadingException("Reading vertices failed");
|
throw Resource::FailedLoadingException("Reading vertices failed");
|
||||||
}
|
}
|
||||||
memcpy(&m_Vertices[0], fileData + offset, m_Vertices.size() * sizeof(Vertex));
|
memcpy(&m_Vertices[0], fileData + offset, m_Vertices.size() * sizeof(RenderVertex));
|
||||||
offset += m_Vertices.size() * sizeof(Vertex);
|
offset += m_Vertices.size() * sizeof(RenderVertex);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
@@ -491,14 +492,90 @@ void RawModelCustom::ReadAnimationKeyFrame(std::size_t& offset, char* fileData,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RawModelCustom::ReadCollisionFile(std::string filePath) {
|
||||||
|
char* fileData;
|
||||||
|
filePath += ".colli";
|
||||||
|
std::ifstream in(filePath.c_str(), std::ios_base::binary | std::ios_base::ate);
|
||||||
|
|
||||||
|
if (!in.is_open()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
unsigned int fileByteSize = static_cast<unsigned int>(in.tellg());
|
||||||
|
in.seekg(0, std::ios_base::beg);
|
||||||
|
|
||||||
|
fileData = new char[fileByteSize];
|
||||||
|
in.read(fileData, fileByteSize);
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
std::size_t offset = 0;
|
||||||
|
if (fileByteSize > 0) {
|
||||||
|
ReadCollisionFileData(offset, fileData, fileByteSize);
|
||||||
|
}
|
||||||
|
hasCollisionMesh = true;
|
||||||
|
delete[] fileData;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& RawModelCustom::CollisionVertices() {
|
||||||
|
if (hasCollisionMesh) {
|
||||||
|
return m_CollisionVertices;
|
||||||
|
}
|
||||||
|
else if (hasSkin) {
|
||||||
|
// We don't do collisions against skinned meshes now.
|
||||||
|
m_CollisionVertices = std::vector<glm::vec3>();
|
||||||
|
return m_CollisionVertices;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ConstructCollisionList();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void RawModelCustom::ReadCollisionFileData(std::size_t& offset, char* fileData, const unsigned int& fileByteSize){
|
||||||
|
m_CollisionVertices.resize(static_cast<std::size_t>(*(unsigned int*)(fileData + offset)));
|
||||||
|
offset += sizeof(unsigned int);
|
||||||
|
m_CollisionIndices.resize(static_cast<std::size_t>(*(unsigned int*)(fileData + offset)));
|
||||||
|
offset += sizeof(unsigned int);
|
||||||
|
|
||||||
|
if (offset + m_CollisionVertices.size() * sizeof(glm::vec3) > fileByteSize) {
|
||||||
|
throw Resource::FailedLoadingException("Reading collision vertices failed");
|
||||||
|
}
|
||||||
|
memcpy(&m_CollisionVertices[0], fileData + offset, m_CollisionVertices.size() * sizeof(glm::vec3));
|
||||||
|
offset += m_CollisionVertices.size() * sizeof(glm::vec3);
|
||||||
|
|
||||||
|
if (offset + m_CollisionIndices.size() * sizeof(unsigned int) > fileByteSize) {
|
||||||
|
throw Resource::FailedLoadingException("Reading collision indices failed");
|
||||||
|
}
|
||||||
|
memcpy(&m_CollisionIndices[0], fileData + offset, m_CollisionIndices.size() * sizeof(unsigned int));
|
||||||
|
offset += m_CollisionIndices.size() * sizeof(unsigned int);
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<glm::vec3>& RawModelCustom::ConstructCollisionList()
|
||||||
|
{
|
||||||
|
if (!hasCollisionMesh && m_CollisionVertices.size() == 0) {
|
||||||
|
if (hasSkin) {
|
||||||
|
m_CollisionVertices.reserve(m_SkinedVertices.size());
|
||||||
|
for (const auto& vertex : m_SkinedVertices) {
|
||||||
|
m_CollisionVertices.push_back(vertex.Position);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
m_CollisionVertices.reserve(m_Vertices.size());
|
||||||
|
for (const auto& vertex : m_Vertices) {
|
||||||
|
m_CollisionVertices.push_back(vertex.Position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_CollisionVertices;
|
||||||
|
}
|
||||||
|
|
||||||
RawModelCustom::~RawModelCustom()
|
RawModelCustom::~RawModelCustom()
|
||||||
{
|
{
|
||||||
if (m_Skeleton != nullptr) {
|
// Ownership of skeleton and materials get transferred to Model
|
||||||
delete m_Skeleton;
|
// if (m_Skeleton != nullptr) {
|
||||||
}
|
// delete m_Skeleton;
|
||||||
for (auto material : m_Materials) {
|
// }
|
||||||
delete material.material;
|
//for (auto material : m_Materials) {
|
||||||
}
|
// delete material.material;
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -184,7 +184,7 @@ bool RenderSystem::isEntityVisible(EntityWrapper& entity)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Hide things parented to local player if they have the HiddenFromLocalPlayer component
|
// Hide things parented to local player if they have the HiddenFromLocalPlayer component
|
||||||
bool outOfBodyExperience = false; // ResourceManager::Load<ConfigFile>("Config.ini")->Get<bool>("Debug.OutOfBodyExperience", false);
|
bool outOfBodyExperience = ResourceManager::Load<ConfigFile>("Config.ini")->Get<bool>("Debug.OutOfBodyExperience", false);
|
||||||
if (
|
if (
|
||||||
(entity.HasComponent("HiddenForLocalPlayer") || entity.FirstParentWithComponent("HiddenForLocalPlayer").Valid())
|
(entity.HasComponent("HiddenForLocalPlayer") || entity.FirstParentWithComponent("HiddenForLocalPlayer").Valid())
|
||||||
&& (entity == m_LocalPlayer || entity.IsChildOf(m_LocalPlayer))
|
&& (entity == m_LocalPlayer || entity.IsChildOf(m_LocalPlayer))
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ void ShadowPass::Draw(RenderScene & scene)
|
|||||||
std::vector<glm::mat4> frameBones;
|
std::vector<glm::mat4> frameBones;
|
||||||
if (modelJob->BlendTree != nullptr) {
|
if (modelJob->BlendTree != nullptr) {
|
||||||
frameBones = modelJob->BlendTree->GetFinalPose();
|
frameBones = modelJob->BlendTree->GetFinalPose();
|
||||||
} else {
|
} else if (modelJob->Skeleton != nullptr) {
|
||||||
frameBones = modelJob->Skeleton->GetTPose();
|
frameBones = modelJob->Skeleton->GetTPose();
|
||||||
}
|
}
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
|
|||||||
//if player has the boost from a defender, subtract the damage taken by StrengthOfEffect amount
|
//if player has the boost from a defender, subtract the damage taken by StrengthOfEffect amount
|
||||||
auto playerBoostDefenderEntity = e.Victim.FirstChildByName("BoostDefender");
|
auto playerBoostDefenderEntity = e.Victim.FirstChildByName("BoostDefender");
|
||||||
if (playerBoostDefenderEntity.Valid()) {
|
if (playerBoostDefenderEntity.Valid()) {
|
||||||
e.Damage -= (double)playerBoostDefenderEntity["BoostDefender"]["StrengthOfEffect"];
|
e.Damage -= (const double&)playerBoostDefenderEntity["BoostDefender"]["StrengthOfEffect"];
|
||||||
}
|
}
|
||||||
if (health > 0) {
|
if (health > 0 && e.Damage > 0) {
|
||||||
health -= e.Damage;
|
health -= e.Damage;
|
||||||
if (health <= 0.0) {
|
if (health <= 0.0) {
|
||||||
Events::PlayerDeath ePlayerDeath;
|
Events::PlayerDeath ePlayerDeath;
|
||||||
|
|||||||
@@ -135,6 +135,8 @@ bool MainMenuSystem::OnInputCommand(const Events::InputCommand& e)
|
|||||||
OpenSubMenu(e);
|
OpenSubMenu(e);
|
||||||
} else if (e.Command == "Resolution" && e.Value == 1) {
|
} else if (e.Command == "Resolution" && e.Value == 1) {
|
||||||
OpenDropDown(e);
|
OpenDropDown(e);
|
||||||
|
} else if (e.Command == "Quit" && e.Value == 1) {
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -10,8 +10,7 @@ PlayerDeathSystem::PlayerDeathSystem(SystemParams params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PlayerDeathSystem::Update(double dt)
|
void PlayerDeathSystem::Update(double dt)
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
||||||
{
|
{
|
||||||
@@ -33,31 +32,35 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player)
|
|||||||
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
|
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
|
||||||
EntityWrapper deathEffectEW = entityFile->MergeInto(m_World);
|
EntityWrapper deathEffectEW = entityFile->MergeInto(m_World);
|
||||||
|
|
||||||
//components that we need from player
|
|
||||||
auto playerModel = player.FirstChildByName("PlayerModel");
|
auto playerModel = player.FirstChildByName("PlayerModel");
|
||||||
if (!playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) {
|
if (!playerModel.Valid()) {
|
||||||
if (player == LocalPlayer) {
|
if (player == LocalPlayer) {
|
||||||
setSpectatorCamera();
|
setSpectatorCamera();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto playerEntityModel = playerModel["Model"];
|
if (!playerModel.HasComponent("Model")) {
|
||||||
auto playerEntityAnimation = playerModel["Animation"];
|
return;
|
||||||
|
}
|
||||||
//copy the data from player to explosioneffectmodel
|
EntityWrapper deathEffect = playerModel.Clone();
|
||||||
playerEntityModel.Copy(deathEffectEW["Model"]);
|
for (auto& cAnim : deathEffect.ChildrenWithComponent("Animation")) {
|
||||||
playerEntityAnimation.Copy(deathEffectEW["Animation"]);
|
cAnim["Animation"]["Play"] = false;
|
||||||
|
}
|
||||||
//copy the models position,orientation
|
deathEffect.AttachComponent("ExplosionEffect");
|
||||||
deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
|
deathEffectEW["ExplosionEffect"].Copy(deathEffect["ExplosionEffect"]);
|
||||||
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
|
deathEffect.AttachComponent("Lifetime");
|
||||||
//effect,camera is relative to playersPosition
|
deathEffectEW["Lifetime"].Copy(deathEffect["Lifetime"]);
|
||||||
//deathEffectEW["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 0, 0);
|
deathEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
|
||||||
|
deathEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
|
||||||
|
for (auto& cModel : deathEffect.ChildrenWithComponent("Model")) {
|
||||||
|
EntityWrapper e(m_World, cModel.ID);
|
||||||
|
e.AttachComponent("ExplosionEffect");
|
||||||
|
deathEffectEW["ExplosionEffect"].Copy(e["ExplosionEffect"]);
|
||||||
|
}
|
||||||
|
EntityWrapper cam = deathEffectEW.FirstChildByName("Camera").Clone(deathEffect);
|
||||||
//camera (with lifetime) behind the player
|
//camera (with lifetime) behind the player
|
||||||
if (player == LocalPlayer) {
|
if (player == LocalPlayer) {
|
||||||
m_LocalPlayerDeathEffect = deathEffectEW;
|
m_LocalPlayerDeathEffect = deathEffect;
|
||||||
auto cam = deathEffectEW.FirstChildByName("Camera");
|
|
||||||
Events::SetCamera eSetCamera;
|
Events::SetCamera eSetCamera;
|
||||||
eSetCamera.CameraEntity = cam;
|
eSetCamera.CameraEntity = cam;
|
||||||
m_EventBroker->Publish(eSetCamera);
|
m_EventBroker->Publish(eSetCamera);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ void PlayerMovementSystem::Update(double dt)
|
|||||||
{
|
{
|
||||||
updateMovementControllers(dt);
|
updateMovementControllers(dt);
|
||||||
// Only do physics calculations on client and only for themselves.
|
// Only do physics calculations on client and only for themselves.
|
||||||
if (IsClient) {
|
if (IsClient || true) {
|
||||||
if (LocalPlayer.Valid()){
|
if (LocalPlayer.Valid()){
|
||||||
updateVelocity(LocalPlayer, dt);
|
updateVelocity(LocalPlayer, dt);
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ void PlayerMovementSystem::Update(double dt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (auto cDash : *pool) {
|
for (auto cDash : *pool) {
|
||||||
if (cDash.EntityID != LocalPlayer.ID && (double)cDash["CoolDownMaxTimer"] - (double)cDash["CoolDownTimer"] < 0.5) {
|
if ((double)cDash["CoolDownMaxTimer"] - (double)cDash["CoolDownTimer"] < 0.5) {
|
||||||
// Spawn one afterimage for each player that Dashes.
|
// Spawn one afterimage for each player that Dashes.
|
||||||
EntityWrapper player(m_World, cDash.EntityID);
|
EntityWrapper player(m_World, cDash.EntityID);
|
||||||
auto playerModel = player.FirstChildByName("PlayerModel");
|
auto playerModel = player.FirstChildByName("PlayerModel");
|
||||||
|
|||||||
@@ -112,15 +112,15 @@ bool SpawnerSystem::spawnedEntityIsColliding(EntityWrapper spawnedEntity, Entity
|
|||||||
if (!spawnedBox.Entity.HasComponent("Model")) {
|
if (!spawnedBox.Entity.HasComponent("Model")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
RawModel* model = nullptr;
|
Model* model = nullptr;
|
||||||
try {
|
try {
|
||||||
model = ResourceManager::Load<RawModel, true>(otherEntity["Model"]["Resource"]);
|
model = ResourceManager::Load<Model, true>(otherEntity["Model"]["Resource"]);
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model != nullptr && Collision::AABBvsTriangles(
|
if (model != nullptr && Collision::AABBvsTriangles(
|
||||||
spawnedBox,
|
spawnedBox,
|
||||||
model->Vertices(),
|
model->m_Vertices,
|
||||||
model->m_Indices,
|
model->m_Indices,
|
||||||
TransformSystem::ModelMatrix(otherEntity))) {
|
TransformSystem::ModelMatrix(otherEntity))) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Export::Export()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Export::Meshes(std::string pathName, bool selectedOnly)
|
bool Export::Meshes(std::string pathName, bool selectedOnly, bool isCollision)
|
||||||
{
|
{
|
||||||
MStatus status;
|
MStatus status;
|
||||||
if (pathName.empty()) {
|
if (pathName.empty()) {
|
||||||
@@ -92,8 +92,14 @@ bool Export::Meshes(std::string pathName, bool selectedOnly)
|
|||||||
Objects.append(node);
|
Objects.append(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GetMeshData(Objects);
|
GetMeshData(Objects, isCollision);
|
||||||
WriteMeshData(pathName);
|
|
||||||
|
if (!isCollision) {
|
||||||
|
WriteMeshData(pathName);
|
||||||
|
} else {
|
||||||
|
WriteCollisionData(pathName);
|
||||||
|
}
|
||||||
|
|
||||||
MGlobal::displayInfo(MString() + "Enabling IKSolvers");
|
MGlobal::displayInfo(MString() + "Enabling IKSolvers");
|
||||||
status = MGlobal::executeCommand("doEnableNodeItems true all;");
|
status = MGlobal::executeCommand("doEnableNodeItems true all;");
|
||||||
if (status != MS::kSuccess) {
|
if (status != MS::kSuccess) {
|
||||||
@@ -144,9 +150,9 @@ bool Export::Animations(std::string pathName, std::vector<AnimationInfo> animInf
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Export::GetMeshData(MObjectArray object)
|
bool Export::GetMeshData(MObjectArray object, bool collision)
|
||||||
{
|
{
|
||||||
meshes = m_MeshHandler.GetMeshData(object);
|
meshes = m_MeshHandler.GetMeshData(object, collision);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,6 +191,17 @@ void Export::WriteMeshData(std::string pathName)
|
|||||||
m_MeshFile.CloseFiles();
|
m_MeshFile.CloseFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Export::WriteCollisionData(std::string pathName) {
|
||||||
|
m_ColliFile.ASCIIFilePath(pathName + "_colli.txt");
|
||||||
|
m_ColliFile.binaryFilePath(pathName + ".colli");
|
||||||
|
|
||||||
|
m_ColliFile.OpenFiles();
|
||||||
|
|
||||||
|
m_ColliFile.writeToFiles((OutputData*)&meshes);
|
||||||
|
|
||||||
|
m_ColliFile.CloseFiles();
|
||||||
|
}
|
||||||
|
|
||||||
void Export::WriteAnimData(std::string pathName)
|
void Export::WriteAnimData(std::string pathName)
|
||||||
{
|
{
|
||||||
if (allBindPoses.size() > 0) {
|
if (allBindPoses.size() > 0) {
|
||||||
|
|||||||
@@ -22,18 +22,19 @@ public:
|
|||||||
int End;
|
int End;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool Meshes(std::string pathName, bool selectedOnly = false);
|
bool Meshes(std::string pathName, bool selectedOnly = false, bool isCollision = false);
|
||||||
bool Materials(std::string pathName);
|
bool Materials(std::string pathName);
|
||||||
bool Animations(std::string pathName, std::vector<AnimationInfo> animInfo);
|
bool Animations(std::string pathName, std::vector<AnimationInfo> animInfo);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool GetMeshData(MObjectArray object);
|
bool GetMeshData(MObjectArray object, bool collision);
|
||||||
bool GetMaterialData();
|
bool GetMaterialData();
|
||||||
bool GetAnimationData(AnimationInfo info);
|
bool GetAnimationData(AnimationInfo info);
|
||||||
|
|
||||||
void WriteMeshData(std::string pathName);
|
void WriteMeshData(std::string pathName);
|
||||||
void WriteAnimData(std::string pathName);
|
void WriteAnimData(std::string pathName);
|
||||||
void WriteMaterialData(std::string pathName);
|
void WriteMaterialData(std::string pathName);
|
||||||
|
void WriteCollisionData(std::string pathName);
|
||||||
|
|
||||||
Material m_MaterialHandler;
|
Material m_MaterialHandler;
|
||||||
Skeleton m_SkeletonHandler;
|
Skeleton m_SkeletonHandler;
|
||||||
@@ -44,6 +45,7 @@ private:
|
|||||||
WriteToFile m_MeshFile;
|
WriteToFile m_MeshFile;
|
||||||
WriteToFile m_AnimFile;
|
WriteToFile m_AnimFile;
|
||||||
WriteToFile m_MtrlFile;
|
WriteToFile m_MtrlFile;
|
||||||
|
WriteToFile m_ColliFile;
|
||||||
|
|
||||||
//Mesh Data
|
//Mesh Data
|
||||||
Mesh meshes;
|
Mesh meshes;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ Menu::Menu(QDialog* dialog)
|
|||||||
m_ExportSelectedButton = new QCheckBox(tr("&Export Selected"));
|
m_ExportSelectedButton = new QCheckBox(tr("&Export Selected"));
|
||||||
m_ExportAnimationsButton = new QCheckBox(tr("&Export Animations"));
|
m_ExportAnimationsButton = new QCheckBox(tr("&Export Animations"));
|
||||||
m_ExportMaterialButton = new QCheckBox(tr("&Export Material"));;
|
m_ExportMaterialButton = new QCheckBox(tr("&Export Material"));;
|
||||||
|
m_IsCollision = new QCheckBox(tr("&Export as collision mesh"));
|
||||||
|
|
||||||
m_ExportAnimationsButton->setChecked(true);
|
m_ExportAnimationsButton->setChecked(true);
|
||||||
m_ExportMaterialButton->setChecked(true);
|
m_ExportMaterialButton->setChecked(true);
|
||||||
@@ -32,6 +33,7 @@ Menu::Menu(QDialog* dialog)
|
|||||||
vbox->addWidget(m_ExportSelectedButton);
|
vbox->addWidget(m_ExportSelectedButton);
|
||||||
vbox->addWidget(m_ExportAnimationsButton);
|
vbox->addWidget(m_ExportAnimationsButton);
|
||||||
vbox->addWidget(m_ExportMaterialButton);
|
vbox->addWidget(m_ExportMaterialButton);
|
||||||
|
vbox->addWidget(m_IsCollision);
|
||||||
|
|
||||||
vbox->addStretch(1);
|
vbox->addStretch(1);
|
||||||
optionsBox->setLayout(vbox);
|
optionsBox->setLayout(vbox);
|
||||||
@@ -46,6 +48,7 @@ Menu::Menu(QDialog* dialog)
|
|||||||
connect(m_ExportSelectedButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
connect(m_ExportSelectedButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
||||||
connect(m_ExportAnimationsButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
connect(m_ExportAnimationsButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
||||||
connect(m_ExportMaterialButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
connect(m_ExportMaterialButton, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
||||||
|
connect(m_IsCollision, SIGNAL(clicked(bool)), this, SLOT(NULL));
|
||||||
|
|
||||||
// Creating several layouts, adding widgets & adding them to one layout in the end
|
// Creating several layouts, adding widgets & adding them to one layout in the end
|
||||||
QHBoxLayout* topLayout = new QHBoxLayout;
|
QHBoxLayout* topLayout = new QHBoxLayout;
|
||||||
@@ -163,40 +166,42 @@ void Menu::RemoveClipClicked(bool)
|
|||||||
|
|
||||||
void Menu::ExportAll(bool)
|
void Menu::ExportAll(bool)
|
||||||
{
|
{
|
||||||
if (m_ExportPath->text().isEmpty()) {
|
if (m_ExportPath->text().isEmpty()) {
|
||||||
MGlobal::displayError(MString() + "Please select a folder.");
|
MGlobal::displayError(MString() + "Please select a folder.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Export meshes
|
//Export meshes
|
||||||
if (!m_Export.Meshes(m_ExportPath->text().toLocal8Bit().constData(), m_ExportSelectedButton->isChecked())) {
|
if (!m_Export.Meshes(m_ExportPath->text().toLocal8Bit().constData(), m_ExportSelectedButton->isChecked(), m_IsCollision->isChecked())) {
|
||||||
MGlobal::displayError(MString() + "Could not export mesh");
|
MGlobal::displayError(MString() + "Could not export mesh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ExportMaterialButton->isChecked()) {
|
if (!m_IsCollision->isChecked()){
|
||||||
if (!m_Export.Materials(m_ExportPath->text().toLocal8Bit().constData())) {
|
if (m_ExportMaterialButton->isChecked()) {
|
||||||
MGlobal::displayError(MString() + "Could not export materials");
|
if (!m_Export.Materials(m_ExportPath->text().toLocal8Bit().constData())) {
|
||||||
return;
|
MGlobal::displayError(MString() + "Could not export materials");
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<Export::AnimationInfo> animations;
|
std::vector<Export::AnimationInfo> animations;
|
||||||
for (unsigned int i = 0; i < m_AnimationClipName.size(); i++) {
|
for (unsigned int i = 0; i < m_AnimationClipName.size(); i++) {
|
||||||
Export::AnimationInfo thisClip;
|
Export::AnimationInfo thisClip;
|
||||||
thisClip.Name = std::string(m_AnimationClipName[i]->text().toLocal8Bit().constData());
|
thisClip.Name = std::string(m_AnimationClipName[i]->text().toLocal8Bit().constData());
|
||||||
thisClip.Start = m_StartFrameLines[i]->text().toInt();
|
thisClip.Start = m_StartFrameLines[i]->text().toInt();
|
||||||
thisClip.End = m_EndFrameLines[i]->text().toInt();
|
thisClip.End = m_EndFrameLines[i]->text().toInt();
|
||||||
|
|
||||||
animations.push_back(thisClip);
|
animations.push_back(thisClip);
|
||||||
}
|
}
|
||||||
if (m_ExportAnimationsButton->isChecked()) {
|
if (m_ExportAnimationsButton->isChecked()) {
|
||||||
//Export Animations
|
//Export Animations
|
||||||
if (!m_Export.Animations(m_ExportPath->text().toLocal8Bit().constData(), animations)) {
|
if (!m_Export.Animations(m_ExportPath->text().toLocal8Bit().constData(), animations)) {
|
||||||
MGlobal::displayError(MString() + "Could not export animations");
|
MGlobal::displayError(MString() + "Could not export animations");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::CancelClicked(bool)
|
void Menu::CancelClicked(bool)
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ private:
|
|||||||
QCheckBox* m_ExportSelectedButton = nullptr;
|
QCheckBox* m_ExportSelectedButton = nullptr;
|
||||||
QCheckBox* m_ExportAnimationsButton = nullptr;
|
QCheckBox* m_ExportAnimationsButton = nullptr;
|
||||||
QCheckBox* m_ExportMaterialButton = nullptr;
|
QCheckBox* m_ExportMaterialButton = nullptr;
|
||||||
|
QCheckBox* m_IsCollision = nullptr;
|
||||||
|
|
||||||
QLineEdit* m_ExportPath = nullptr;
|
QLineEdit* m_ExportPath = nullptr;
|
||||||
QFileDialog* m_FileDialog = nullptr;
|
QFileDialog* m_FileDialog = nullptr;
|
||||||
|
|||||||
@@ -94,33 +94,37 @@ MeshClass::MeshClass()
|
|||||||
// return weightMap;
|
// return weightMap;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
Mesh MeshClass::GetMeshData(MObjectArray object)
|
Mesh MeshClass::GetMeshData(MObjectArray object, bool collision)
|
||||||
{
|
{
|
||||||
MS status;
|
MS status;
|
||||||
Mesh newMesh;
|
Mesh newMesh;
|
||||||
|
newMesh.isCollison = collision;
|
||||||
vector<VertexLayout>& vertexList = newMesh.Vertices;
|
vector<VertexLayout>& vertexList = newMesh.Vertices;
|
||||||
map<string, vector<int>>& indexLists = newMesh.Indices;
|
map<string, vector<int>>& indexLists = newMesh.Indices;
|
||||||
for (int ObjectID = 0; ObjectID < object.length(); ObjectID++) {
|
for (int ObjectID = 0; ObjectID < object.length(); ObjectID++) {
|
||||||
if (!object[ObjectID].hasFn(MFn::kMesh))
|
if (!object[ObjectID].hasFn(MFn::kMesh))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
||||||
MObject node = object[ObjectID];
|
MObject node = object[ObjectID];
|
||||||
MFnDependencyNode thisNode(node);
|
MFnDependencyNode thisNode(node);
|
||||||
MPlugArray connections;
|
MPlugArray connections;
|
||||||
thisNode.findPlug("inMesh").connectedTo(connections, true, true);
|
thisNode.findPlug("inMesh").connectedTo(connections, true, true);
|
||||||
MPlug weightList, weights;
|
MPlug weightList, weights;
|
||||||
MObject weightListObject;
|
MObject weightListObject;
|
||||||
for (unsigned int i = 0; i < connections.length(); i++) {
|
|
||||||
if (connections[i].node().apiType() == MFn::kSkinClusterFilter) {
|
|
||||||
MFnSkinCluster skinCluster(connections[i].node());
|
|
||||||
weightList = skinCluster.findPlug("weightList", &status);
|
|
||||||
weightListObject = weightList.attribute();
|
|
||||||
weights = skinCluster.findPlug("weights");
|
|
||||||
newMesh.hasSkin = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!collision) {
|
||||||
|
for (unsigned int i = 0; i < connections.length(); i++) {
|
||||||
|
if (connections[i].node().apiType() == MFn::kSkinClusterFilter) {
|
||||||
|
MFnSkinCluster skinCluster(connections[i].node());
|
||||||
|
weightList = skinCluster.findPlug("weightList", &status);
|
||||||
|
weightListObject = weightList.attribute();
|
||||||
|
weights = skinCluster.findPlug("weights");
|
||||||
|
newMesh.hasSkin = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// In here, we retrieve triangulated polygons from the mesh
|
// In here, we retrieve triangulated polygons from the mesh
|
||||||
MFnMesh mesh(object[ObjectID]);
|
MFnMesh mesh(object[ObjectID]);
|
||||||
@@ -257,62 +261,62 @@ Mesh MeshClass::GetMeshData(MObjectArray object)
|
|||||||
thisVertex.Pos[0] = pos.x;
|
thisVertex.Pos[0] = pos.x;
|
||||||
thisVertex.Pos[1] = pos.y;
|
thisVertex.Pos[1] = pos.y;
|
||||||
thisVertex.Pos[2] = pos.z;
|
thisVertex.Pos[2] = pos.z;
|
||||||
|
thisVertex.isCollision = collision;
|
||||||
|
|
||||||
status = faceVert.getNormal(normal, MSpace::kObject);
|
if (!collision) {
|
||||||
if (status != MS::kSuccess) {
|
status = faceVert.getNormal(normal, MSpace::kObject);
|
||||||
MGlobal::displayError(MString() + "faceVert.getNormal() ERROR: " + status.errorString() + "for local vertex " + i + " in " + faceID + " in mesh " + thisMeshPath.fullPathName());
|
if (status != MS::kSuccess) {
|
||||||
break;
|
MGlobal::displayError(MString() + "faceVert.getNormal() ERROR: " + status.errorString() + "for local vertex " + i + " in " + faceID + " in mesh " + thisMeshPath.fullPathName());
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
thisVertex.Normal[0] = normal[0];
|
thisVertex.Normal[0] = normal[0];
|
||||||
thisVertex.Normal[1] = normal[1];
|
thisVertex.Normal[1] = normal[1];
|
||||||
thisVertex.Normal[2] = normal[2];
|
thisVertex.Normal[2] = normal[2];
|
||||||
|
|
||||||
MFloatVector Tangent = Tangents[faceVert.tangentId()];
|
MFloatVector Tangent = Tangents[faceVert.tangentId()];
|
||||||
//MVector tmp = faceVert.getTangent(MSpace::kObject, NULL);
|
//MVector tmp = faceVert.getTangent(MSpace::kObject, NULL);
|
||||||
//tmp.get(biTangent);
|
//tmp.get(biTangent);
|
||||||
thisVertex.Tangent[0] = Tangent[0];
|
thisVertex.Tangent[0] = Tangent[0];
|
||||||
thisVertex.Tangent[1] = Tangent[1];
|
thisVertex.Tangent[1] = Tangent[1];
|
||||||
thisVertex.Tangent[2] = Tangent[2];
|
thisVertex.Tangent[2] = Tangent[2];
|
||||||
|
|
||||||
MFloatVector biNormal = biNormals[faceVert.tangentId()];
|
MFloatVector biNormal = biNormals[faceVert.tangentId()];
|
||||||
//faceVert.getBinormal().get(biNormal);
|
//faceVert.getBinormal().get(biNormal);
|
||||||
thisVertex.BiNormal[0] = biNormal[0];
|
thisVertex.BiNormal[0] = biNormal[0];
|
||||||
thisVertex.BiNormal[1] = biNormal[1];
|
thisVertex.BiNormal[1] = biNormal[1];
|
||||||
thisVertex.BiNormal[2] = biNormal[2];
|
thisVertex.BiNormal[2] = biNormal[2];
|
||||||
|
|
||||||
status = faceVert.getUV(UV);
|
status = faceVert.getUV(UV);
|
||||||
if (status != MS::kSuccess) {
|
if (status != MS::kSuccess) {
|
||||||
MGlobal::displayError(MString() + " faceVert.getUV() ERROR: " + status.errorString() + "for local vertex " + i + " in " + faceID + " in mesh " + thisMeshPath.fullPathName());
|
MGlobal::displayError(MString() + " faceVert.getUV() ERROR: " + status.errorString() + "for local vertex " + i + " in " + faceID + " in mesh " + thisMeshPath.fullPathName());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
thisVertex.Uv[0] = UV[0];
|
thisVertex.Uv[0] = UV[0];
|
||||||
thisVertex.Uv[1] = UV[1];
|
thisVertex.Uv[1] = UV[1];
|
||||||
|
|
||||||
|
|
||||||
if (newMesh.hasSkin) {
|
if (newMesh.hasSkin) {
|
||||||
thisVertex.useWeights = true;
|
thisVertex.useWeights = true;
|
||||||
float totalWeight = 0.0f;
|
float totalWeight = 0.0f;
|
||||||
unsigned int totalBones = 0;
|
unsigned int totalBones = 0;
|
||||||
MIntArray jointIDs /* ??? */;
|
MIntArray jointIDs /* ??? */;
|
||||||
weights.selectAncestorLogicalIndex(vertexIndex, weightListObject);
|
weights.selectAncestorLogicalIndex(vertexIndex, weightListObject);
|
||||||
weights.getExistingArrayAttributeIndices(jointIDs);
|
weights.getExistingArrayAttributeIndices(jointIDs);
|
||||||
for (unsigned int i = 0; i < jointIDs.length() && i < 4; i++) {
|
for (unsigned int i = 0; i < jointIDs.length() && i < 4; i++) {
|
||||||
if (weights[i].asFloat() > 0.001f) {
|
if (weights[i].asFloat() > 0.001f) {
|
||||||
thisVertex.BoneIndices[totalBones] = jointIDs[i];
|
thisVertex.BoneIndices[totalBones] = jointIDs[i];
|
||||||
thisVertex.BoneWeights[totalBones] = weights[i].asFloat();
|
thisVertex.BoneWeights[totalBones] = weights[i].asFloat();
|
||||||
totalWeight = totalWeight + weights[i].asFloat();
|
totalWeight = totalWeight + weights[i].asFloat();
|
||||||
totalBones++;
|
totalBones++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 4; i++) {
|
for (unsigned int i = 0; i < 4; i++) {
|
||||||
//thisVertex.BoneWeights[i] = thisVertex.BoneWeights[i] / totalWeight;
|
//thisVertex.BoneWeights[i] = thisVertex.BoneWeights[i] / totalWeight;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
thisVertex.useWeights = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//float totalWeight = thisVertex.BoneWeights[0] + thisVertex.BoneWeights[1] + thisVertex.BoneWeights[2] + thisVertex.BoneWeights[3];
|
//float totalWeight = thisVertex.BoneWeights[0] + thisVertex.BoneWeights[1] + thisVertex.BoneWeights[2] + thisVertex.BoneWeights[3];
|
||||||
//if (totalWeight > 0.0001f) {
|
//if (totalWeight > 0.0001f) {
|
||||||
// thisVertex.BoneWeights[0] /= totalWeight;
|
// thisVertex.BoneWeights[0] /= totalWeight;
|
||||||
|
|||||||
@@ -11,7 +11,8 @@
|
|||||||
class VertexLayout : public OutputData
|
class VertexLayout : public OutputData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool useWeights = true;
|
bool isCollision = false;
|
||||||
|
bool useWeights = false;
|
||||||
float Pos[3]{ 0 };
|
float Pos[3]{ 0 };
|
||||||
float Normal[3]{ 0 };
|
float Normal[3]{ 0 };
|
||||||
float Tangent[3]{ 0 };
|
float Tangent[3]{ 0 };
|
||||||
@@ -23,28 +24,31 @@ public:
|
|||||||
virtual void WriteBinary(std::ostream& out)
|
virtual void WriteBinary(std::ostream& out)
|
||||||
{
|
{
|
||||||
out.write((char*)&Pos, sizeof(float) * 3);
|
out.write((char*)&Pos, sizeof(float) * 3);
|
||||||
out.write((char*)&Normal, sizeof(float) * 3);
|
if (!isCollision) {
|
||||||
out.write((char*)&Tangent, sizeof(float) * 3);
|
out.write((char*)&Normal, sizeof(float) * 3);
|
||||||
out.write((char*)&BiNormal, sizeof(float) * 3);
|
out.write((char*)&Tangent, sizeof(float) * 3);
|
||||||
out.write((char*)&Uv, sizeof(float) * 2);
|
out.write((char*)&BiNormal, sizeof(float) * 3);
|
||||||
if (useWeights) {
|
out.write((char*)&Uv, sizeof(float) * 2);
|
||||||
out.write((char*)&BoneIndices, sizeof(float) * 4);
|
if (useWeights) {
|
||||||
out.write((char*)&BoneWeights, sizeof(float) * 4);
|
out.write((char*)&BoneIndices, sizeof(float) * 4);
|
||||||
|
out.write((char*)&BoneWeights, sizeof(float) * 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void WriteASCII(std::ostream& out) const
|
virtual void WriteASCII(std::ostream& out) const
|
||||||
{
|
{
|
||||||
out << Pos[0] << " " << Pos[1] << " " << Pos[2] << endl;
|
out << Pos[0] << " " << Pos[1] << " " << Pos[2] << endl;
|
||||||
out << Normal[0] << " " << Normal[1] << " " << Normal[2] << endl;
|
if (!isCollision) {
|
||||||
out << Tangent[0] << " " << Tangent[1] << " " << Tangent[2] << endl;
|
out << Normal[0] << " " << Normal[1] << " " << Normal[2] << endl;
|
||||||
out << BiNormal[0] << " " << BiNormal[1] << " " << BiNormal[2] << endl;
|
out << Tangent[0] << " " << Tangent[1] << " " << Tangent[2] << endl;
|
||||||
out << Uv[0] << " " << Uv[1] << endl;
|
out << BiNormal[0] << " " << BiNormal[1] << " " << BiNormal[2] << endl;
|
||||||
if (useWeights) {
|
out << Uv[0] << " " << Uv[1] << endl;
|
||||||
out << BoneIndices[0] << " " << BoneIndices[1] << " " << BoneIndices[2] << " " << BoneIndices[3] << endl;
|
if (useWeights) {
|
||||||
out << BoneWeights[0] << " " << BoneWeights[1] << " " << BoneWeights[2] << " " << BoneWeights[3] << endl;
|
out << BoneIndices[0] << " " << BoneIndices[1] << " " << BoneIndices[2] << " " << BoneIndices[3] << endl;
|
||||||
|
out << BoneWeights[0] << " " << BoneWeights[1] << " " << BoneWeights[2] << " " << BoneWeights[3] << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
bool operator==(const VertexLayout& right)
|
bool operator==(const VertexLayout& right)
|
||||||
{
|
{
|
||||||
@@ -62,6 +66,7 @@ public:
|
|||||||
|
|
||||||
class Mesh : public OutputData {
|
class Mesh : public OutputData {
|
||||||
public:
|
public:
|
||||||
|
bool isCollison = false;
|
||||||
bool hasSkin = false;
|
bool hasSkin = false;
|
||||||
unsigned int NumVertices;
|
unsigned int NumVertices;
|
||||||
unsigned int NumIndices;
|
unsigned int NumIndices;
|
||||||
@@ -70,7 +75,9 @@ public:
|
|||||||
|
|
||||||
virtual void WriteBinary(std::ostream& out)
|
virtual void WriteBinary(std::ostream& out)
|
||||||
{
|
{
|
||||||
out.write((char*)&hasSkin, sizeof(bool));
|
if (!isCollison) {
|
||||||
|
out.write((char*)&hasSkin, sizeof(bool));
|
||||||
|
}
|
||||||
out.write((char*)&NumVertices, sizeof(int));
|
out.write((char*)&NumVertices, sizeof(int));
|
||||||
out.write((char*)&NumIndices, sizeof(int));
|
out.write((char*)&NumIndices, sizeof(int));
|
||||||
for (auto aVertex : Vertices) {
|
for (auto aVertex : Vertices) {
|
||||||
@@ -86,11 +93,13 @@ public:
|
|||||||
virtual void WriteASCII(std::ostream& out) const
|
virtual void WriteASCII(std::ostream& out) const
|
||||||
{
|
{
|
||||||
out << "New Mesh _ not in binary" << endl;
|
out << "New Mesh _ not in binary" << endl;
|
||||||
out << "hasSkin: ";
|
if (!isCollison) {
|
||||||
if(hasSkin)
|
out << "hasSkin: ";
|
||||||
out << "true" << endl;
|
if (hasSkin)
|
||||||
else
|
out << "true" << endl;
|
||||||
out << "false" << endl;
|
else
|
||||||
|
out << "false" << endl;
|
||||||
|
}
|
||||||
out << "Number of vertices: " << NumVertices << endl;
|
out << "Number of vertices: " << NumVertices << endl;
|
||||||
out << "number of indices: " << NumIndices << endl;
|
out << "number of indices: " << NumIndices << endl;
|
||||||
int vertexNumber = 0;
|
int vertexNumber = 0;
|
||||||
@@ -115,7 +124,7 @@ class MeshClass
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MeshClass();
|
MeshClass();
|
||||||
Mesh GetMeshData(MObjectArray Object);
|
Mesh GetMeshData(MObjectArray Object, bool collision = false);
|
||||||
~MeshClass();
|
~MeshClass();
|
||||||
private:
|
private:
|
||||||
struct WeightInfo {
|
struct WeightInfo {
|
||||||
|
|||||||
Reference in New Issue
Block a user