Compare commits
98 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8102f3a2ea | |||
| cbb17d22d4 | |||
| eb42217885 | |||
| 7e12d00874 | |||
| 505a6c7396 | |||
| 8866dd6054 | |||
| b6fd18baed | |||
| 4245264029 | |||
| 44baa47bba | |||
| b95c1fdfa4 | |||
| 7b348379ac | |||
| 04f6233d99 | |||
| d6cc1eaac4 | |||
| d0de169613 | |||
| 79fe7693a6 | |||
| b6ba8a5bd7 | |||
| f8b9606cdf | |||
| 84fddf02e2 | |||
| d03b3fb071 | |||
| 7e92d6f53f | |||
| 47d2fb6a9b | |||
| 06f64f8fbf | |||
| 0c56a05144 | |||
| 382eff169f | |||
| 0c557317a9 | |||
| a304b00038 | |||
| d4797b0808 | |||
| ada1bac2a7 | |||
| 25890c8d6c | |||
| 0fb1dbcae1 | |||
| 9f3d887ac4 | |||
| b4081b3e45 | |||
| 8cf9caf7aa | |||
| 8d61632c26 | |||
| 2eaad2aa00 | |||
| 235b26ad61 | |||
| dd80323342 | |||
| af2f017cb4 | |||
| f80fb5eda8 | |||
| aa115befa9 | |||
| aa20b48188 | |||
| 96a735c542 | |||
| 666f1fd878 | |||
| 4c5d17b203 | |||
| 8286d052b3 | |||
| 67477ff3ae | |||
| aa3b8cd652 | |||
| b5b1140f5c | |||
| 7567f47a68 | |||
| 97d70f8e32 | |||
| 3baa988ad4 | |||
| a28748b35d | |||
| fcba0a28b8 | |||
| f1835fd89c | |||
| ecdb5ed07d | |||
| 6d2c656a04 | |||
| 2bf0434bcb | |||
| aacfc47fb5 | |||
| 680a12d88f | |||
| 46dff1a59c | |||
| 382e00cff4 | |||
| c984f76b2f | |||
| 84b7cf165c | |||
| 386e76f642 | |||
| a47317bb32 | |||
| e643581971 | |||
| 3826142e94 | |||
| 77e1dacb6f | |||
| 2a3009212a | |||
| 37aa1eaa18 | |||
| 1411964dcf | |||
| 35269315cc | |||
| 8f8b64f99c | |||
| 16c39df439 | |||
| 8437b9c734 | |||
| 6317a6092d | |||
| 4e70439653 | |||
| 24486c314d | |||
| 923589524b | |||
| 00eeed2e20 | |||
| 7b62dc19bf | |||
| 0630885d92 | |||
| 0e90382fd1 | |||
| 1667358e0c | |||
| 3467315aef | |||
| eb5fca898f | |||
| c9db46564f | |||
| 509a989d3b | |||
| bc4cc5db54 | |||
| 73708ec706 | |||
| 67017fcaf4 | |||
| 498afb3a5e | |||
| 4e535c1102 | |||
| 1689370356 | |||
| 60b3ce89b2 | |||
| a22d086e60 | |||
| 74c1beed20 | |||
| c8cb0ee939 |
@@ -4,3 +4,11 @@ bin/
|
|||||||
lib/
|
lib/
|
||||||
# Because apparently nobody has any self control
|
# Because apparently nobody has any self control
|
||||||
*.orig
|
*.orig
|
||||||
|
|
||||||
|
*.suo
|
||||||
|
*.sdf
|
||||||
|
tools/MayaExporter/MayaExporter/x64/Debug/
|
||||||
|
tools/MayaExporter/x64/Debug/
|
||||||
|
|
||||||
|
tools/MayaExporter/MayaExporter/Debug/
|
||||||
|
tools/MayaExporter/MayaExporter/GeneratedFiles/
|
||||||
|
|||||||
+1
-1
Submodule assets updated: e8174f630f...e4dc9529f2
@@ -10,7 +10,8 @@
|
|||||||
|
|
||||||
#include "../Core/Ray.h"
|
#include "../Core/Ray.h"
|
||||||
#include "../Core/AABB.h"
|
#include "../Core/AABB.h"
|
||||||
#include "../Rendering/RawModel.h"
|
#include "Rendering/RawModelCustom.h"
|
||||||
|
//#include "Rendering/RawModelAssimp.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/Entity.h"
|
||||||
#include "../Core/EntityWrapper.h"
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
|
|
||||||
#include "Core/Util/Logging.h"
|
#include "Core/Util/Logging.h"
|
||||||
#include "Core/Util/IfDebug.h"
|
#include "Core/Util/IfDebug.h"
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef EComponentDeleted_h__
|
||||||
|
#define EComponentDeleted_h__
|
||||||
|
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "Event.h"
|
||||||
|
#include "Entity.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct ComponentDeleted : Event
|
||||||
|
{
|
||||||
|
EntityID Entity;
|
||||||
|
std::string ComponentType;
|
||||||
|
// True if the component was deleted as a result of the entity it was attached to being deleted
|
||||||
|
bool Cascaded;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef EEntityDeleted_h__
|
||||||
|
#define EEntityDeleted_h__
|
||||||
|
|
||||||
|
#include "Event.h"
|
||||||
|
#include "Entity.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct EntityDeleted : Event
|
||||||
|
{
|
||||||
|
EntityID DeletedEntity;
|
||||||
|
// True if the entity deletion was triggered because the entity's parent was deleted before it
|
||||||
|
bool Cascaded;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,15 +2,15 @@
|
|||||||
#define EPlayerDamage_h__
|
#define EPlayerDamage_h__
|
||||||
|
|
||||||
#include "EventBroker.h"
|
#include "EventBroker.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
namespace Events
|
namespace Events
|
||||||
{
|
{
|
||||||
|
|
||||||
struct PlayerDamage : Event
|
struct PlayerDamage : Event
|
||||||
{
|
{
|
||||||
double DamageAmount;
|
EntityWrapper Player;
|
||||||
EntityID PlayerDamagedID;
|
double Damage;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ struct PlayerSpawned : Event
|
|||||||
int PlayerID;
|
int PlayerID;
|
||||||
EntityWrapper Player;
|
EntityWrapper Player;
|
||||||
EntityWrapper Spawner;
|
EntityWrapper Spawner;
|
||||||
|
std::string PlayerName;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,16 +2,14 @@
|
|||||||
#define EShoot_h__
|
#define EShoot_h__
|
||||||
|
|
||||||
#include "EventBroker.h"
|
#include "EventBroker.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/EntityWrapper.h"
|
||||||
#include "Engine/GLM.h"
|
|
||||||
|
|
||||||
namespace Events
|
namespace Events
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Shoot : Event
|
struct Shoot : Event
|
||||||
{
|
{
|
||||||
//ID for who made the shot
|
EntityWrapper Player;
|
||||||
EntityID shooter;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ struct EntityWrapper
|
|||||||
|
|
||||||
static const EntityWrapper Invalid;
|
static const EntityWrapper Invalid;
|
||||||
|
|
||||||
bool HasComponent(const std::string& componentName);
|
const std::string Name();
|
||||||
|
bool HasComponent(const std::string& componentType);
|
||||||
EntityWrapper Parent();
|
EntityWrapper Parent();
|
||||||
EntityWrapper FirstChildByName(const std::string& name);
|
EntityWrapper FirstChildByName(const std::string& name);
|
||||||
|
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
||||||
bool IsChildOf(EntityWrapper potentialParent);
|
bool IsChildOf(EntityWrapper potentialParent);
|
||||||
bool Valid();
|
bool Valid();
|
||||||
|
|
||||||
@@ -34,6 +36,9 @@ struct EntityWrapper
|
|||||||
bool operator!=(const EntityWrapper& e) const;
|
bool operator!=(const EntityWrapper& e) const;
|
||||||
explicit operator EntityID() const;
|
explicit operator EntityID() const;
|
||||||
operator bool();
|
operator bool();
|
||||||
|
|
||||||
|
private:
|
||||||
|
EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|||||||
@@ -32,10 +32,10 @@ public:
|
|||||||
};
|
};
|
||||||
struct FailedLoadingException : public std::exception
|
struct FailedLoadingException : public std::exception
|
||||||
{
|
{
|
||||||
virtual const char* what() const throw()
|
FailedLoadingException(char const* const _Message)
|
||||||
{
|
: std::exception(_Message)
|
||||||
return "Resource is failed to load.";
|
{ }
|
||||||
}
|
FailedLoadingException() :std::exception("Resource failed to load.") { };
|
||||||
};
|
};
|
||||||
|
|
||||||
// Pretend that this is a pure virtual function that you have to implement
|
// Pretend that this is a pure virtual function that you have to implement
|
||||||
|
|||||||
@@ -8,8 +8,10 @@
|
|||||||
namespace Transform
|
namespace Transform
|
||||||
{
|
{
|
||||||
|
|
||||||
|
glm::mat4 AbsoluteTransformation(EntityWrapper entity);
|
||||||
glm::vec3 AbsolutePosition(EntityWrapper entity);
|
glm::vec3 AbsolutePosition(EntityWrapper entity);
|
||||||
glm::vec3 AbsolutePosition(World* world, EntityID entity);
|
glm::vec3 AbsolutePosition(World* world, EntityID entity);
|
||||||
|
glm::vec3 AbsoluteOrientationEuler(EntityWrapper entity);
|
||||||
glm::quat AbsoluteOrientation(EntityWrapper entity);
|
glm::quat AbsoluteOrientation(EntityWrapper entity);
|
||||||
glm::quat AbsoluteOrientation(World* world, EntityID entity);
|
glm::quat AbsoluteOrientation(World* world, EntityID entity);
|
||||||
glm::vec3 AbsoluteScale(EntityWrapper entity);
|
glm::vec3 AbsoluteScale(EntityWrapper entity);
|
||||||
|
|||||||
@@ -5,11 +5,15 @@
|
|||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "ObjectPool.h"
|
#include "ObjectPool.h"
|
||||||
#include "ComponentPool.h"
|
#include "ComponentPool.h"
|
||||||
|
#include "EventBroker.h"
|
||||||
|
|
||||||
class World
|
class World
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
World() = default;
|
World() = default;
|
||||||
|
World(EventBroker* eventBroker)
|
||||||
|
: m_EventBroker(eventBroker)
|
||||||
|
{ }
|
||||||
~World();
|
~World();
|
||||||
|
|
||||||
// Create empty entity
|
// Create empty entity
|
||||||
@@ -46,6 +50,7 @@ public:
|
|||||||
std::string GetName(EntityID entity) const;
|
std::string GetName(EntityID entity) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
EventBroker* m_EventBroker = nullptr;
|
||||||
EntityID m_CurrentEntityID = 0;
|
EntityID m_CurrentEntityID = 0;
|
||||||
|
|
||||||
std::unordered_map<EntityID, EntityID> m_EntityParents;
|
std::unordered_map<EntityID, EntityID> m_EntityParents;
|
||||||
@@ -55,6 +60,7 @@ private:
|
|||||||
std::unordered_map<EntityID, std::string> m_EntityNames;
|
std::unordered_map<EntityID, std::string> m_EntityNames;
|
||||||
|
|
||||||
EntityID generateEntityID();
|
EntityID generateEntityID();
|
||||||
|
void deleteEntityRecursive(EntityID entity, bool cascaded = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
#define Events_InputCommand_h__
|
#define Events_InputCommand_h__
|
||||||
|
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/EntityWrapper.h"
|
||||||
|
|
||||||
namespace Events
|
namespace Events
|
||||||
{
|
{
|
||||||
@@ -10,6 +11,7 @@ struct InputCommand : Event
|
|||||||
{
|
{
|
||||||
/** Numerical ID of the player. */
|
/** Numerical ID of the player. */
|
||||||
int PlayerID;
|
int PlayerID;
|
||||||
|
EntityWrapper Player;
|
||||||
/** The command that was sent. */
|
/** The command that was sent. */
|
||||||
std::string Command;
|
std::string Command;
|
||||||
/** The value of the command. */
|
/** The value of the command. */
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ private:
|
|||||||
PlayerID m_PlayerID = -1;
|
PlayerID m_PlayerID = -1;
|
||||||
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
|
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
|
||||||
bool m_IsConnected = false;
|
bool m_IsConnected = false;
|
||||||
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
// Server Client Lookup map
|
// Server Client Lookup map
|
||||||
// Assumes that root node for client and server is EntityID 0.
|
// Assumes that root node for client and server is EntityID 0.
|
||||||
|
|
||||||
@@ -79,12 +80,15 @@ private:
|
|||||||
void parsePing();
|
void parsePing();
|
||||||
void parseKick();
|
void parseKick();
|
||||||
void parsePlayersSpawned(Packet& packet);
|
void parsePlayersSpawned(Packet& packet);
|
||||||
|
void parseEntityDeletion(Packet& packet);
|
||||||
|
void parseComponentDeletion(Packet& packet);
|
||||||
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||||
void parseSnapshot(Packet& packet);
|
void parseSnapshot(Packet& packet);
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
bool hasServerTimedOut();
|
bool hasServerTimedOut();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
void sendInputCommands();
|
void sendInputCommands();
|
||||||
|
void sendLocalPlayerTransform();
|
||||||
void becomePlayer();
|
void becomePlayer();
|
||||||
// Mapping Logic
|
// Mapping Logic
|
||||||
// Returns if local EntityID exist in map
|
// Returns if local EntityID exist in map
|
||||||
@@ -92,13 +96,16 @@ private:
|
|||||||
// Returns if server EntityID exist in map
|
// Returns if server EntityID exist in map
|
||||||
bool serverClientMapsHasEntity(EntityID serverEntityID);
|
bool serverClientMapsHasEntity(EntityID serverEntityID);
|
||||||
void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
||||||
|
void deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
EventRelay<Client, Events::InputCommand> m_EInputCommand;
|
EventRelay<Client, Events::InputCommand> m_EInputCommand;
|
||||||
bool OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
EventRelay<Client, Events::PlayerDamage> m_EPlayeDamage;
|
EventRelay<Client, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
||||||
|
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -15,7 +15,10 @@ enum class MessageType
|
|||||||
PlayerConnected,
|
PlayerConnected,
|
||||||
BecomePlayer,
|
BecomePlayer,
|
||||||
Kick,
|
Kick,
|
||||||
OnPlayerSpawned
|
OnPlayerSpawned,
|
||||||
|
EntityDeleted,
|
||||||
|
ComponentDeleted,
|
||||||
|
PlayerTransform
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -12,10 +12,9 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define INPUTSIZE 4097
|
#define INPUTSIZE 32000
|
||||||
typedef unsigned int PlayerID;
|
typedef unsigned int PlayerID;
|
||||||
typedef unsigned int PacketID;
|
typedef unsigned int PacketID;
|
||||||
typedef unsigned int UserID;
|
|
||||||
|
|
||||||
class Network
|
class Network
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
#ifndef PlayerDefinition_h__
|
#ifndef PlayerDefinition_h__
|
||||||
#define PlayerDefinition_h__
|
#define PlayerDefinition_h__
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "../Core/Entity.h"
|
||||||
|
|
||||||
struct PlayerDefinition {
|
struct PlayerDefinition {
|
||||||
int EntityID = -1;
|
::EntityID EntityID = EntityID_Invalid;
|
||||||
std::string Name = "";
|
std::string Name = "";
|
||||||
boost::asio::ip::udp::endpoint Endpoint;
|
boost::asio::ip::udp::endpoint Endpoint;
|
||||||
unsigned int PacketID;
|
unsigned int PacketID;
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Network/EPlayerDisconnected.h"
|
#include "Network/EPlayerDisconnected.h"
|
||||||
#include "Core/EPlayerSpawned.h"
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
#include "Core/EEntityDeleted.h"
|
||||||
|
#include "Core/EComponentDeleted.h"
|
||||||
|
|
||||||
class Server : public Network
|
class Server : public Network
|
||||||
{
|
{
|
||||||
@@ -31,8 +33,8 @@ private:
|
|||||||
boost::asio::ip::udp::socket m_Socket;
|
boost::asio::ip::udp::socket m_Socket;
|
||||||
|
|
||||||
// Sending messages to client logic
|
// Sending messages to client logic
|
||||||
PlayerDefinition m_PlayerDefinitions[8]; //
|
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
|
||||||
std::vector<PlayerDefinition> m_ConnectedUsers;
|
// HACK: Fix INPUTSIZE
|
||||||
char readBuffer[INPUTSIZE] = { 0 };
|
char readBuffer[INPUTSIZE] = { 0 };
|
||||||
int bytesRead = 0;
|
int bytesRead = 0;
|
||||||
// time for previouse message
|
// time for previouse message
|
||||||
@@ -43,6 +45,7 @@ private:
|
|||||||
int pingIntervalMs;
|
int pingIntervalMs;
|
||||||
int snapshotInterval;
|
int snapshotInterval;
|
||||||
int checkTimeOutInterval = 100;
|
int checkTimeOutInterval = 100;
|
||||||
|
int m_NextPlayerID = 0;
|
||||||
|
|
||||||
//Timers
|
//Timers
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
@@ -58,14 +61,14 @@ private:
|
|||||||
// Private member functions
|
// Private member functions
|
||||||
int receive(char* data);
|
int receive(char* data);
|
||||||
void readFromClients();
|
void readFromClients();
|
||||||
void send(Packet& packet, UserID user);
|
|
||||||
void send(PlayerID player, Packet& packet);
|
void send(PlayerID player, Packet& packet);
|
||||||
void send(Packet& packet);
|
void send(Packet& packet);
|
||||||
void broadcast(Packet& packet);
|
void broadcast(Packet& packet);
|
||||||
void sendSnapshot();
|
void sendSnapshot();
|
||||||
|
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
||||||
void sendPing();
|
void sendPing();
|
||||||
void checkForTimeOuts();
|
void checkForTimeOuts();
|
||||||
void disconnect(UserID user);
|
void disconnect(PlayerID playerID);
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(Packet& packet);
|
||||||
void parseOnInputCommand(Packet& packet);
|
void parseOnInputCommand(Packet& packet);
|
||||||
void parseOnPlayerDamage(Packet& packet);
|
void parseOnPlayerDamage(Packet& packet);
|
||||||
@@ -74,7 +77,6 @@ private:
|
|||||||
void parseClientPing();
|
void parseClientPing();
|
||||||
void parsePing();
|
void parsePing();
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
void createPlayer();
|
|
||||||
void kick(PlayerID player);
|
void kick(PlayerID player);
|
||||||
PlayerID GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
|
PlayerID GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
|
||||||
// Debug event
|
// Debug event
|
||||||
@@ -82,6 +84,11 @@ private:
|
|||||||
bool OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
||||||
|
EventRelay<Server, Events::EntityDeleted> m_EEntityDeleted;
|
||||||
|
bool OnEntityDeleted(const Events::EntityDeleted& e);
|
||||||
|
EventRelay<Server, Events::ComponentDeleted> m_EComponentDeleted;
|
||||||
|
bool OnComponentDeleted(const Events::ComponentDeleted& e);
|
||||||
|
void parsePlayerTransform(Packet& packet);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef AnimationSystem_h__
|
||||||
|
#define AnimationSystem_h__
|
||||||
|
|
||||||
|
#include "GLM.h"
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Core/ResourceManager.h"
|
||||||
|
#include "Rendering/Model.h"
|
||||||
|
#include "Rendering/EAnimationComplete.h"
|
||||||
|
#include "Rendering/Skeleton.h"
|
||||||
|
|
||||||
|
class AnimationSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AnimationSystem(World* world, EventBroker* eventBroker)
|
||||||
|
: System(world, eventBroker)
|
||||||
|
, PureSystem("Animation")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
~AnimationSystem() { }
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt) override;
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -30,6 +30,13 @@ public:
|
|||||||
private:
|
private:
|
||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
|
||||||
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps) const;
|
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps) const;
|
||||||
|
void DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>& job, RenderScene& scene);
|
||||||
|
|
||||||
|
void BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<ExplosionEffectJob>& job, RenderScene& scene);
|
||||||
|
void BindModelUniforms(GLuint shaderHandle, std::shared_ptr<ModelJob>& job, RenderScene& scene);
|
||||||
|
|
||||||
|
void BindExplosionTextures(std::shared_ptr<ExplosionEffectJob>& job);
|
||||||
|
void BindModelTextures(std::shared_ptr<ModelJob>& job);
|
||||||
|
|
||||||
Texture* m_WhiteTexture;
|
Texture* m_WhiteTexture;
|
||||||
Texture* m_BlackTexture;
|
Texture* m_BlackTexture;
|
||||||
@@ -43,6 +50,7 @@ private:
|
|||||||
const LightCullingPass* m_LightCullingPass;
|
const LightCullingPass* m_LightCullingPass;
|
||||||
|
|
||||||
ShaderProgram* m_ForwardPlusProgram;
|
ShaderProgram* m_ForwardPlusProgram;
|
||||||
|
ShaderProgram* m_ExplosionEffectProgram;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef Events_AnimationComplete_h__
|
||||||
|
#define Events_AnimationComplete_h__
|
||||||
|
|
||||||
|
#include "../Core/EventBroker.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct AnimationComplete : Event
|
||||||
|
{
|
||||||
|
EntityWrapper Entity;
|
||||||
|
std::string Name;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
#ifndef ExplosionEffectJob_h__
|
||||||
|
#define ExplosionEffectJob_h__
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/ComponentWrapper.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
#include "Model.h"
|
||||||
|
#include "RenderJob.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "Camera.h"
|
||||||
|
#include "../Core/World.h"
|
||||||
|
|
||||||
|
struct ExplosionEffectJob : ModelJob
|
||||||
|
{
|
||||||
|
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialGroup matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage)
|
||||||
|
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage)
|
||||||
|
{
|
||||||
|
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"];
|
||||||
|
TimeSinceDeath = (double)explosionEffectComponent["TimeSinceDeath"];
|
||||||
|
ExplosionDuration = (double)explosionEffectComponent["ExplosionDuration"];
|
||||||
|
EndColor = (glm::vec4)explosionEffectComponent["EndColor"];
|
||||||
|
Randomness = (bool)explosionEffectComponent["Randomness"];
|
||||||
|
RandomnessScalar = (double)explosionEffectComponent["RandomnessScalar"];
|
||||||
|
Velocity = (glm::vec2)explosionEffectComponent["Velocity"];
|
||||||
|
ColorByDistance = (bool)explosionEffectComponent["ColorByDistance"];
|
||||||
|
ExponentialAccelaration = (bool)explosionEffectComponent["ExponentialAccelaration"];
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::vec3 ExplosionOrigin;
|
||||||
|
double TimeSinceDeath = 0.f; //Seconds
|
||||||
|
double ExplosionDuration = 2.f;
|
||||||
|
//bool Gravity = true;
|
||||||
|
//double GravityForce = 1.f; // Speed
|
||||||
|
//double ObjectRadius = 2.f; // TODO: Change this for object radius when it's available
|
||||||
|
glm::vec4 EndColor;
|
||||||
|
bool Randomness = false;
|
||||||
|
|
||||||
|
float RandomnessScalar = 1.f;
|
||||||
|
glm::vec2 Velocity;
|
||||||
|
bool ColorByDistance = false;
|
||||||
|
//bool ReverseAnimation = false;
|
||||||
|
//bool Wireframe = false;
|
||||||
|
bool ExponentialAccelaration = false;
|
||||||
|
|
||||||
|
std::array<float, 50> RandomNumbers = {
|
||||||
|
0.3257552917701f,
|
||||||
|
0.07601508315467f,
|
||||||
|
0.57408909014151f,
|
||||||
|
0.0f,
|
||||||
|
0.8618231368539f,
|
||||||
|
0.074957156588769f,
|
||||||
|
0.39413607511396f,
|
||||||
|
0.54579346698979f,
|
||||||
|
0.83222648353885f,
|
||||||
|
0.83635707285086f,
|
||||||
|
0.34473986148124f,
|
||||||
|
0.98092448710507f,
|
||||||
|
0.46346380070944f,
|
||||||
|
0.7308761201477f,
|
||||||
|
0.70832470371776f,
|
||||||
|
0.28268750909841f,
|
||||||
|
0.26291620883295f,
|
||||||
|
0.07685032816457f,
|
||||||
|
0.30760929515008f,
|
||||||
|
0.2781575388639f ,
|
||||||
|
0.016950582161988f ,
|
||||||
|
0.25787915254844f ,
|
||||||
|
0.76293767279151f ,
|
||||||
|
0.67730279903733f ,
|
||||||
|
0.49042877018937f ,
|
||||||
|
0.13002237823327f ,
|
||||||
|
0.62803373841012f ,
|
||||||
|
0.94525353747665f ,
|
||||||
|
0.32893980076953f ,
|
||||||
|
0.95952951719962f ,
|
||||||
|
0.056386206790985f ,
|
||||||
|
0.012030893476694f ,
|
||||||
|
0.93090049220757f,
|
||||||
|
0.83579883064879f,
|
||||||
|
0.79733513938139f,
|
||||||
|
0.8796381046435f ,
|
||||||
|
0.94160434600972f ,
|
||||||
|
0.76901855588379f ,
|
||||||
|
0.50253688101775f ,
|
||||||
|
0.82457069578793f ,
|
||||||
|
0.80157403359263f ,
|
||||||
|
0.87291810189975f ,
|
||||||
|
0.64679548919517f ,
|
||||||
|
0.42664138899494f ,
|
||||||
|
0.77171308303797f ,
|
||||||
|
0.75567959237643f ,
|
||||||
|
0.45190826265696f ,
|
||||||
|
0.59844922628181f ,
|
||||||
|
0.56534937655802f ,
|
||||||
|
0.195656257307f};
|
||||||
|
|
||||||
|
void CalculateHash() override
|
||||||
|
{
|
||||||
|
Hash = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
#ifndef Model_h__
|
#ifndef Model_h__
|
||||||
#define Model_h__
|
#define Model_h__
|
||||||
|
|
||||||
#include "RawModel.h"
|
#include "Rendering/RawModelCustom.h"
|
||||||
|
//#include "Rendering/RawModelAssimp.h"
|
||||||
#include "../OpenGL.h"
|
#include "../OpenGL.h"
|
||||||
|
|
||||||
class Model : public ThreadUnsafeResource
|
class Model : public ThreadUnsafeResource
|
||||||
@@ -19,12 +20,11 @@ public:
|
|||||||
|
|
||||||
GLuint VAO;
|
GLuint VAO;
|
||||||
GLuint ElementBuffer;
|
GLuint ElementBuffer;
|
||||||
|
RawModel* m_RawModel;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RawModel* m_RawModel;
|
|
||||||
GLuint VertexBuffer;
|
GLuint VertexBuffer;
|
||||||
GLuint DiffuseVertexColorBuffer;
|
|
||||||
GLuint SpecularVertexColorBuffer;
|
|
||||||
GLuint NormalBuffer;
|
GLuint NormalBuffer;
|
||||||
GLuint TangentNormalsBuffer;
|
GLuint TangentNormalsBuffer;
|
||||||
GLuint BiTangentNormalsBuffer;
|
GLuint BiTangentNormalsBuffer;
|
||||||
|
|||||||
@@ -13,10 +13,11 @@
|
|||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
|
#include "Skeleton.h"
|
||||||
|
|
||||||
struct ModelJob : RenderJob
|
struct ModelJob : RenderJob
|
||||||
{
|
{
|
||||||
ModelJob(Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialGroup matGroup, ComponentWrapper modelComponent, World* world)
|
ModelJob(Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialGroup matGroup, ComponentWrapper modelComponent, World* world, glm::vec4 fillColor, float fillPercentage)
|
||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
Model = model;
|
Model = model;
|
||||||
@@ -24,6 +25,10 @@ struct ModelJob : RenderJob
|
|||||||
DiffuseTexture = matGroup.Texture.get();
|
DiffuseTexture = matGroup.Texture.get();
|
||||||
NormalTexture = matGroup.NormalMap.get();
|
NormalTexture = matGroup.NormalMap.get();
|
||||||
SpecularTexture = matGroup.SpecularMap.get();
|
SpecularTexture = matGroup.SpecularMap.get();
|
||||||
|
IncandescenceTexture = matGroup.IncandescenceMap.get();
|
||||||
|
DiffuseColor = matGroup.DiffuseColor;
|
||||||
|
SpecularColor = matGroup.SpecularColor;
|
||||||
|
IncandescenceColor = matGroup.IncandescenceColor;
|
||||||
StartIndex = matGroup.StartIndex;
|
StartIndex = matGroup.StartIndex;
|
||||||
EndIndex = matGroup.EndIndex;
|
EndIndex = matGroup.EndIndex;
|
||||||
Matrix = matrix;
|
Matrix = matrix;
|
||||||
@@ -33,6 +38,16 @@ struct ModelJob : RenderJob
|
|||||||
glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1));
|
glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1));
|
||||||
Depth = worldpos.z;
|
Depth = worldpos.z;
|
||||||
World = world;
|
World = world;
|
||||||
|
|
||||||
|
FillColor = fillColor;
|
||||||
|
FillPercentage = fillPercentage;
|
||||||
|
Skeleton = Model->m_RawModel->m_Skeleton;
|
||||||
|
|
||||||
|
if (world->HasComponent(Entity, "Animation") && Skeleton != nullptr) {
|
||||||
|
auto animationComponent = world->GetComponent(Entity, "Animation");
|
||||||
|
Animation = model->m_RawModel->m_Skeleton->GetAnimation(animationComponent["Name"]);
|
||||||
|
AnimationTime = (double)animationComponent["Time"];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int TextureID;
|
unsigned int TextureID;
|
||||||
@@ -43,13 +58,25 @@ struct ModelJob : RenderJob
|
|||||||
const Texture* DiffuseTexture;
|
const Texture* DiffuseTexture;
|
||||||
const Texture* NormalTexture;
|
const Texture* NormalTexture;
|
||||||
const Texture* SpecularTexture;
|
const Texture* SpecularTexture;
|
||||||
|
const Texture* IncandescenceTexture;
|
||||||
float Shininess = 0.f;
|
float Shininess = 0.f;
|
||||||
glm::vec4 Color;
|
glm::vec4 Color;
|
||||||
const ::Model* Model = nullptr;
|
const ::Model* Model = nullptr;
|
||||||
|
::Skeleton* Skeleton = nullptr;
|
||||||
|
const ::Skeleton::Animation* Animation = nullptr;
|
||||||
|
|
||||||
|
float AnimationTime = 0.f;
|
||||||
|
|
||||||
|
glm::vec4 DiffuseColor;
|
||||||
|
glm::vec4 SpecularColor;
|
||||||
|
glm::vec4 IncandescenceColor;
|
||||||
unsigned int StartIndex = 0;
|
unsigned int StartIndex = 0;
|
||||||
unsigned int EndIndex = 0;
|
unsigned int EndIndex = 0;
|
||||||
World* World;
|
World* World;
|
||||||
|
|
||||||
|
glm::vec4 FillColor = glm::vec4(0);
|
||||||
|
float FillPercentage = 0.0;
|
||||||
|
|
||||||
void CalculateHash() override
|
void CalculateHash() override
|
||||||
{
|
{
|
||||||
Hash = TextureID;
|
Hash = TextureID;
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
#ifndef PickingPass_h__
|
#ifndef PickingPass_h__
|
||||||
#define PickingPass_h__
|
#define PickingPass_h__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "IRenderer.h"
|
#include "IRenderer.h"
|
||||||
#include "PickingPassState.h"
|
#include "PickingPassState.h"
|
||||||
#include "FrameBuffer.h"
|
#include "FrameBuffer.h"
|
||||||
@@ -10,8 +8,7 @@
|
|||||||
#include "Util/UnorderedMapiVec2.h"
|
#include "Util/UnorderedMapiVec2.h"
|
||||||
#include "../Core/EventBroker.h"
|
#include "../Core/EventBroker.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
|
#include "Rendering/Skeleton.h"
|
||||||
|
|
||||||
|
|
||||||
class PickingPass
|
class PickingPass
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#ifndef RawModel_h__
|
#ifndef RawModelAssimp_h__
|
||||||
#define RawModel_h__
|
#define RawModelAssimp_h__
|
||||||
|
|
||||||
|
#ifdef USING_ASSIMP_AS_IMPORTER
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -18,29 +20,27 @@
|
|||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
|
|
||||||
class RawModel : public Resource
|
#define RawModel RawModelAssimp
|
||||||
|
|
||||||
|
class RawModelAssimp : public Resource
|
||||||
{
|
{
|
||||||
friend class ResourceManager;
|
friend class ResourceManager;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RawModel(std::string fileName);
|
RawModelAssimp(std::string fileName);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~RawModel();
|
~RawModelAssimp();
|
||||||
|
|
||||||
struct Vertex
|
struct Vertex
|
||||||
{
|
{
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
glm::vec3 Normal;
|
glm::vec3 Normal;
|
||||||
glm::vec3 Tangent;
|
glm::vec3 Tangent;
|
||||||
glm::vec3 BiTangent;
|
glm::vec3 BiNormal;
|
||||||
glm::vec2 TextureCoords;
|
glm::vec2 TextureCoords;
|
||||||
glm::vec4 DiffuseVertexColor;
|
glm::vec4 BoneIndices;
|
||||||
glm::vec4 SpecularVertexColor;
|
glm::vec4 BoneWeights;
|
||||||
glm::vec4 BoneIndices1;
|
|
||||||
glm::vec4 BoneIndices2;
|
|
||||||
glm::vec4 BoneWeights1;
|
|
||||||
glm::vec4 BoneWeights2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MaterialGroup
|
struct MaterialGroup
|
||||||
@@ -68,8 +68,6 @@ private:
|
|||||||
std::vector<glm::ivec2> BoneIndices;
|
std::vector<glm::ivec2> BoneIndices;
|
||||||
std::vector<glm::vec2> BoneWeights;
|
std::vector<glm::vec2> BoneWeights;
|
||||||
std::vector<glm::vec3> Normals;
|
std::vector<glm::vec3> Normals;
|
||||||
std::vector<glm::vec4> DiffuseVertexColor;
|
|
||||||
std::vector<glm::vec4> SpecularVertexColor;
|
|
||||||
std::vector<glm::vec3> TangentNormals;
|
std::vector<glm::vec3> TangentNormals;
|
||||||
std::vector<glm::vec3> BiTangentNormals;
|
std::vector<glm::vec3> BiTangentNormals;
|
||||||
std::vector<glm::vec2> TextureCoords;
|
std::vector<glm::vec2> TextureCoords;
|
||||||
@@ -78,3 +76,4 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
#ifndef RawModelCustom_h__
|
||||||
|
#define RawModelCustom_h__
|
||||||
|
|
||||||
|
#ifndef USING_ASSIMP_AS_IMPORTER
|
||||||
|
|
||||||
|
#define RawModel RawModelCustom
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <stack>
|
||||||
|
|
||||||
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
#include "Skeleton.h"
|
||||||
|
|
||||||
|
#include "boost\endian\buffers.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class RawModelCustom : public Resource
|
||||||
|
{
|
||||||
|
friend class ResourceManager;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
RawModelCustom(std::string fileName);
|
||||||
|
|
||||||
|
public:
|
||||||
|
~RawModelCustom();
|
||||||
|
|
||||||
|
struct Vertex
|
||||||
|
{
|
||||||
|
glm::vec3 Position;
|
||||||
|
glm::vec3 Normal;
|
||||||
|
glm::vec3 Tangent;
|
||||||
|
glm::vec3 BiNormal;
|
||||||
|
glm::vec2 TextureCoords;
|
||||||
|
glm::vec4 BoneIndices;
|
||||||
|
glm::vec4 BoneWeights;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MaterialGroup
|
||||||
|
{
|
||||||
|
float SpecularExponent;
|
||||||
|
float ReflectionFactor;
|
||||||
|
glm::vec4 DiffuseColor{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||||
|
glm::vec4 SpecularColor{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||||
|
glm::vec4 IncandescenceColor{ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||||
|
unsigned int StartIndex;
|
||||||
|
unsigned int EndIndex;
|
||||||
|
//float Transparency;
|
||||||
|
std::string TexturePath;
|
||||||
|
std::shared_ptr<::Texture> Texture;
|
||||||
|
std::string NormalMapPath;
|
||||||
|
std::shared_ptr<::Texture> NormalMap;
|
||||||
|
std::string SpecularMapPath;
|
||||||
|
std::shared_ptr<::Texture> SpecularMap;
|
||||||
|
std::string IncandescenceMapPath;
|
||||||
|
std::shared_ptr<::Texture> IncandescenceMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<MaterialGroup> MaterialGroups;
|
||||||
|
|
||||||
|
std::vector<Vertex> m_Vertices;
|
||||||
|
std::vector<unsigned int> m_Indices;
|
||||||
|
Skeleton* m_Skeleton = nullptr;
|
||||||
|
glm::mat4 m_Matrix;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
void ReadMeshFile(std::string filePath);
|
||||||
|
void ReadMeshFileHeader(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadMesh(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadVertices(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadIndices(unsigned int& offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
|
||||||
|
void ReadMaterialFile(std::string filePath);
|
||||||
|
void ReadMaterials(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadMaterialSingle(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
|
||||||
|
void ReadAnimationFile(std::string filePath);
|
||||||
|
void ReadAnimationBindPoses(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadAnimationJoint(unsigned int &offset, char* fileData, unsigned int& fileByteSize);
|
||||||
|
void ReadAnimationClips(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int numberOfClips);
|
||||||
|
void ReadAnimationClipSingle(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int clipIndex);
|
||||||
|
void ReadAnimationKeyFrame(unsigned int &offset, char* fileData, unsigned int& fileByteSize, unsigned int numberOfJoints, Skeleton::Animation& animation);
|
||||||
|
|
||||||
|
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include "RawModelAssimp.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@@ -14,11 +14,13 @@
|
|||||||
#include "TextJob.h"
|
#include "TextJob.h"
|
||||||
#include "PointLightJob.h"
|
#include "PointLightJob.h"
|
||||||
#include "DirectionalLightJob.h"
|
#include "DirectionalLightJob.h"
|
||||||
|
#include "ExplosionEffectJob.h"
|
||||||
|
|
||||||
struct RenderScene
|
struct RenderScene
|
||||||
{
|
{
|
||||||
::Camera* Camera = nullptr;
|
::Camera* Camera = nullptr;
|
||||||
std::list<std::shared_ptr<RenderJob>> ForwardJobs;
|
std::list<std::shared_ptr<RenderJob>> OpaqueObjects;
|
||||||
|
std::list<std::shared_ptr<RenderJob>> TransparentObjects;
|
||||||
std::list<std::shared_ptr<RenderJob>> PointLightJobs;
|
std::list<std::shared_ptr<RenderJob>> PointLightJobs;
|
||||||
std::list<std::shared_ptr<RenderJob>> TextJobs;
|
std::list<std::shared_ptr<RenderJob>> TextJobs;
|
||||||
std::list<std::shared_ptr<RenderJob>> DirectionalLightJobs;
|
std::list<std::shared_ptr<RenderJob>> DirectionalLightJobs;
|
||||||
@@ -27,7 +29,8 @@ struct RenderScene
|
|||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
ForwardJobs.clear();
|
OpaqueObjects.clear();
|
||||||
|
TransparentObjects.clear();
|
||||||
PointLightJobs.clear();
|
PointLightJobs.clear();
|
||||||
TextJobs.clear();
|
TextJobs.clear();
|
||||||
DirectionalLightJobs.clear();
|
DirectionalLightJobs.clear();
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ private:
|
|||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
RenderFrame* m_RenderFrame;
|
RenderFrame* m_RenderFrame;
|
||||||
Camera* m_Camera;
|
Camera* m_Camera;
|
||||||
|
World* m_World;
|
||||||
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ private:
|
|||||||
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
||||||
bool OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
|
|
||||||
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs);
|
void fillModels(std::list<std::shared_ptr<RenderJob>>& opaqueJobs, std::list<std::shared_ptr<RenderJob>>& transparentJobs);
|
||||||
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
|
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
|
||||||
|
|
||||||
EventRelay<RenderSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<RenderSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ private:
|
|||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
||||||
//--------------------ShaderPrograms-------------------//
|
//--------------------ShaderPrograms-------------------//
|
||||||
ShaderProgram* m_BasicForwardProgram;
|
ShaderProgram* m_BasicForwardProgram;
|
||||||
|
ShaderProgram* m_ExplosionEffectProgram;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
|
#include <glm/gtx/matrix_decompose.hpp>
|
||||||
|
|
||||||
//struct Bone
|
//struct Bone
|
||||||
//{
|
//{
|
||||||
@@ -38,9 +39,9 @@ public:
|
|||||||
, OffsetMatrix(offsetMatrix)
|
, OffsetMatrix(offsetMatrix)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
int ID;
|
|
||||||
std::string Name;
|
std::string Name;
|
||||||
glm::mat4 OffsetMatrix;
|
glm::mat4 OffsetMatrix;
|
||||||
|
int ID;
|
||||||
|
|
||||||
Bone* Parent;
|
Bone* Parent;
|
||||||
std::vector<Bone*> Children;
|
std::vector<Bone*> Children;
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
|
||||||
|
class ExplosionEffectSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ExplosionEffectSystem(World* world, EventBroker* eventBroker)
|
||||||
|
: System(world, eventBroker)
|
||||||
|
, PureSystem("ExplosionEffect")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((double)component["TimeSinceDeath"] > (double)component["ExplosionDuration"]) {
|
||||||
|
(double)component["TimeSinceDeath"] = 0.f;
|
||||||
|
}
|
||||||
|
(double&)component["TimeSinceDeath"] += dt;
|
||||||
|
|
||||||
|
//if ((bool)Component["Gravity"] == true) {
|
||||||
|
// (bool)Component["ExponentialAccelaration"] = false;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "Core/EKeyDown.h"
|
#include "Core/EKeyDown.h"
|
||||||
#include "Core/EntityFilePreprocessor.h"
|
#include "Core/EntityFilePreprocessor.h"
|
||||||
#include "Core/SystemPipeline.h"
|
#include "Core/SystemPipeline.h"
|
||||||
|
#include "ExplosionEffectSystem.h"
|
||||||
#include "Editor/EditorSystem.h"
|
#include "Editor/EditorSystem.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Rendering/RenderSystem.h"
|
#include "Rendering/RenderSystem.h"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
//methods which will take care of specific events
|
//methods which will take care of specific events
|
||||||
EventRelay<HealthSystem, Events::PlayerDamage> m_EPlayerDamage;
|
EventRelay<HealthSystem, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
bool HealthSystem::OnPlayerDamaged(const Events::PlayerDamage& e);
|
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e);
|
||||||
EventRelay<HealthSystem, Events::PlayerHealthPickup> m_EPlayerHealthPickup;
|
EventRelay<HealthSystem, Events::PlayerHealthPickup> m_EPlayerHealthPickup;
|
||||||
bool HealthSystem::OnPlayerHealthPickup(const Events::PlayerHealthPickup& e);
|
bool HealthSystem::OnPlayerHealthPickup(const Events::PlayerHealthPickup& e);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef LifetimeSystem_h__
|
||||||
|
#define LifetimeSystem_h__
|
||||||
|
|
||||||
|
#include "Core/System.h"
|
||||||
|
|
||||||
|
class LifetimeSystem : public ImpureSystem, PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LifetimeSystem(World* world, EventBroker* eventBroker)
|
||||||
|
: System(world, eventBroker)
|
||||||
|
, PureSystem("Lifetime")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cLifetime, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<EntityWrapper> m_Deletions;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef PlayerHUD_h__
|
||||||
|
#define PlayerHUD_h__
|
||||||
|
|
||||||
|
#include "../../Engine/Core/System.h"
|
||||||
|
#include "../../Engine/GLM.h"
|
||||||
|
#include "../../Engine/Rendering/ESetCamera.h"
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
|
class PlayerHUD : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlayerHUD(World* world, EventBroker* eventBrokerer);
|
||||||
|
~PlayerHUD();
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
World* m_World;
|
||||||
|
EventBroker* m_EventBroker;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -9,7 +9,10 @@
|
|||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Core/EShoot.h"
|
#include "Core/EShoot.h"
|
||||||
|
#include "Core/EPlayerSpawned.h"
|
||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Core/EntityFileParser.h"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -23,16 +26,18 @@ public:
|
|||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//methods which will take care of specific events
|
|
||||||
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
|
|
||||||
bool WeaponSystem::OnShoot(const Events::Shoot& e);
|
|
||||||
|
|
||||||
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
|
|
||||||
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
|
|
||||||
|
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
|
|
||||||
std::vector<std::tuple<EntityID, glm::vec2>> m_EShootVector;
|
// State
|
||||||
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
|
||||||
|
// Events
|
||||||
|
EventRelay<WeaponSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool WeaponSystem::OnPlayerSpawned(const Events::PlayerSpawned& e);
|
||||||
|
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
|
||||||
|
bool WeaponSystem::OnShoot(Events::Shoot& e);
|
||||||
|
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
|
||||||
|
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -22,3 +22,4 @@ X=EditorToggleTransformSpace
|
|||||||
C=ConnectToServer
|
C=ConnectToServer
|
||||||
N=SwitchToServer
|
N=SwitchToServer
|
||||||
M=SwitchToClient
|
M=SwitchToClient
|
||||||
|
P=SwitchToPlayer
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
<xs:include schemaLocation="Components/PointLight.xsd"/>
|
<xs:include schemaLocation="Components/PointLight.xsd"/>
|
||||||
<xs:include schemaLocation="Components/DirectionalLight.xsd"/>
|
<xs:include schemaLocation="Components/DirectionalLight.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Trigger.xsd"/>
|
<xs:include schemaLocation="Components/Trigger.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/ExplosionEffect.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Health.xsd"/>
|
<xs:include schemaLocation="Components/Health.xsd"/>
|
||||||
<xs:include schemaLocation="Components/CapturePoint.xsd"/>
|
<xs:include schemaLocation="Components/CapturePoint.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Listener.xsd"/>
|
<xs:include schemaLocation="Components/Listener.xsd"/>
|
||||||
@@ -23,4 +24,8 @@
|
|||||||
<xs:include schemaLocation="Components/Team.xsd"/>
|
<xs:include schemaLocation="Components/Team.xsd"/>
|
||||||
<xs:include schemaLocation="Components/UniformScale.xsd"/>
|
<xs:include schemaLocation="Components/UniformScale.xsd"/>
|
||||||
<xs:include schemaLocation="Components/EditorWidget.xsd"/>
|
<xs:include schemaLocation="Components/EditorWidget.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/HealthHUD.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Animation.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Fill.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Lifetime.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Animation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
||||||
|
<Time>0</Time>
|
||||||
|
<Speed>0</Speed>
|
||||||
|
<Loop>true</Loop>
|
||||||
|
</Animation>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="Animation">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Name" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Speed" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Loop" type="t:bool" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<ExplosionEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExplosionEffect.xsd">
|
||||||
|
<ExplosionOrigin X="0" Y="0" Z="0"/>
|
||||||
|
<TimeSinceDeath>0</TimeSinceDeath>
|
||||||
|
<ExplosionDuration>2</ExplosionDuration>
|
||||||
|
<!--<Gravity>1</Gravity>-->
|
||||||
|
<!--<GravityForce>1</GravityForce>-->
|
||||||
|
<!--<ObjectRadius>2</ObjectRadius>-->
|
||||||
|
<EndColor R="0" G="0" B="0" A="0"/>
|
||||||
|
<Randomness>0</Randomness>
|
||||||
|
<RandomnessScalar>1</RandomnessScalar>
|
||||||
|
<Velocity X="2" Y="2"/>
|
||||||
|
<ColorByDistance>0</ColorByDistance>
|
||||||
|
<!--<ReverseAnimation>0</ReverseAnimation>-->
|
||||||
|
<!--<Wireframe>0</Wireframe>-->
|
||||||
|
<ExponentialAccelaration>0</ExponentialAccelaration>
|
||||||
|
</ExplosionEffect>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="ExplosionEffect">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A component that trigger the death effect</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="ExplosionOrigin" type="t:Vector" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The position in which to spawn the component</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TimeSinceDeath" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Seconds since death</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ExplosionDuration" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>How many seconds the death animation should be</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<!--<xs:element name="Gravity" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Enable/disable gravity</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>-->
|
||||||
|
<!--<xs:element name="GravityForce" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The force of the gravity</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>-->
|
||||||
|
<!--<xs:element name="ObjectRadius" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Object radius (TO BE REMOVED AND AUTOMATED)</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>-->
|
||||||
|
<xs:element name="EndColor" type="t:Color" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The tint the polys end with</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Randomness" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Add some randomness to the explosion</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RandomnessScalar" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Alter the power of the randomness</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Velocity" type="t:Vector" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The velocity factors (start/end)</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ColorByDistance" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Change the color by its moved distance instead of by its time</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<!--<xs:element name="ReverseAnimation" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Implosions are cooler</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>-->
|
||||||
|
<!--<xs:element name="Wireframe" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Enable/disable wireframe</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>-->
|
||||||
|
<xs:element name="ExponentialAccelaration" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Linear/Exponential accelaration</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Fill xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Fill.xsd">
|
||||||
|
<Percentage>0.0</Percentage>
|
||||||
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
|
</Fill>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="Fill">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Percentage" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Color" type="t:Color" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Listener xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Listener.xsd"/>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="HealthHUD">
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Lifetime xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
||||||
|
<Lifetime>0</Lifetime>
|
||||||
|
</Animation>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||||
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
|
<xs:element name="Lifetime">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Lifetime" type="t:double" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -2,5 +2,6 @@
|
|||||||
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Model.xsd">
|
<Model xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Model.xsd">
|
||||||
<Resource></Resource>
|
<Resource></Resource>
|
||||||
<Color R="1" G="1" B="1" A="1"/>
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
|
<Transparent>false</Transparent>
|
||||||
<Visible>true</Visible>
|
<Visible>true</Visible>
|
||||||
</Model>
|
</Model>
|
||||||
@@ -15,6 +15,9 @@
|
|||||||
<xs:element name="Color" type="t:Color" minOccurs="0">
|
<xs:element name="Color" type="t:Color" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Color tint</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Color tint</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="Transparent" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Wether the model is transparent or not</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="Visible" type="t:bool" minOccurs="0">
|
<xs:element name="Visible" type="t:bool" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Wether the model is visible or not</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Wether the model is visible or not</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,273 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="4.52910185" Y="5.50171423" Z="7.69566345"/>
|
||||||
|
<Orientation X="-0.453785568" Y="0.436270237" Z="-1.03594937e-06"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/dummyscene.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/animtest.</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0966923237" Y="1.2939688" Z="0.399702221"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/animTest.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.31816244" Z="1.1888907"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/animTest.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.708824873" Y="1.30000007" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/animTest.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.36948848" Y="1.20000005" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight>
|
||||||
|
<Intensity>0.13000047206878662</Intensity>
|
||||||
|
</c:DirectionalLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.77622533" Z="0"/>
|
||||||
|
<Orientation X="0" Y="1.30900002" Z="1.73600006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.30000001192092896</Speed>
|
||||||
|
<Axis X="0" Y="5" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="117.03714" Y="3023.50244" Z="3.03297734"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1" Z="1.29999995"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
<Intensity>0.80000001192092896</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1" Z="-1.29999995"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0" R="0.478431374"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.30000007" Y="1" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.29999995" Y="1" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.50999981164932251</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.100000001" Z="0"/>
|
||||||
|
<Orientation X="0" Y="191.457993" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.301960796" G="0.0901960805" R="0.247058824"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
<Intensity>5</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="3" Z="5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.960784316" G="1" R="0"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="3" Z="-7.66608238"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.00784313772" G="1" R="1"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-3.47176075" Y="3" Z="-8.09415054"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-9.50536728" Y="2" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0" R="1"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="3" Z="4.40877533"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.431372553" G="0.0745098069" R="1"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.83008432" Y="3" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0.623529434" R="0.929411769"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="3.72500014" Y="3" Z="-4.26100016"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="3" Z="-7.50000048"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0.192156866" G="1" R="0"/>
|
||||||
|
<Radius>5</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.90153885" Y="3" Z="-5.40681458"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<CaptureTimer>6.9158446328696002</CaptureTimer>
|
<CaptureTimer>6.9158446328696002</CaptureTimer>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<Static>false</Static>
|
<Static>false</Static>
|
||||||
</c:Collidable>
|
</c:Collidable>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DummyScene.obj</Resource>
|
<Resource>Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<Scale X="1" Y="1" Z="1"/>
|
<Scale X="1" Y="1" Z="1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitSphere.obj</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
</Entity>
|
</Entity>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<Scale X="2" Y="2" Z="2"/>
|
<Scale X="2" Y="2" Z="2"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetX.obj</Resource>
|
<Resource>Models/RotationWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Trigger>
|
<c:Trigger>
|
||||||
</c:Trigger>
|
</c:Trigger>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
<Position X="2.5"/>
|
<Position X="2.5"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:AABB>
|
<c:AABB>
|
||||||
</c:AABB>
|
</c:AABB>
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
<Orientation X="0.0" Y="0" Z="1.0"/>
|
<Orientation X="0.0" Y="0" Z="1.0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitRaptor.obj</Resource>
|
<Resource>Models/Core/UnitRaptor.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
<Orientation X="0" Y="1.57" Z="0"/>
|
<Orientation X="0" Y="1.57" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Scale X="100" Y="1" Z="100"/>
|
<Scale X="100" Y="1" Z="100"/>
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:DirectionalLight/>
|
<c:DirectionalLight/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.obj</Resource>
|
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
|
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-2.00568962" Y="0.527161121" Z="0"/>
|
<Position X="-2.00568962" Y="0.527161121" Z="0"/>
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitSphere.obj</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="3.70000029" Z="0"/>
|
<Position X="0" Y="3.70000029" Z="0"/>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<Axis X="1" Y="0" Z="0"/>
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetX.obj</Resource>
|
<Resource>Models/RotationWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<Axis X="0" Y="1" Z="0"/>
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetY.obj</Resource>
|
<Resource>Models/RotationWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<Axis X="0" Y="0" Z="1"/>
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetZ.obj</Resource>
|
<Resource>Models/RotationWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetOrigin.obj</Resource>
|
<Resource>Models/ScaleWidgetOrigin.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
<c:UniformScale>
|
<c:UniformScale>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetX.obj</Resource>
|
<Resource>Models/ScaleWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetY.obj</Resource>
|
<Resource>Models/ScaleWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetZ.obj</Resource>
|
<Resource>Models/ScaleWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetOrigin.obj</Resource>
|
<Resource>Models/TranslationWidgetOrigin.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
<c:UniformScale>
|
<c:UniformScale>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<Axis X="1" Y="0" Z="0"/>
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetX.obj</Resource>
|
<Resource>Models/TranslationWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<Axis X="0" Y="1" Z="0"/>
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetY.obj</Resource>
|
<Resource>Models/TranslationWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<Axis X="0" Y="0" Z="1"/>
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetZ.obj</Resource>
|
<Resource>Models/TranslationWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
<Axis X="0" Y="1" Z="1"/>
|
<Axis X="0" Y="1" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneX.obj</Resource>
|
<Resource>Models/WidgetPlaneX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
<Axis X="1" Y="0" Z="1"/>
|
<Axis X="1" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneY.obj</Resource>
|
<Resource>Models/WidgetPlaneY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
<Axis X="1" Y="1" Z="0"/>
|
<Axis X="1" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneZ.obj</Resource>
|
<Resource>Models/WidgetPlaneZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="GotToGoFast" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.00432979874" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="39.2156868" R="392.15686"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Axis X="1.50000012" Y="-2.20000005" Z="2.10000014"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.87819886" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<Name>Run</Name>
|
||||||
|
<Time>0.56277947897317659</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="1.10000002" Z="3.30000019"/>
|
||||||
|
<ExplosionOrigin X="-0.600000024" Y="1" Z="0"/>
|
||||||
|
<TimeSinceDeath>0.95625903442123672</TimeSinceDeath>
|
||||||
|
<EndColor A="0" B="0.815686285" G="1" R="0"/>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/AssaultAnimated.mesh</Resource>
|
||||||
|
<Color A="1" B="392156.875" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.5" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew pew </Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,60</Resource>
|
||||||
|
<Color A="0" B="0.972549021" G="3.92156863" R="39.2156868"/>
|
||||||
|
<Alignment>
|
||||||
|
<Left/>
|
||||||
|
</Alignment>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.245514169" Y="0.817000031" Z="-0.883219421"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="1"/>
|
||||||
|
<Orientation X="0" Y="1.52600002" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Scenemesh">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models\MapVersion1.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="DirectionalLight">
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight>
|
||||||
|
<Intensity>2</Intensity>
|
||||||
|
</c:DirectionalLight>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="61.9050903" Z="0"/>
|
||||||
|
<Scale X="50" Y="50" Z="50"/>
|
||||||
|
<Orientation X="4.42700005" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PointLight">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>2.7999999523162842</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.370978802" Y="1.88588905" Z="-0.55370003"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PointLight">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>2.7999999523162842</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="38.0347443" Y="1.88588905" Z="62.7340622"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.904668212" Y="0" Z="8.48177528"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.61666441" Y="0" Z="-8.51156044"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-7.56803513" Y="-0.0658408776" Z="0.59418112"/>
|
||||||
|
<Scale X="1.20000005" Y="0.900000036" Z="1.30000007"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="10.460474" Y="0" Z="-3.92580295"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.09146011" Y="-0.315138876" Z="-0.333906144"/>
|
||||||
|
<Scale X="150" Y="1" Z="180"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BluSpawn">
|
||||||
|
<Components>
|
||||||
|
<c:PlayerSpawn/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/Player.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Blue/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="57.7363472" Y="1.18853188" Z="79.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:SpawnPoint/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:SpawnPoint/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.05988312" Y="0" Z="2.79573512"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.85022807" Y="0" Z="-2.08909845"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.98651481" Y="0" Z="-4.67667246"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.16323137" Y="0" Z="3.62892342"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="RedSpawn">
|
||||||
|
<Components>
|
||||||
|
<c:PlayerSpawn/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/Player.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Red/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-60.2567062" Y="1.60000002" Z="-78.1000061"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:SpawnPoint/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="2.24403"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.20245028" Y="0" Z="-1.97843659"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="4.79769945" Y="0" Z="-5.2088728"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="-0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>models/animTest.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.513725519" G="0" R="1"/>
|
<Color A="1" B="0.513725519" G="0" R="1"/>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:DirectionalLight/>
|
<c:DirectionalLight/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.obj</Resource>
|
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-6.00145912" Y="1.42697716" Z="3.04144025"/>
|
<Position X="-6.00145912" Y="1.42697716" Z="3.04144025"/>
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
<Entity name="ObstacleCourse">
|
<Entity name="ObstacleCourse">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Test/ObstacleCourse.obj</Resource>
|
<Resource>Models/Test/ObstacleCourse.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -146,7 +146,6 @@
|
|||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
|
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
|
||||||
<Orientation X="0" Y="3.20700026" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -154,7 +153,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -167,7 +166,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -178,6 +177,123 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="Player">
|
||||||
|
<Components>
|
||||||
|
<c:AABB>
|
||||||
|
<Origin X="0" Y="0.772000015" Z="0"/>
|
||||||
|
<Size X="1" Y="1.60000002" Z="1"/>
|
||||||
|
</c:AABB>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model/>
|
||||||
|
<c:Physics>
|
||||||
|
<Gravity>false</Gravity>
|
||||||
|
</c:Physics>
|
||||||
|
<c:Player>
|
||||||
|
<MovementSpeed>5</MovementSpeed>
|
||||||
|
</c:Player>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Red/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.68112314" Y="0.0264999866" Z="3.06287026"/>
|
||||||
|
<Orientation X="0" Y="2.14675093" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Camera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.37700009" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlayerName">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.247910097" Z="-0.447844714"/>
|
||||||
|
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="CameraModel">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
||||||
|
<Scale X="1.30000007" Y="1.50000012" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ThirdPersonCamera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.284000009" Y="1.83800006" Z="1.18900001"/>
|
||||||
|
<Orientation X="5.95600033" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="PlayerModel">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/AssaultHeadless.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Orientation X="0" Y="3.14159274" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AABBStanding">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="0.427450985" B="1" G="1" R="1"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.772000015" Z="0"/>
|
||||||
|
<Scale X="1" Y="1.60000002" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AABBCrouching">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="0.745098054" B="1" G="0" R="1"/>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.772000015" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0" R="0"/>
|
<Color A="1" B="1" G="0" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<Static>false</Static>
|
<Static>false</Static>
|
||||||
</c:Collidable>
|
</c:Collidable>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<Static>false</Static>
|
<Static>false</Static>
|
||||||
</c:Collidable>
|
</c:Collidable>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
<Entity name="Player" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
<Entity name="Player" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
<c:AABB>
|
<c:AABB>
|
||||||
<Origin X="0" Y="0.772000015" Z="0"/>
|
<Origin X="0" Y="0.772000015" Z="0"/>
|
||||||
<Size X="1" Y="1.60000002" Z="1"/>
|
<Size X="1" Y="1.60000002" Z="1"/>
|
||||||
</c:AABB>
|
</c:AABB>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model/>
|
|
||||||
<c:Physics>
|
<c:Physics>
|
||||||
<Velocity X="8.33307467e-09" Y="0" Z="9.82836834e-09"/>
|
<Velocity X="2.30999646e-23" Y="0" Z="1.05272533e-23"/>
|
||||||
</c:Physics>
|
</c:Physics>
|
||||||
<c:Player>
|
<c:Player>
|
||||||
<MovementSpeed>5</MovementSpeed>
|
<MovementSpeed>5</MovementSpeed>
|
||||||
@@ -20,8 +20,7 @@
|
|||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.84928203" Y="0.0264999866" Z="7.31610918"/>
|
<Orientation X="0" Y="2.24449515" Z="0"/>
|
||||||
<Orientation X="0" Y="2.14675093" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
@@ -31,7 +30,6 @@
|
|||||||
<c:Camera/>
|
<c:Camera/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="1.37700009" Z="0"/>
|
<Position X="0" Y="1.37700009" Z="0"/>
|
||||||
<Orientation X="0.921535373" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -40,10 +38,9 @@
|
|||||||
<c:Text>
|
<c:Text>
|
||||||
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
<Visible>false</Visible>
|
|
||||||
</c:Text>
|
</c:Text>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0.247910097" Z="-0.447844714"/>
|
<Position X="0.100000001" Y="0.248000011" Z="-0.248000011"/>
|
||||||
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||||
<Orientation X="0" Y="3.14199996" Z="0"/>
|
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
@@ -53,7 +50,8 @@
|
|||||||
<Entity name="CameraModel">
|
<Entity name="CameraModel">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
||||||
@@ -62,13 +60,74 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="HUD">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="HealthBar">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="0" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
||||||
|
<Color A="1" B="0.70588237" G="0.70588237" R="0.70588237"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.383000016" Y="-0.185000002" Z="0"/>
|
||||||
|
<Scale X="0.150000006" Y="0.150000006" Z="0.150000006"/>
|
||||||
|
<Orientation X="0" Y="0.594000041" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Crosshair">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/CrosshairQuad.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.200000003"/>
|
||||||
|
<Scale X="0.00600000005" Y="1" Z="0.00600000005"/>
|
||||||
|
<Orientation X="1.57000005" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Weapon">
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/AssaultWeapon.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.180000007" Y="-0.183000013" Z="0"/>
|
||||||
|
<Orientation X="0" Y="4.64700031" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="WeaponMuzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.215000004" Y="-0.153000012" Z="-0.266000003"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="ThirdPersonCamera">
|
<Entity name="ThirdPersonCamera">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Camera/>
|
<c:Camera/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -80,19 +139,23 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="PlayerModel">
|
<Entity name="PlayerModel">
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<Name>Hold Pos</Name>
|
||||||
|
<Time>0.9779997896222552</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultHeadless.obj</Resource>
|
<Resource>Models/AssaultAnimated.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform/>
|
||||||
<Orientation X="0" Y="3.14159274" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="AABBStanding">
|
<Entity name="AABBStanding">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="0.427450985" B="1" G="1" R="1"/>
|
<Color A="0.427450985" B="1" G="1" R="1"/>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
@@ -106,7 +169,7 @@
|
|||||||
<Entity name="AABBCrouching">
|
<Entity name="AABBCrouching">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="0.745098054" B="1" G="0" R="1"/>
|
<Color A="0.745098054" B="1" G="0" R="1"/>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="PointLight" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
<Intensity>2.7999999523162842</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.370978802" Y="1.88588905" Z="-0.55370003"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<Orientation X="0.0" Y="0" Z="0.0"/>
|
<Orientation X="0.0" Y="0" Z="0.0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitRaptor.obj</Resource>
|
<Resource>Models/Core/UnitRaptor.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
<Scale X="0.1" Y="0.4" Z="0.1"/>
|
<Scale X="0.1" Y="0.4" Z="0.1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.obj</Resource>
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
<Orientation X="0" Y="1.57" Z="0"/>
|
<Orientation X="0" Y="1.57" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color R="1" G="0.4" B="0.8"/>
|
<Color R="1" G="0.4" B="0.8"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
|
<Color A="0" B="0" G="0" R="39.2156868"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0400000028" Y="26.2000008" Z="0.0400000028"/>
|
||||||
|
<Orientation X="1.57070005" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.25</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/CylinderBullet.mesh</Resource>
|
||||||
|
<Color A="1" B="39.2156868" G="7.84313726" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0109999999" Y="0.0289999992" Z="100"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
|
<Color A="0" B="0" G="0" R="39.2156868"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0400000028" Y="26.2000008" Z="0.0400000028"/>
|
||||||
|
<Orientation X="1.57070005" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.25</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/CylinderBullet.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0.525490224" R="39.2156868"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.0110000009" Y="0.029000001" Z="100"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -6,43 +6,124 @@
|
|||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity name="Player">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Camera>
|
<c:Health>
|
||||||
<Name>ActionCamera</Name>
|
<Health>65.990005493164063</Health>
|
||||||
</c:Camera>
|
</c:Health>
|
||||||
<c:Model>
|
<c:Player/>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.504807115" Y="6.00582743" Z="9.68687439"/>
|
<Position X="0" Y="0" Z="2.5"/>
|
||||||
<Orientation X="-0.733036518" Y="0.000105090476" Z="5.12391125e-07"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity name="Model">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Text>
|
<c:Model>
|
||||||
<Content>Camera #2</Content>
|
<Resource>Models/Assault.obj</Resource>
|
||||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
<Color A="1" B="3.92156863" G="3.92156863" R="3.92156863"/>
|
||||||
<Alignment>0</Alignment>
|
</c:Model>
|
||||||
</c:Text>
|
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.700063765" Y="0.310270816" Z="-1"/>
|
<Orientation X="0" Y="3.14159203" Z="0"/>
|
||||||
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="Camera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera>
|
||||||
|
<FOV>80</FOV>
|
||||||
|
</c:Camera>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.39121652" Z="-0.043014247"/>
|
||||||
|
<Orientation X="6.28300047" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="HUD">
|
||||||
|
<Components>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.000463247066" Z="-0.744767368"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Hexagon">
|
||||||
|
<Components>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>0.65990006923675537</Percentage>
|
||||||
|
<Color A="0" B="0.659900069" G="0" R="0.340099931"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
||||||
|
<Color A="0.313725501" B="0.70588237" G="0.70588237" R="0.70588237"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.285538822" Y="-0.282350302" Z="-1.52214652e-05"/>
|
||||||
|
<Scale X="0.200000003" Y="0.200000003" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="0.666000009" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="Ammo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>24</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,60</Resource>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.43861985e-06" Y="0.0125972452" Z="0.0100018298"/>
|
||||||
|
<Scale X="0.349999994" Y="0.349999994" Z="0.200000003"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>262</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,60</Resource>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.27209579e-06" Y="-0.0390000008" Z="5.43686883e-06"/>
|
||||||
|
<Scale X="0.65200001" Y="0.643000007" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Text>
|
||||||
|
<Content>65/100</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,60</Resource>
|
||||||
|
<Color A="1" B="0.659900069" G="0" R="0.340099931"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitPlane.obj</Resource>
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-1" Z="0.600000024"/>
|
<Position X="0" Y="-0.689623177" Z="0.600000024"/>
|
||||||
<Scale X="100" Y="1" Z="100"/>
|
<Scale X="100" Y="1" Z="100"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -51,7 +132,8 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
|
<Color A="1" B="3.92156863" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-2.5" Y="0" Z="1"/>
|
<Position X="-2.5" Y="0" Z="1"/>
|
||||||
@@ -64,6 +146,7 @@
|
|||||||
<c:Text>
|
<c:Text>
|
||||||
<Content>Welcome!</Content>
|
<Content>Welcome!</Content>
|
||||||
<Resource>Fonts/DroidSans.ttf,1280</Resource>
|
<Resource>Fonts/DroidSans.ttf,1280</Resource>
|
||||||
|
<Color A="0" B="3.92156863" G="3.92156863" R="3.92156863"/>
|
||||||
</c:Text>
|
</c:Text>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.700000048"/>
|
<Position X="0" Y="0" Z="0.700000048"/>
|
||||||
@@ -74,32 +157,40 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:RaptorCopter>
|
<c:RaptorCopter>
|
||||||
<Speed>2</Speed>
|
<Speed>3</Speed>
|
||||||
<Axis X="0" Y="1" Z="0"/>
|
<Axis X="0.200000003" Y="3.4000001" Z="0.5"/>
|
||||||
</c:RaptorCopter>
|
</c:RaptorCopter>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="2.37320328" Z="0"/>
|
<Orientation X="758.058899" Y="20632.8691" Z="1320.68018"/>
|
||||||
<Orientation X="0" Y="8252.15918" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="0" R="7.84313726"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="1" G="0" R="1"/>
|
<Color A="1" B="1" G="0" R="1"/>
|
||||||
<Radius>6</Radius>
|
<Radius>70</Radius>
|
||||||
<Intensity>0.5</Intensity>
|
<Intensity>0.5</Intensity>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-2.5" Y="0" Z="0"/>
|
<Position X="-2.5" Y="0" Z="0"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="7.84313726"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
<Radius>8</Radius>
|
<Radius>70</Radius>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-5" Y="0" Z="0"/>
|
<Position X="-5" Y="0" Z="0"/>
|
||||||
@@ -111,21 +202,30 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="7.84313726" R="7.84313726"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
<Radius>6</Radius>
|
<Radius>70</Radius>
|
||||||
<Intensity>0.5</Intensity>
|
<Intensity>0.5</Intensity>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="-2.5"/>
|
<Position X="0" Y="0" Z="-2.5"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="7.84313726" R="0"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
<Radius>8</Radius>
|
<Radius>70</Radius>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="-5"/>
|
<Position X="0" Y="0" Z="-5"/>
|
||||||
@@ -137,21 +237,30 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="7.84313726" R="0"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
<Radius>6</Radius>
|
<Radius>70</Radius>
|
||||||
<Intensity>0.5</Intensity>
|
<Intensity>0.5</Intensity>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="2.5"/>
|
<Position X="0" Y="0" Z="2.5"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="0" R="0"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Color A="1" B="1" G="0.00784313772" R="0"/>
|
<Color A="1" B="1" G="0" R="0"/>
|
||||||
<Radius>8</Radius>
|
<Radius>70</Radius>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="5"/>
|
<Position X="0" Y="0" Z="5"/>
|
||||||
@@ -163,19 +272,28 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="7.84313726" R="7.84313726"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Radius>6</Radius>
|
<Radius>70</Radius>
|
||||||
<Intensity>0.5</Intensity>
|
<Intensity>0.5</Intensity>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.5" Y="0" Z="0"/>
|
<Position X="2.5" Y="0" Z="0"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="7.84313726" R="7.84313726"/>
|
||||||
|
</c:Model>
|
||||||
<c:PointLight>
|
<c:PointLight>
|
||||||
<Radius>8</Radius>
|
<Radius>70</Radius>
|
||||||
</c:PointLight>
|
</c:PointLight>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="5" Y="0" Z="0"/>
|
<Position X="5" Y="0" Z="0"/>
|
||||||
@@ -190,7 +308,8 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.obj</Resource>
|
<Resource>Models/Assault.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="3.92156863"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.5" Y="0" Z="1"/>
|
<Position X="2.5" Y="0" Z="1"/>
|
||||||
@@ -198,46 +317,15 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity name="DirectionalLight">
|
||||||
<Components>
|
|
||||||
<c:Camera>
|
|
||||||
<Name>MainCamera</Name>
|
|
||||||
</c:Camera>
|
|
||||||
<c:Listener/>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Camera.obj</Resource>
|
|
||||||
<Visible>false</Visible>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="-1.27354908" Y="5.18422079" Z="10.6223917"/>
|
|
||||||
<Orientation X="-0.436328411" Y="-0.0523675606" Z="1.67869363e-08"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children>
|
|
||||||
<Entity>
|
|
||||||
<Components>
|
|
||||||
<c:Text>
|
|
||||||
<Content>Taiwan #1</Content>
|
|
||||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
|
||||||
<Alignment>0</Alignment>
|
|
||||||
</c:Text>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0.716896772" Y="0.296712071" Z="-1"/>
|
|
||||||
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
</Children>
|
|
||||||
</Entity>
|
|
||||||
<Entity>
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:DirectionalLight>
|
<c:DirectionalLight>
|
||||||
<Color A="1" B="0.996078432" G="1" R="1"/>
|
<Color A="1" B="0.996078432" G="1" R="1"/>
|
||||||
<Intensity>0.80000001192092896</Intensity>
|
<Intensity>0.10000000149011612</Intensity>
|
||||||
</c:DirectionalLight>
|
</c:DirectionalLight>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.obj</Resource>
|
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="3.92156863" R="3.92156863"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.0013256073" Y="1.89540339" Z="6.53467274"/>
|
<Position X="-0.0013256073" Y="1.89540339" Z="6.53467274"/>
|
||||||
@@ -249,7 +337,8 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="39.2156868" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-5.4082036" Y="0" Z="-1.84950542"/>
|
<Position X="-5.4082036" Y="0" Z="-1.84950542"/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.obj</Resource>
|
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
</c:Health>
|
</c:Health>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="2.25"/>
|
<Color A="1" B="0" G="0" R="2.25"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -191,7 +191,7 @@
|
|||||||
</c:Health>
|
</c:Health>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="4.5"/>
|
<Color A="1" B="0" G="0" R="4.5"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<FilePath></FilePath>
|
<FilePath></FilePath>
|
||||||
</c:SoundEmitter>
|
</c:SoundEmitter>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCube.obj</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.58431375" R="0.43921569"/>
|
<Color A="1" B="1" G="0.58431375" R="0.43921569"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitSphere.obj</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="1.26689196"/>
|
<Position X="0" Y="0" Z="1.26689196"/>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitSphere.obj</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="-1.14786315"/>
|
<Position X="0" Y="0" Z="-1.14786315"/>
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="BluSpawn" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:PlayerSpawn/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/Player.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Blue/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="57.7363472" Y="1.18853188" Z="79.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:SpawnPoint/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
<Orientation X="0" Y="0" Z="0"/>
|
<Orientation X="0" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DummyScene.obj</Resource>
|
<Resource>Models/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -18,8 +18,25 @@
|
|||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Camera>
|
<c:Camera>
|
||||||
</c:Camera>
|
</c:Camera>
|
||||||
|
<Orientation X="0.0" Y="0.0" Z="0"/>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ExplosionOrigin X="0" Y="0" Z="0"/>
|
||||||
|
<TimeSinceDeath>0</TimeSinceDeath>
|
||||||
|
<ExplosionDuration>2</ExplosionDuration>
|
||||||
|
<!--<Gravity>1</Gravity>-->
|
||||||
|
<!--<GravityForce>1</GravityForce>-->
|
||||||
|
<!--<ObjectRadius>2</ObjectRadius>-->
|
||||||
|
<EndColor R="0" G="0" B="0" A="0"/>
|
||||||
|
<Randomness>0</Randomness>
|
||||||
|
<RandomnessScalar>1</RandomnessScalar>
|
||||||
|
<Velocity X="2" Y="2"/>
|
||||||
|
<ColorByDistance>0</ColorByDistance>
|
||||||
|
<!--<ReverseAnimation>0</ReverseAnimation>-->
|
||||||
|
<!--<Wireframe>0</Wireframe>-->
|
||||||
|
<ExponentialAccelaration>0</ExponentialAccelaration>
|
||||||
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
<Resource>Models/Camera.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
<xs:element ref="c:Model" minOccurs="0"/>
|
<xs:element ref="c:Model" minOccurs="0"/>
|
||||||
<xs:element ref="c:RaptorCopter" minOccurs="0"/>
|
<xs:element ref="c:RaptorCopter" minOccurs="0"/>
|
||||||
<xs:element ref="c:Player" minOccurs="0"/>
|
<xs:element ref="c:Player" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:ExplosionEffect" minOccurs="0"/>
|
||||||
<xs:element ref="c:Camera" minOccurs="0"/>
|
<xs:element ref="c:Camera" minOccurs="0"/>
|
||||||
<xs:element ref="c:Text" minOccurs="0"/>
|
<xs:element ref="c:Text" minOccurs="0"/>
|
||||||
<xs:element ref="c:AABB" minOccurs="0"/>
|
<xs:element ref="c:AABB" minOccurs="0"/>
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
<xs:element ref="c:DirectionalLight" minOccurs="0"/>
|
<xs:element ref="c:DirectionalLight" minOccurs="0"/>
|
||||||
<xs:element ref="c:UniformScale" minOccurs="0"/>
|
<xs:element ref="c:UniformScale" minOccurs="0"/>
|
||||||
<xs:element ref="c:EditorWidget" minOccurs="0"/>
|
<xs:element ref="c:EditorWidget" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:Lifetime" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -9,18 +9,14 @@ layout(location = 1) in vec3 Normal;
|
|||||||
layout(location = 2) in vec3 Tangent;
|
layout(location = 2) in vec3 Tangent;
|
||||||
layout(location = 3) in vec3 BiTangent;
|
layout(location = 3) in vec3 BiTangent;
|
||||||
layout(location = 4) in vec2 TextureCoords;
|
layout(location = 4) in vec2 TextureCoords;
|
||||||
layout(location = 5) in vec4 DiffuseVertexColor;
|
layout(location = 5) in vec4 BoneIndices;
|
||||||
layout(location = 6) in vec4 SpecularVertexColor;
|
layout(location = 6) in vec4 BoneWeights;
|
||||||
layout(location = 7) in vec4 BoneIndices1;
|
|
||||||
layout(location = 8) in vec4 BoneIndices2;
|
|
||||||
layout(location = 9) in vec4 BoneWeights1;
|
|
||||||
layout(location = 10) in vec4 BoneWeights2;
|
|
||||||
|
|
||||||
out VertexData{
|
out VertexData{
|
||||||
vec3 Position;
|
vec3 Position;
|
||||||
vec3 Normal;
|
vec3 Normal;
|
||||||
vec2 TextureCoordinate;
|
vec2 TextureCoordinate;
|
||||||
vec4 DiffuseColor;
|
|
||||||
}Output;
|
}Output;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@@ -30,5 +26,4 @@ void main()
|
|||||||
Output.Position = Position;
|
Output.Position = Position;
|
||||||
Output.TextureCoordinate = TextureCoords;
|
Output.TextureCoordinate = TextureCoords;
|
||||||
Output.Normal = Normal;
|
Output.Normal = Normal;
|
||||||
Output.DiffuseColor = DiffuseVertexColor;
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
uniform mat4 M;
|
||||||
|
uniform mat4 V;
|
||||||
|
uniform mat4 P;
|
||||||
|
uniform vec4 Color;
|
||||||
|
|
||||||
|
uniform sampler2D texture0;
|
||||||
|
|
||||||
|
in VertexData{
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoordinate;
|
||||||
|
vec4 DiffuseColor;
|
||||||
|
vec4 ExplosionColor;
|
||||||
|
}Input;
|
||||||
|
|
||||||
|
out vec4 fragmentColor;
|
||||||
|
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
vec4 texel = texture2D(texture0, Input.TextureCoordinate);
|
||||||
|
fragmentColor = texel * Input.DiffuseColor * Color + Input.ExplosionColor;
|
||||||
|
}
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
uniform mat4 M;
|
||||||
|
uniform mat4 V;
|
||||||
|
uniform mat4 P;
|
||||||
|
uniform vec3 ExplosionOrigin;
|
||||||
|
uniform float TimeSinceDeath;
|
||||||
|
uniform float ExplosionDuration;
|
||||||
|
uniform vec4 EndColor;
|
||||||
|
uniform bool Randomness;
|
||||||
|
uniform float RandomNumbers[50];
|
||||||
|
uniform float RandomnessScalar;
|
||||||
|
uniform vec2 Velocity;
|
||||||
|
uniform bool ColorByDistance;
|
||||||
|
uniform bool ExponentialAccelaration;
|
||||||
|
|
||||||
|
in VertexData{
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoordinate;
|
||||||
|
vec4 ExplosionColor;
|
||||||
|
}Input[];
|
||||||
|
|
||||||
|
out VertexData{
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoordinate;
|
||||||
|
vec4 ExplosionColor;
|
||||||
|
}Output;
|
||||||
|
|
||||||
|
layout(triangles) in;
|
||||||
|
layout(triangle_strip, max_vertices = 3) out;
|
||||||
|
|
||||||
|
// returns a "random" number based on input parameter
|
||||||
|
float GetRandomNumber(int polygon_index)
|
||||||
|
{
|
||||||
|
int randomIndex = int(mod(polygon_index, 50));
|
||||||
|
|
||||||
|
return RandomNumbers[randomIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
float randomNumber = 0.0;
|
||||||
|
float randomDistance = 0.0;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// calculate middle of vectors
|
||||||
|
vec3 v1 = Input[1].Position - Input[0].Position;
|
||||||
|
vec3 v2 = Input[2].Position - Input[0].Position;
|
||||||
|
vec3 v3 = Input[2].Position - (v1 / 2);
|
||||||
|
vec3 v4 = Input[1].Position - (v2 / 2);
|
||||||
|
|
||||||
|
// calculate intersection
|
||||||
|
|
||||||
|
// normalize direction
|
||||||
|
vec3 dir1 = normalize(v1);
|
||||||
|
vec3 dir2 = normalize(v2);
|
||||||
|
|
||||||
|
vec3 vecA = Input[2].Position - Input[1].Position; //o2 - o1
|
||||||
|
vec3 vecB = cross(dir1, dir2);
|
||||||
|
|
||||||
|
mat3 matrisA = mat3(vecA, dir2, vecB);
|
||||||
|
|
||||||
|
float lengthA = length(vecB);
|
||||||
|
lengthA = lengthA * lengthA;
|
||||||
|
|
||||||
|
float s = determinant(matrisA) / lengthA;
|
||||||
|
|
||||||
|
// center position of triangle
|
||||||
|
vec3 centerOfTriangle = Input[1].Position + (s * dir1);
|
||||||
|
|
||||||
|
// center position of triangle to origin vector
|
||||||
|
vec3 origin2TriangleCenterVector = centerOfTriangle - ExplosionOrigin;
|
||||||
|
vec3 normalizedOrigin2TriangleCenterVector = normalize(origin2TriangleCenterVector);
|
||||||
|
|
||||||
|
// time percentage until end of explosion (0.0-1.0)
|
||||||
|
float timePercetage = TimeSinceDeath / ExplosionDuration;
|
||||||
|
|
||||||
|
// get a random number if randomness is enabled, otherwise the random number will be zero and won't affect the other algorithms
|
||||||
|
if (Randomness == true)
|
||||||
|
{
|
||||||
|
randomDistance = GetRandomNumber(gl_PrimitiveIDIn) * RandomnessScalar;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 randomVelocity = Velocity * (randomDistance + 1.0);
|
||||||
|
|
||||||
|
// accelaration to use on current frame. is a interpolation between start and end value
|
||||||
|
float currentVelocity = mix(randomVelocity.x, randomVelocity.y, timePercetage);
|
||||||
|
|
||||||
|
if (ExponentialAccelaration == true)
|
||||||
|
{
|
||||||
|
currentVelocity = pow(currentVelocity, 2) / 2.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// distance between origin and the center of the current triangle
|
||||||
|
float origin2TriangleCenterDistance = length(origin2TriangleCenterVector);
|
||||||
|
|
||||||
|
// the distance from origin to the triangle center with eventual randomness added
|
||||||
|
float fullDistanceWithRandomness = origin2TriangleCenterDistance + randomDistance;
|
||||||
|
|
||||||
|
// vector from the triangle center to the explosion's shockwave
|
||||||
|
vec3 triangleCenter2ExplosionRadius = (normalizedOrigin2TriangleCenterVector * (TimeSinceDeath * currentVelocity)) - (normalizedOrigin2TriangleCenterVector * fullDistanceWithRandomness);
|
||||||
|
|
||||||
|
// if the triangle is inside the blast radius...
|
||||||
|
if (fullDistanceWithRandomness <= (TimeSinceDeath * currentVelocity))
|
||||||
|
{
|
||||||
|
float maxRadius = max(TimeSinceDeath * currentVelocity, (ExplosionDuration * currentVelocity));
|
||||||
|
|
||||||
|
float a = (randomVelocity.y - randomVelocity.x) / ExplosionDuration;
|
||||||
|
//float t = sqrt((2 * origin2TriangleCenterDistance) / a);
|
||||||
|
|
||||||
|
// if explosion color should be affected by distance instead of time...
|
||||||
|
if (ColorByDistance == true)
|
||||||
|
{
|
||||||
|
// calculate the max distance (s) the triangle will move
|
||||||
|
float s = (randomVelocity.x * ExplosionDuration) + (0.5 * a * pow(ExplosionDuration, 2));
|
||||||
|
|
||||||
|
Output.ExplosionColor = EndColor * (length(triangleCenter2ExplosionRadius) / s);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Output.ExplosionColor = EndColor * timePercetage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for every vertex on the triangle...
|
||||||
|
for (int i = 0; i < gl_in.length(); i++)
|
||||||
|
{
|
||||||
|
// move the triangle to the blast radius
|
||||||
|
vec3 ExplodedPosition = Input[i].Position + triangleCenter2ExplosionRadius;
|
||||||
|
|
||||||
|
// pass through vertex data
|
||||||
|
Output.Normal = Input[i].Normal;
|
||||||
|
Output.Position = Input[i].Position;
|
||||||
|
Output.TextureCoordinate = Input[i].TextureCoordinate;
|
||||||
|
|
||||||
|
// convert to model space for the gravity to always be in -y
|
||||||
|
vec4 ExplodedPositionInModelSpace = M * vec4(ExplodedPosition, 1.0);
|
||||||
|
|
||||||
|
// if there is gravity, apply it
|
||||||
|
//if (Gravity == true)
|
||||||
|
//{
|
||||||
|
// // ---DO THIS----> //ExplodedPositionInModelSpace.y = ExplodedPositionInModelSpace.y - TimeSinceHit;
|
||||||
|
//
|
||||||
|
// ExplodedPositionInModelSpace.y = ExplodedPositionInModelSpace.y - pow(TimeSinceDeath, 2);
|
||||||
|
//}
|
||||||
|
|
||||||
|
// convert to screen space
|
||||||
|
gl_Position = P*V * ExplodedPositionInModelSpace;
|
||||||
|
EmitVertex();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if explosion color should be affected by distance instead of time...
|
||||||
|
if (ColorByDistance == true)
|
||||||
|
{
|
||||||
|
Output.ExplosionColor = vec4(0.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Output.ExplosionColor = EndColor * timePercetage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for every vertex on the triangle...
|
||||||
|
for(int i = 0; i < gl_in.length(); i++)
|
||||||
|
{
|
||||||
|
// pass through vertex data
|
||||||
|
Output.Normal = Input[i].Normal;
|
||||||
|
Output.Position = Input[i].Position;
|
||||||
|
Output.TextureCoordinate = Input[i].TextureCoordinate;
|
||||||
|
|
||||||
|
// no change in position, pass through vertex
|
||||||
|
gl_Position = gl_in[i].gl_Position;
|
||||||
|
EmitVertex();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//EndPrimitive();
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
uniform mat4 M;
|
||||||
|
uniform mat4 V;
|
||||||
|
uniform mat4 P;
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 Position;
|
||||||
|
layout(location = 1) in vec3 Normal;
|
||||||
|
layout(location = 2) in vec3 Tangent;
|
||||||
|
layout(location = 3) in vec3 BiTangent;
|
||||||
|
layout(location = 4) in vec2 TextureCoords;
|
||||||
|
layout(location = 5) in vec4 DiffuseVertexColor;
|
||||||
|
layout(location = 6) in vec4 SpecularVertexColor;
|
||||||
|
layout(location = 7) in vec4 BoneIndices1;
|
||||||
|
layout(location = 8) in vec4 BoneIndices2;
|
||||||
|
layout(location = 9) in vec4 BoneWeights1;
|
||||||
|
layout(location = 10) in vec4 BoneWeights2;
|
||||||
|
|
||||||
|
out VertexData{
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoordinate;
|
||||||
|
vec4 DiffuseColor;
|
||||||
|
vec4 ExplosionColor;
|
||||||
|
}Output;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = P*V*M * vec4(Position, 1.0);
|
||||||
|
|
||||||
|
Output.Position = Position;
|
||||||
|
Output.TextureCoordinate = TextureCoords;
|
||||||
|
Output.Normal = Normal;
|
||||||
|
Output.DiffuseColor = DiffuseVertexColor;
|
||||||
|
Output.ExplosionColor = vec4(0.0);
|
||||||
|
}
|
||||||
@@ -4,10 +4,14 @@ uniform mat4 M;
|
|||||||
uniform mat4 V;
|
uniform mat4 V;
|
||||||
uniform mat4 P;
|
uniform mat4 P;
|
||||||
uniform vec4 Color;
|
uniform vec4 Color;
|
||||||
|
uniform vec4 DiffuseColor;
|
||||||
uniform vec2 ScreenDimensions;
|
uniform vec2 ScreenDimensions;
|
||||||
|
uniform vec4 FillColor;
|
||||||
|
uniform float FillPercentage;
|
||||||
layout (binding = 0) uniform sampler2D DiffuseTexture;
|
layout (binding = 0) uniform sampler2D DiffuseTexture;
|
||||||
layout (binding = 1) uniform sampler2D GlowMap;
|
layout (binding = 1) uniform sampler2D GlowMap;
|
||||||
|
|
||||||
|
|
||||||
#define TILE_SIZE 16
|
#define TILE_SIZE 16
|
||||||
|
|
||||||
struct LightSource {
|
struct LightSource {
|
||||||
@@ -46,7 +50,7 @@ in VertexData{
|
|||||||
vec3 Position;
|
vec3 Position;
|
||||||
vec3 Normal;
|
vec3 Normal;
|
||||||
vec2 TextureCoordinate;
|
vec2 TextureCoordinate;
|
||||||
vec4 DiffuseColor;
|
vec4 ExplosionColor;
|
||||||
}Input;
|
}Input;
|
||||||
|
|
||||||
out vec4 sceneColor;
|
out vec4 sceneColor;
|
||||||
@@ -134,12 +138,23 @@ void main()
|
|||||||
totalLighting.Specular += light_result.Specular;
|
totalLighting.Specular += light_result.Specular;
|
||||||
}
|
}
|
||||||
|
|
||||||
//sceneColor += Input.DiffuseColor;
|
|
||||||
vec4 color_result = Input.DiffuseColor * (totalLighting.Diffuse + totalLighting.Specular) * diffuseTexel * Color;
|
vec4 color_result = (DiffuseColor + Input.ExplosionColor) * (totalLighting.Diffuse + totalLighting.Specular) * diffuseTexel * Color;
|
||||||
|
|
||||||
|
|
||||||
|
float pos = ((P * vec4(Input.Position, 1)).y + 1.0)/2.0;
|
||||||
|
|
||||||
|
if(pos <= FillPercentage) {
|
||||||
|
color_result += FillColor;
|
||||||
|
}
|
||||||
//bloomColor = vec4(0.3, 0.8, 0.6, 1.0);
|
//bloomColor = vec4(0.3, 0.8, 0.6, 1.0);
|
||||||
sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
|
sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
|
||||||
//These if statements should be removed if they are slow.
|
//These if statements should be removed if they are slow.
|
||||||
color_result += glowTexel;
|
color_result += glowTexel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0);
|
bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0);
|
||||||
/*
|
/*
|
||||||
if(color_result.x > 1 || color_result.y > 1 || color_result.z > 1) {
|
if(color_result.x > 1 || color_result.y > 1 || color_result.z > 1) {
|
||||||
@@ -148,10 +163,9 @@ void main()
|
|||||||
bloomColor = vec4(0.0, 0.0, 0.0, 1.0);
|
bloomColor = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
} */
|
} */
|
||||||
|
|
||||||
//sceneColor += Input.DiffuseColor * (totalLighting.Diffuse) * diffuseTexel * Color;
|
|
||||||
//sceneColor += Input.DiffuseColor + vec4(0.0, LightGrids.Data[currentTile].Amount/3, 0, 1);
|
|
||||||
//sceneColor = diffuseTexel * Input.DiffuseColor * Color;
|
|
||||||
//sceneColor += vec4(currentTile/3600.f, 0, 0, 1);
|
|
||||||
|
|
||||||
//Tiled Debug Code
|
//Tiled Debug Code
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -3,32 +3,39 @@
|
|||||||
uniform mat4 M;
|
uniform mat4 M;
|
||||||
uniform mat4 V;
|
uniform mat4 V;
|
||||||
uniform mat4 P;
|
uniform mat4 P;
|
||||||
|
uniform mat4 Bones[100];
|
||||||
|
|
||||||
layout(location = 0) in vec3 Position;
|
layout(location = 0) in vec3 Position;
|
||||||
layout(location = 1) in vec3 Normal;
|
layout(location = 1) in vec3 Normal;
|
||||||
layout(location = 2) in vec3 Tangent;
|
layout(location = 2) in vec3 Tangent;
|
||||||
layout(location = 3) in vec3 BiTangent;
|
layout(location = 3) in vec3 BiTangent;
|
||||||
layout(location = 4) in vec2 TextureCoords;
|
layout(location = 4) in vec2 TextureCoords;
|
||||||
layout(location = 5) in vec4 DiffuseVertexColor;
|
layout(location = 5) in vec4 BoneIndices;
|
||||||
layout(location = 6) in vec4 SpecularVertexColor;
|
layout(location = 6) in vec4 BoneWeights;
|
||||||
layout(location = 7) in vec4 BoneIndices1;
|
|
||||||
layout(location = 8) in vec4 BoneIndices2;
|
|
||||||
layout(location = 9) in vec4 BoneWeights1;
|
|
||||||
layout(location = 10) in vec4 BoneWeights2;
|
|
||||||
|
|
||||||
out VertexData{
|
out VertexData{
|
||||||
vec3 Position;
|
vec3 Position;
|
||||||
vec3 Normal;
|
vec3 Normal;
|
||||||
vec2 TextureCoordinate;
|
vec2 TextureCoordinate;
|
||||||
vec4 DiffuseColor;
|
vec4 ExplosionColor;
|
||||||
}Output;
|
}Output;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = P*V*M * vec4(Position, 1.0);
|
|
||||||
|
|
||||||
Output.Position = Position;
|
|
||||||
|
mat4 boneTransform = mat4(1);
|
||||||
|
if(BoneWeights[0] > 0.0f){
|
||||||
|
boneTransform = BoneWeights[0] * Bones[int(BoneIndices[0])]
|
||||||
|
+ BoneWeights[1] * Bones[int(BoneIndices[1])]
|
||||||
|
+ BoneWeights[2] * Bones[int(BoneIndices[2])]
|
||||||
|
+ BoneWeights[3] * Bones[int(BoneIndices[3])];
|
||||||
|
}
|
||||||
|
|
||||||
|
gl_Position = P*V*M*boneTransform * vec4(Position, 1.0);
|
||||||
|
|
||||||
|
Output.Position = (boneTransform * vec4(Position, 1.0)).xyz;
|
||||||
Output.TextureCoordinate = TextureCoords;
|
Output.TextureCoordinate = TextureCoords;
|
||||||
Output.Normal = vec3(M * vec4(Normal, 0.0));
|
Output.Normal = vec3(M * vec4(Normal, 0.0));
|
||||||
Output.DiffuseColor = DiffuseVertexColor;
|
Output.ExplosionColor = vec4(0.0);
|
||||||
}
|
}
|
||||||
@@ -3,18 +3,15 @@
|
|||||||
uniform mat4 M;
|
uniform mat4 M;
|
||||||
uniform mat4 V;
|
uniform mat4 V;
|
||||||
uniform mat4 P;
|
uniform mat4 P;
|
||||||
|
uniform mat4 Bones[100];
|
||||||
|
|
||||||
layout(location = 0) in vec3 Position;
|
layout(location = 0) in vec3 Position;
|
||||||
layout(location = 1) in vec3 Normal;
|
layout(location = 1) in vec3 Normal;
|
||||||
layout(location = 2) in vec3 Tangent;
|
layout(location = 2) in vec3 Tangent;
|
||||||
layout(location = 3) in vec3 BiTangent;
|
layout(location = 3) in vec3 BiTangent;
|
||||||
layout(location = 4) in vec2 TextureCoords;
|
layout(location = 4) in vec2 TextureCoords;
|
||||||
layout(location = 5) in vec4 DiffuseVertexColor;
|
layout(location = 5) in vec4 BoneIndices;
|
||||||
layout(location = 6) in vec4 SpecularVertexColor;
|
layout(location = 6) in vec4 BoneWeights;
|
||||||
layout(location = 7) in vec4 BoneIndices1;
|
|
||||||
layout(location = 8) in vec4 BoneIndices2;
|
|
||||||
layout(location = 9) in vec4 BoneWeights1;
|
|
||||||
layout(location = 10) in vec4 BoneWeights2;
|
|
||||||
|
|
||||||
out VertexData{
|
out VertexData{
|
||||||
vec3 Position;
|
vec3 Position;
|
||||||
@@ -22,7 +19,14 @@ out VertexData{
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = P * V* M * vec4(Position, 1.0);
|
mat4 boneTransform = mat4(1);
|
||||||
|
if(BoneWeights[0] > 0.0f){
|
||||||
|
boneTransform = BoneWeights[0] * Bones[int(BoneIndices[0])]
|
||||||
|
+ BoneWeights[1] * Bones[int(BoneIndices[1])]
|
||||||
|
+ BoneWeights[2] * Bones[int(BoneIndices[2])]
|
||||||
|
+ BoneWeights[3] * Bones[int(BoneIndices[3])];
|
||||||
|
}
|
||||||
|
|
||||||
Output.Position = Position;
|
gl_Position = P*V*M*boneTransform * vec4(Position, 1.0);
|
||||||
|
Output.Position = (boneTransform * vec4(Position, 1.0)).xyz;
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,11 @@
|
|||||||
|
|
||||||
const EntityWrapper EntityWrapper::Invalid = EntityWrapper(nullptr, EntityID_Invalid);
|
const EntityWrapper EntityWrapper::Invalid = EntityWrapper(nullptr, EntityID_Invalid);
|
||||||
|
|
||||||
|
const std::string EntityWrapper::Name()
|
||||||
|
{
|
||||||
|
return World->GetName(ID);
|
||||||
|
}
|
||||||
|
|
||||||
bool EntityWrapper::HasComponent(const std::string& componentName)
|
bool EntityWrapper::HasComponent(const std::string& componentName)
|
||||||
{
|
{
|
||||||
if (!Valid()) {
|
if (!Valid()) {
|
||||||
@@ -22,17 +27,18 @@ EntityWrapper EntityWrapper::Parent()
|
|||||||
|
|
||||||
EntityWrapper EntityWrapper::FirstChildByName(const std::string& name)
|
EntityWrapper EntityWrapper::FirstChildByName(const std::string& name)
|
||||||
{
|
{
|
||||||
auto itPair = this->World->GetChildren(this->ID);
|
return firstChildByNameRecursive(name, this->ID);
|
||||||
if (itPair.first == itPair.second) {
|
}
|
||||||
return EntityWrapper::Invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto it = itPair.first; it != itPair.second; ++it) {
|
EntityWrapper EntityWrapper::FirstParentWithComponent(const std::string& componentType)
|
||||||
if (this->World->GetName(it->second) == name) {
|
{
|
||||||
return EntityWrapper(this->World, it->second);
|
EntityWrapper entity = *this;
|
||||||
|
while (entity.Parent().Valid()) {
|
||||||
|
entity = entity.Parent();
|
||||||
|
if (entity.HasComponent(componentType)) {
|
||||||
|
return entity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return EntityWrapper::Invalid;
|
return EntityWrapper::Invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,3 +102,29 @@ EntityWrapper::operator bool()
|
|||||||
return this->Valid();
|
return this->Valid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EntityWrapper EntityWrapper::firstChildByNameRecursive(const std::string& name, EntityID parent)
|
||||||
|
{
|
||||||
|
if (!this->World->ValidEntity(parent)) {
|
||||||
|
return EntityWrapper::Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto itPair = this->World->GetChildren(parent);
|
||||||
|
if (itPair.first == itPair.second) {
|
||||||
|
return EntityWrapper::Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto it = itPair.first; it != itPair.second; ++it) {
|
||||||
|
std::string itName = this->World->GetName(it->second);
|
||||||
|
if (itName == name) {
|
||||||
|
return EntityWrapper(this->World, it->second);
|
||||||
|
} else if (it->second != EntityID_Invalid) {
|
||||||
|
EntityWrapper result = firstChildByNameRecursive(name, it->second);
|
||||||
|
if (result != EntityWrapper::Invalid) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EntityWrapper::Invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
#include "Core/Transform.h"
|
#include "Core/Transform.h"
|
||||||
|
|
||||||
|
glm::mat4 Transform::AbsoluteTransformation(EntityWrapper entity)
|
||||||
|
{
|
||||||
|
glm::mat4 t = glm::mat4(1.f);
|
||||||
|
|
||||||
|
while (entity.Valid()) {
|
||||||
|
t = glm::translate((glm::vec3&)entity["Transform"]["Position"]) * glm::toMat4(glm::quat((glm::vec3&)entity["Transform"]["Orientation"])) * glm::scale((glm::vec3&)entity["Transform"]["Scale"]) * t;
|
||||||
|
entity = entity.Parent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
glm::vec3 Transform::AbsolutePosition(EntityWrapper entity)
|
glm::vec3 Transform::AbsolutePosition(EntityWrapper entity)
|
||||||
{
|
{
|
||||||
return AbsolutePosition(entity.World, entity.ID);
|
return AbsolutePosition(entity.World, entity.ID);
|
||||||
@@ -19,6 +31,19 @@ glm::vec3 Transform::AbsolutePosition(World* world, EntityID entity)
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glm::vec3 Transform::AbsoluteOrientationEuler(EntityWrapper entity)
|
||||||
|
{
|
||||||
|
glm::vec3 orientation;
|
||||||
|
|
||||||
|
while (entity.Valid()) {
|
||||||
|
ComponentWrapper transform = entity["Transform"];
|
||||||
|
orientation += (glm::vec3)transform["Orientation"];
|
||||||
|
entity = entity.Parent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return orientation;
|
||||||
|
}
|
||||||
|
|
||||||
glm::quat Transform::AbsoluteOrientation(EntityWrapper entity)
|
glm::quat Transform::AbsoluteOrientation(EntityWrapper entity)
|
||||||
{
|
{
|
||||||
return AbsoluteOrientation(entity.World, entity.ID);
|
return AbsoluteOrientation(entity.World, entity.ID);
|
||||||
@@ -62,6 +87,8 @@ glm::mat4 Transform::ModelMatrix(EntityWrapper entity)
|
|||||||
|
|
||||||
glm::mat4 Transform::ModelMatrix(EntityID entity, World* world)
|
glm::mat4 Transform::ModelMatrix(EntityID entity, World* world)
|
||||||
{
|
{
|
||||||
|
return AbsoluteTransformation(EntityWrapper(world, entity));
|
||||||
|
|
||||||
glm::vec3 position = Transform::AbsolutePosition(world, entity);
|
glm::vec3 position = Transform::AbsolutePosition(world, entity);
|
||||||
glm::quat orientation = Transform::AbsoluteOrientation(world, entity);
|
glm::quat orientation = Transform::AbsoluteOrientation(world, entity);
|
||||||
glm::vec3 scale = Transform::AbsoluteScale(world, entity);
|
glm::vec3 scale = Transform::AbsoluteScale(world, entity);
|
||||||
|
|||||||
+66
-32
@@ -1,4 +1,6 @@
|
|||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
|
#include "Core/EEntityDeleted.h"
|
||||||
|
#include "Core/EComponentDeleted.h"
|
||||||
|
|
||||||
World::~World()
|
World::~World()
|
||||||
{
|
{
|
||||||
@@ -21,37 +23,7 @@ EntityID World::CreateEntity(EntityID parent /*= 0*/)
|
|||||||
|
|
||||||
void World::DeleteEntity(EntityID entity)
|
void World::DeleteEntity(EntityID entity)
|
||||||
{
|
{
|
||||||
// Delete components
|
deleteEntityRecursive(entity, false);
|
||||||
for (auto& pair : m_ComponentPools) {
|
|
||||||
auto& pool = pair.second;
|
|
||||||
if (pool->KnowsEntity(entity)) {
|
|
||||||
auto& c = pool->GetByEntity(entity);
|
|
||||||
pool->Delete(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through children
|
|
||||||
std::vector<EntityID> childrenToDelete;
|
|
||||||
auto children = m_EntityChildren.equal_range(entity);
|
|
||||||
for (auto it = children.first; it != children.second; ++it) {
|
|
||||||
childrenToDelete.push_back(it->second);
|
|
||||||
}
|
|
||||||
for (auto& child : childrenToDelete) {
|
|
||||||
DeleteEntity(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
EntityID parent = m_EntityParents.at(entity);
|
|
||||||
m_EntityParents.erase(entity);
|
|
||||||
auto parentChildren = m_EntityChildren.equal_range(parent);
|
|
||||||
for (auto it = parentChildren.first; it != parentChildren.second; ++it) {
|
|
||||||
if (it->second == entity) {
|
|
||||||
m_EntityChildren.erase(it);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Erase potential name
|
|
||||||
m_EntityNames.erase(entity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool World::ValidEntity(EntityID entity) const
|
bool World::ValidEntity(EntityID entity) const
|
||||||
@@ -96,7 +68,15 @@ void World::DeleteComponent(EntityID entity, const std::string& componentType)
|
|||||||
{
|
{
|
||||||
ComponentPool* pool = m_ComponentPools.at(componentType);
|
ComponentPool* pool = m_ComponentPools.at(componentType);
|
||||||
ComponentWrapper c = pool->GetByEntity(entity);
|
ComponentWrapper c = pool->GetByEntity(entity);
|
||||||
return pool->Delete(c);
|
pool->Delete(c);
|
||||||
|
|
||||||
|
if (m_EventBroker != nullptr) {
|
||||||
|
Events::ComponentDeleted e;
|
||||||
|
e.Entity = entity;
|
||||||
|
e.ComponentType = componentType;
|
||||||
|
e.Cascaded = false;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ComponentPool* World::GetComponents(const std::string& componentType)
|
const ComponentPool* World::GetComponents(const std::string& componentType)
|
||||||
@@ -155,3 +135,57 @@ EntityID World::generateEntityID()
|
|||||||
return m_CurrentEntityID++;
|
return m_CurrentEntityID++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::deleteEntityRecursive(EntityID entity, bool cascaded /*= false*/)
|
||||||
|
{
|
||||||
|
// Don't attempt to delete entities that don't exist anyway
|
||||||
|
if (!ValidEntity(entity)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_EventBroker != nullptr) {
|
||||||
|
Events::EntityDeleted e;
|
||||||
|
e.DeletedEntity = entity;
|
||||||
|
e.Cascaded = cascaded;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete components
|
||||||
|
for (auto& pair : m_ComponentPools) {
|
||||||
|
auto& pool = pair.second;
|
||||||
|
if (pool->KnowsEntity(entity)) {
|
||||||
|
auto& c = pool->GetByEntity(entity);
|
||||||
|
pool->Delete(c);
|
||||||
|
if (m_EventBroker != nullptr) {
|
||||||
|
Events::ComponentDeleted e;
|
||||||
|
e.Entity = entity;
|
||||||
|
e.ComponentType = pair.first;
|
||||||
|
e.Cascaded = true;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop through children
|
||||||
|
std::vector<EntityID> childrenToDelete;
|
||||||
|
auto children = m_EntityChildren.equal_range(entity);
|
||||||
|
for (auto it = children.first; it != children.second; ++it) {
|
||||||
|
childrenToDelete.push_back(it->second);
|
||||||
|
}
|
||||||
|
for (auto& child : childrenToDelete) {
|
||||||
|
deleteEntityRecursive(child, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityID parent = m_EntityParents.at(entity);
|
||||||
|
m_EntityParents.erase(entity);
|
||||||
|
auto parentChildren = m_EntityChildren.equal_range(parent);
|
||||||
|
for (auto it = parentChildren.first; it != parentChildren.second; ++it) {
|
||||||
|
if (it->second == entity) {
|
||||||
|
m_EntityChildren.erase(it);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Erase potential name
|
||||||
|
m_EntityNames.erase(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "Editor/EditorGUI.h"
|
#include "Editor/EditorGUI.h"
|
||||||
|
#include "Rendering/ESetCamera.h"
|
||||||
|
|
||||||
EditorGUI::EditorGUI(World* world, EventBroker* eventBroker)
|
EditorGUI::EditorGUI(World* world, EventBroker* eventBroker)
|
||||||
: m_World(world)
|
: m_World(world)
|
||||||
@@ -305,6 +306,14 @@ bool EditorGUI::drawComponentNode(EntityWrapper entity, const ComponentInfo& ci)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ci.Name == "Camera") {
|
||||||
|
if (ImGui::Button("Activate")) {
|
||||||
|
Events::SetCamera e;
|
||||||
|
e.CameraEntity = entity;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ void EditorRenderSystem::Update(double dt)
|
|||||||
continue;
|
continue;
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
try {
|
try {
|
||||||
model = ResourceManager::Load<::Model>("Models/Core/Error.obj");
|
model = ResourceManager::Load<::Model>("Models/Core/Error.mesh");
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -48,8 +48,12 @@ void EditorRenderSystem::Update(double dt)
|
|||||||
EntityWrapper entity(m_World, cModel.EntityID);
|
EntityWrapper entity(m_World, cModel.EntityID);
|
||||||
glm::mat4 modelMatrix = Transform::ModelMatrix(entity.ID, entity.World);
|
glm::mat4 modelMatrix = Transform::ModelMatrix(entity.ID, entity.World);
|
||||||
for (auto matGroup : model->MaterialGroups()) {
|
for (auto matGroup : model->MaterialGroups()) {
|
||||||
std::shared_ptr<ModelJob> modelJob = std::make_shared<ModelJob>(model, scene.Camera, modelMatrix, matGroup, cModel, entity.World);
|
std::shared_ptr<ModelJob> modelJob = std::make_shared<ModelJob>(model, scene.Camera, modelMatrix, matGroup, cModel, entity.World, glm::vec4(0), 0.f);
|
||||||
scene.ForwardJobs.push_back(modelJob);
|
if(cModel["Transparent"]) {
|
||||||
|
scene.TransparentObjects.push_back(modelJob);
|
||||||
|
} else {
|
||||||
|
scene.OpaqueObjects.push_back(modelJob);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ bool EditorSystem::OnSetCamera(const Events::SetCamera& e)
|
|||||||
m_ActualCamera = e.CameraEntity;
|
m_ActualCamera = e.CameraEntity;
|
||||||
Events::SetCamera e2;
|
Events::SetCamera e2;
|
||||||
e2.CameraEntity = m_EditorCamera;
|
e2.CameraEntity = m_EditorCamera;
|
||||||
m_EventBroker->Publish(e2);
|
//m_EventBroker->Publish(e2);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
+129
-64
@@ -7,13 +7,13 @@ Client::Client(ConfigFile* config) : m_Socket(m_IOService)
|
|||||||
{
|
{
|
||||||
Network::initialize();
|
Network::initialize();
|
||||||
|
|
||||||
// Asumes root node is EntityID 0
|
// Asumes root node is EntityID_Invalid
|
||||||
insertIntoServerClientMaps(0, 0);
|
insertIntoServerClientMaps(EntityID_Invalid, EntityID_Invalid);
|
||||||
// Init timer
|
// Init timer
|
||||||
m_TimeSinceSentInputs = std::clock();
|
m_TimeSinceSentInputs = std::clock();
|
||||||
// Default is local host
|
// Default is local host
|
||||||
std::string address = config->Get<std::string>("Networking.Address", "127.0.0.1");
|
std::string address = config->Get<std::string>("Networking.Address", "127.0.0.1");
|
||||||
int port = config->Get<int>("Networking.Port", 13);
|
int port = config->Get<int>("Networking.Port", 27666);
|
||||||
m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string(address), port);
|
m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string(address), port);
|
||||||
// Set up network stream
|
// Set up network stream
|
||||||
m_PlayerName = config->Get<std::string>("Networking.Name", "Raptorcopter");
|
m_PlayerName = config->Get<std::string>("Networking.Name", "Raptorcopter");
|
||||||
@@ -31,7 +31,8 @@ void Client::Start(World* world, EventBroker* eventBroker)
|
|||||||
|
|
||||||
// Subscribe to events
|
// Subscribe to events
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Client::OnInputCommand);
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Client::OnInputCommand);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayeDamage, &Client::OnPlayerDamage);
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &Client::OnPlayerDamage);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &Client::OnPlayerSpawned);
|
||||||
|
|
||||||
m_Socket.connect(m_ReceiverEndpoint);
|
m_Socket.connect(m_ReceiverEndpoint);
|
||||||
LOG_INFO("I am client. BIP BOP");
|
LOG_INFO("I am client. BIP BOP");
|
||||||
@@ -48,6 +49,7 @@ void Client::Update()
|
|||||||
sendInputCommands();
|
sendInputCommands();
|
||||||
m_TimeSinceSentInputs = std::clock();
|
m_TimeSinceSentInputs = std::clock();
|
||||||
}
|
}
|
||||||
|
sendLocalPlayerTransform();
|
||||||
}
|
}
|
||||||
Network::Update();
|
Network::Update();
|
||||||
}
|
}
|
||||||
@@ -96,6 +98,12 @@ void Client::parseMessageType(Packet& packet)
|
|||||||
case MessageType::OnPlayerSpawned:
|
case MessageType::OnPlayerSpawned:
|
||||||
parsePlayersSpawned(packet);
|
parsePlayersSpawned(packet);
|
||||||
break;
|
break;
|
||||||
|
case MessageType::EntityDeleted:
|
||||||
|
parseEntityDeletion(packet);
|
||||||
|
break;
|
||||||
|
case MessageType::ComponentDeleted:
|
||||||
|
parseComponentDeletion(packet);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -139,9 +147,32 @@ void Client::parsePlayersSpawned(Packet& packet)
|
|||||||
e.Player = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
e.Player = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
||||||
e.Spawner = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
e.Spawner = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
||||||
e.PlayerID = -1;
|
e.PlayerID = -1;
|
||||||
|
e.PlayerName = packet.ReadString();
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::parseEntityDeletion(Packet & packet)
|
||||||
|
{
|
||||||
|
EntityID entityToDelete = packet.ReadPrimitive<EntityID>();
|
||||||
|
// TODO: What if an entity that didn't previously exist comes as a delete request and later comes in a delayed snapshot?
|
||||||
|
if (m_ServerIDToClientID.find(entityToDelete) != m_ServerIDToClientID.end()) {
|
||||||
|
EntityID localEntity = m_ServerIDToClientID.at(entityToDelete);
|
||||||
|
if (m_World->ValidEntity(localEntity)) {
|
||||||
|
m_World->DeleteEntity(localEntity);
|
||||||
|
deleteFromServerClientMaps(entityToDelete, localEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::parseComponentDeletion(Packet & packet)
|
||||||
|
{
|
||||||
|
EntityID entity = packet.ReadPrimitive<EntityID>();
|
||||||
|
std::string componentType = packet.ReadString();
|
||||||
|
if (m_World->HasComponent(entity, componentType)) {
|
||||||
|
m_World->DeleteComponent(m_ServerIDToClientID.at(entity), componentType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fields with strings will not work right now
|
// Fields with strings will not work right now
|
||||||
void Client::InterpolateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType)
|
void Client::InterpolateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType)
|
||||||
{
|
{
|
||||||
@@ -176,66 +207,53 @@ void Client::updateFields(Packet& packet, const ComponentInfo& componentInfo, co
|
|||||||
|
|
||||||
void Client::parseSnapshot(Packet& packet)
|
void Client::parseSnapshot(Packet& packet)
|
||||||
{
|
{
|
||||||
std::string componentType = packet.ReadString();
|
|
||||||
while (packet.DataReadSize() < packet.Size()) {
|
while (packet.DataReadSize() < packet.Size()) {
|
||||||
// HACK
|
EntityID serverEntityID = packet.ReadPrimitive<EntityID>();
|
||||||
std::string entityName = packet.ReadString();
|
EntityID serverParentID = packet.ReadPrimitive<EntityID>();
|
||||||
// Components EntityID
|
std::string serverEntityName = packet.ReadString();
|
||||||
EntityID receivedEntityID = packet.ReadPrimitive<EntityID>();
|
int ammountOfComponents = packet.ReadPrimitive<int>();
|
||||||
// HACK
|
for (int i = 0; i < ammountOfComponents; i++) {
|
||||||
m_World->SetName(receivedEntityID, entityName);
|
std::string componentType = packet.ReadString();
|
||||||
// Parents EntityID
|
ComponentInfo componentInfo = m_World->GetComponents(componentType)->ComponentInfo();
|
||||||
EntityID receivedParentEntityID = packet.ReadPrimitive<EntityID>();
|
if (serverClientMapsHasEntity(serverEntityID)) {
|
||||||
ComponentInfo componentInfo = m_World->GetComponents(componentType)->ComponentInfo();
|
EntityID localEntityID = m_ServerIDToClientID.at(serverEntityID);
|
||||||
// Check if the received EntityID is mapped to one of our local EntityIDs
|
// Update entity
|
||||||
if (serverClientMapsHasEntity(receivedEntityID)) {
|
if (m_World->HasComponent(localEntityID, componentType)) {
|
||||||
// Get the local EntityID
|
// Update component
|
||||||
EntityID entityID = m_ServerIDToClientID.at(receivedEntityID);
|
if (componentType == "Transform") {
|
||||||
// Check if the component exists
|
// Interpolate only transform components
|
||||||
if (m_World->HasComponent(entityID, componentType)) {
|
InterpolateFields(packet, componentInfo, localEntityID, componentType);
|
||||||
// If the entity and the component exists update it
|
} else if (componentType == "Physics" && m_World->HasComponent(localEntityID, "Player")) {
|
||||||
if (componentType == "Transform") {
|
// HACK: Ignore velocity of physics
|
||||||
InterpolateFields(packet, componentInfo, entityID, componentType);
|
packet.ReadData(componentInfo.Stride);
|
||||||
|
} else {
|
||||||
|
// Set component values
|
||||||
|
updateFields(packet, componentInfo, localEntityID, componentType);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
updateFields(packet, componentInfo, entityID, componentType);
|
// Has entity but no component
|
||||||
|
m_World->AttachComponent(localEntityID, componentType);
|
||||||
|
updateFields(packet, componentInfo, localEntityID, componentType);
|
||||||
}
|
}
|
||||||
// if entity exists but not the component
|
|
||||||
} else {
|
} else {
|
||||||
// Create component
|
// Create Entity and component
|
||||||
m_World->AttachComponent(entityID, componentType);
|
EntityID newLocalEntityID;
|
||||||
// Copy data to newly created component
|
if (serverParentID == EntityID_Invalid) {
|
||||||
updateFields(packet, componentInfo, entityID, componentType);
|
newLocalEntityID = m_World->CreateEntity(EntityID_Invalid);
|
||||||
|
} else {
|
||||||
|
newLocalEntityID = m_World->CreateEntity(m_ServerIDToClientID.at(serverParentID));
|
||||||
|
}
|
||||||
|
m_World->SetName(newLocalEntityID, serverEntityName);
|
||||||
|
insertIntoServerClientMaps(serverEntityID, newLocalEntityID);
|
||||||
|
m_World->AttachComponent(newLocalEntityID, componentType);
|
||||||
|
updateFields(packet, componentInfo, newLocalEntityID, componentType);
|
||||||
}
|
}
|
||||||
// If the entity dosent exist nor the component
|
|
||||||
} else {
|
|
||||||
// Create Entity
|
|
||||||
// If entity dosen't exist
|
|
||||||
EntityID newEntityID = m_World->CreateEntity();
|
|
||||||
insertIntoServerClientMaps(receivedEntityID, newEntityID);
|
|
||||||
// Check if EntityIDs are out of sync
|
|
||||||
if (newEntityID != receivedEntityID) {
|
|
||||||
LOG_INFO("Client::parseSnapshot(Packet& packet): Newly created EntityID is not the \
|
|
||||||
same as the one sent by server (EntityIDs are out of sync)");
|
|
||||||
}
|
|
||||||
// Create component
|
|
||||||
m_World->AttachComponent(newEntityID, componentType);
|
|
||||||
// Copy data to newly created component
|
|
||||||
updateFields(packet, componentInfo, newEntityID, componentType);
|
|
||||||
}
|
}
|
||||||
|
// Parent logic
|
||||||
// Parent Logic
|
// This should be enough beacause we know that the entities arives in pre-order (there will always be a parent)
|
||||||
// Don't need to check if receivedEntityID is mapped. (It should have been set)
|
if (serverParentID != EntityID_Invalid) {
|
||||||
if (receivedParentEntityID != std::numeric_limits<EntityID>::max()) {
|
EntityID localEntityID = m_ServerIDToClientID.at(serverEntityID);
|
||||||
if (serverClientMapsHasEntity(receivedParentEntityID)) {
|
m_World->SetParent(localEntityID, m_ServerIDToClientID.at(serverParentID));
|
||||||
m_World->SetParent(m_ServerIDToClientID.at(receivedEntityID), m_ServerIDToClientID.at(receivedParentEntityID));
|
|
||||||
// If Parent dosen't exist create one and map receivedParentEntityID to it.
|
|
||||||
} else {
|
|
||||||
// Create the new parent and add it to map
|
|
||||||
EntityID newParentEntityID = m_World->CreateEntity();
|
|
||||||
insertIntoServerClientMaps(receivedParentEntityID, newParentEntityID);
|
|
||||||
// Set the newly created Entity as parent.
|
|
||||||
m_World->SetParent(m_ServerIDToClientID.at(receivedEntityID), newParentEntityID);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -326,13 +344,40 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
|
|||||||
|
|
||||||
bool Client::OnPlayerDamage(const Events::PlayerDamage & e)
|
bool Client::OnPlayerDamage(const Events::PlayerDamage & e)
|
||||||
{
|
{
|
||||||
Packet packet(MessageType::OnInputCommand, m_SendPacketID);
|
Packet packet(MessageType::OnPlayerDamage, m_SendPacketID);
|
||||||
packet.WritePrimitive(e.DamageAmount);
|
packet.WritePrimitive(e.Damage);
|
||||||
packet.WritePrimitive(e.PlayerDamagedID);
|
packet.WritePrimitive(m_ClientIDToServerID.at(e.Player.ID));
|
||||||
send(packet);
|
send(packet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Client::OnPlayerSpawned(const Events::PlayerSpawned& e)
|
||||||
|
{
|
||||||
|
if (e.PlayerID == -1) {
|
||||||
|
m_LocalPlayer = e.Player;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::sendLocalPlayerTransform()
|
||||||
|
{
|
||||||
|
if (!m_LocalPlayer.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentWrapper cTransform = m_LocalPlayer["Transform"];
|
||||||
|
glm::vec3& position = cTransform["Position"];
|
||||||
|
glm::vec3& orientation = cTransform["Orientation"];
|
||||||
|
Packet packet(MessageType::PlayerTransform, m_SendPacketID);
|
||||||
|
packet.WritePrimitive(position.x);
|
||||||
|
packet.WritePrimitive(position.y);
|
||||||
|
packet.WritePrimitive(position.z);
|
||||||
|
packet.WritePrimitive(orientation.x);
|
||||||
|
packet.WritePrimitive(orientation.y);
|
||||||
|
packet.WritePrimitive(orientation.z);
|
||||||
|
send(packet);
|
||||||
|
}
|
||||||
|
|
||||||
void Client::identifyPacketLoss()
|
void Client::identifyPacketLoss()
|
||||||
{
|
{
|
||||||
// if no packets lost, difference should be equal to 1
|
// if no packets lost, difference should be equal to 1
|
||||||
@@ -360,7 +405,7 @@ EntityID Client::createPlayer()
|
|||||||
EntityID entityID = m_World->CreateEntity();
|
EntityID entityID = m_World->CreateEntity();
|
||||||
ComponentWrapper transform = m_World->AttachComponent(entityID, "Transform");
|
ComponentWrapper transform = m_World->AttachComponent(entityID, "Transform");
|
||||||
ComponentWrapper model = m_World->AttachComponent(entityID, "Model");
|
ComponentWrapper model = m_World->AttachComponent(entityID, "Model");
|
||||||
model["Resource"] = "Models/Core/UnitSphere.obj";
|
model["Resource"] = "Models/Core/UnitSphere.mesh";
|
||||||
ComponentWrapper player = m_World->AttachComponent(entityID, "Player");
|
ComponentWrapper player = m_World->AttachComponent(entityID, "Player");
|
||||||
return entityID;
|
return entityID;
|
||||||
}
|
}
|
||||||
@@ -386,12 +431,26 @@ void Client::becomePlayer()
|
|||||||
|
|
||||||
bool Client::clientServerMapsHasEntity(EntityID clientEntityID)
|
bool Client::clientServerMapsHasEntity(EntityID clientEntityID)
|
||||||
{
|
{
|
||||||
return m_ClientIDToServerID.find(clientEntityID) != m_ClientIDToServerID.end();
|
if (m_ClientIDToServerID.find(clientEntityID) != m_ClientIDToServerID.end()) {
|
||||||
|
if (m_World->ValidEntity(clientEntityID)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EntityID serverEntityID = m_ClientIDToServerID.at(clientEntityID);
|
||||||
|
deleteFromServerClientMaps(serverEntityID, clientEntityID);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::serverClientMapsHasEntity(EntityID serverEntityID)
|
bool Client::serverClientMapsHasEntity(EntityID serverEntityID)
|
||||||
{
|
{
|
||||||
return m_ServerIDToClientID.find(serverEntityID) != m_ServerIDToClientID.end();
|
if (m_ServerIDToClientID.find(serverEntityID) != m_ServerIDToClientID.end()) {
|
||||||
|
EntityID localEntityID = m_ServerIDToClientID.at(serverEntityID);
|
||||||
|
if (m_World->ValidEntity(localEntityID)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
deleteFromServerClientMaps(serverEntityID, localEntityID);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID)
|
void Client::insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID)
|
||||||
@@ -400,3 +459,9 @@ void Client::insertIntoServerClientMaps(EntityID serverEntityID, EntityID client
|
|||||||
m_ClientIDToServerID.insert(std::make_pair(clientEntityID, serverEntityID));
|
m_ClientIDToServerID.insert(std::make_pair(clientEntityID, serverEntityID));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client::deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID)
|
||||||
|
{
|
||||||
|
m_ServerIDToClientID.erase(serverEntityID);
|
||||||
|
m_ClientIDToServerID.erase(clientEntityID);
|
||||||
|
}
|
||||||
|
|||||||
+142
-139
@@ -21,9 +21,8 @@ void Server::Start(World* world, EventBroker* eventBroker)
|
|||||||
// Subscribe to events
|
// Subscribe to events
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Server::OnInputCommand);
|
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Server::OnInputCommand);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &Server::OnPlayerSpawned);
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &Server::OnPlayerSpawned);
|
||||||
for (size_t i = 0; i < m_MaxConnections; i++) {
|
EVENT_SUBSCRIBE_MEMBER(m_EEntityDeleted, &Server::OnEntityDeleted);
|
||||||
m_PlayerDefinitions[i].StopTime = std::clock();
|
EVENT_SUBSCRIBE_MEMBER(m_EComponentDeleted, &Server::OnComponentDeleted);
|
||||||
}
|
|
||||||
LOG_INFO("I am Server. BIP BOP\n");
|
LOG_INFO("I am Server. BIP BOP\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,8 +95,8 @@ void Server::parseMessageType(Packet& packet)
|
|||||||
case MessageType::OnPlayerDamage:
|
case MessageType::OnPlayerDamage:
|
||||||
parseOnPlayerDamage(packet);
|
parseOnPlayerDamage(packet);
|
||||||
break;
|
break;
|
||||||
case MessageType::BecomePlayer:
|
case MessageType::PlayerTransform:
|
||||||
createPlayer();
|
parsePlayerTransform(packet);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -119,31 +118,22 @@ int Server::receive(char * data)
|
|||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::send(Packet& packet, UserID user)
|
|
||||||
{
|
|
||||||
int bytesSent = m_Socket.send_to(
|
|
||||||
boost::asio::buffer(packet.Data(), packet.Size()),
|
|
||||||
m_ConnectedUsers[user].Endpoint,
|
|
||||||
0);
|
|
||||||
// Network Debug data
|
|
||||||
if (isReadingData) {
|
|
||||||
m_NetworkData.TotalDataSent += packet.Size();
|
|
||||||
m_NetworkData.DataSentThisInterval += packet.Size();
|
|
||||||
m_NetworkData.AmountOfMessagesSent++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Server::send(PlayerID player, Packet& packet)
|
void Server::send(PlayerID player, Packet& packet)
|
||||||
{
|
{
|
||||||
int bytesSent = m_Socket.send_to(
|
try {
|
||||||
boost::asio::buffer(packet.Data(), packet.Size()),
|
int bytesSent = m_Socket.send_to(
|
||||||
m_PlayerDefinitions[player].Endpoint,
|
boost::asio::buffer(packet.Data(), packet.Size()),
|
||||||
0);
|
m_ConnectedPlayers[player].Endpoint,
|
||||||
// Network Debug data
|
0);
|
||||||
if (isReadingData) {
|
// Network Debug data
|
||||||
m_NetworkData.TotalDataSent += packet.Size();
|
if (isReadingData) {
|
||||||
m_NetworkData.DataSentThisInterval += packet.Size();
|
m_NetworkData.TotalDataSent += packet.Size();
|
||||||
m_NetworkData.AmountOfMessagesSent++;
|
m_NetworkData.DataSentThisInterval += packet.Size();
|
||||||
|
m_NetworkData.AmountOfMessagesSent++;
|
||||||
|
}
|
||||||
|
} catch (const boost::system::system_error& e) {
|
||||||
|
// TODO: Clean up invalid endpoints out of m_ConnectedPlayers later
|
||||||
|
m_ConnectedPlayers[player].Endpoint = boost::asio::ip::udp::endpoint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,58 +154,72 @@ void Server::send(Packet & packet)
|
|||||||
|
|
||||||
void Server::broadcast(Packet& packet)
|
void Server::broadcast(Packet& packet)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
for (auto& kv : m_ConnectedPlayers) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() != boost::asio::ip::address()) {
|
packet.ChangePacketID(kv.second.PacketID);
|
||||||
packet.ChangePacketID(m_ConnectedUsers[i].PacketID);
|
send(kv.first, packet);
|
||||||
send(packet, i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send snapshot fields
|
// Send snapshot fields
|
||||||
void Server::sendSnapshot()
|
void Server::sendSnapshot()
|
||||||
{
|
{
|
||||||
// Should time this
|
Packet packet(MessageType::Snapshot);
|
||||||
std::unordered_map<std::string, ComponentPool*> worldComponentPools = m_World->GetComponentPools();
|
addChildrenToPacket(packet, EntityID_Invalid);
|
||||||
for (auto& it : worldComponentPools) {
|
broadcast(packet);
|
||||||
Packet packet(MessageType::Snapshot);
|
}
|
||||||
ComponentPool* componentPool = it.second;
|
|
||||||
ComponentInfo componentInfo = componentPool->ComponentInfo();
|
|
||||||
|
|
||||||
// Component Type
|
void Server::addChildrenToPacket(Packet & packet, EntityID entityID)
|
||||||
packet.WriteString(componentInfo.Name);
|
{
|
||||||
for (auto& componentWrapper : *componentPool) {
|
auto itPair = m_World->GetChildren(entityID);
|
||||||
// HACK: Send entity name
|
std::unordered_map<std::string, ComponentPool*> worldComponentPools = m_World->GetComponentPools();
|
||||||
packet.WriteString(m_World->GetName(componentWrapper.EntityID));
|
// Loop through every child
|
||||||
// Components EntityID
|
for (auto it = itPair.first; it != itPair.second; it++) {
|
||||||
packet.WritePrimitive(componentWrapper.EntityID);
|
EntityID childEntityID = it->second;
|
||||||
// Parents EntityID
|
// Write EntityID and parentsID and Entity name
|
||||||
packet.WritePrimitive(m_World->GetParent(componentWrapper.EntityID));
|
packet.WritePrimitive(childEntityID);
|
||||||
for (auto& componentField : componentWrapper.Info.FieldsInOrder) {
|
packet.WritePrimitive(entityID);
|
||||||
ComponentInfo::Field_t fieldInfo = componentInfo.Fields.at(componentField);
|
packet.WriteString(m_World->GetName(childEntityID));
|
||||||
if (fieldInfo.Type == "string") {
|
// Write components to child
|
||||||
std::string& value = componentWrapper[componentField];
|
int numberOfComponents = 0;
|
||||||
packet.WriteString(value);
|
for (auto& i : worldComponentPools) {
|
||||||
} else {
|
if (i.second->KnowsEntity(childEntityID)) {
|
||||||
packet.WriteData(componentWrapper.Data + fieldInfo.Offset, fieldInfo.Stride);
|
numberOfComponents++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Write how many components should be read
|
||||||
|
packet.WritePrimitive(numberOfComponents);
|
||||||
|
for (auto& i : worldComponentPools) {
|
||||||
|
// If the entity exist in the pool
|
||||||
|
if (i.second->KnowsEntity(childEntityID)) {
|
||||||
|
ComponentWrapper componentWrapper = i.second->GetByEntity(childEntityID);
|
||||||
|
// ComponentType
|
||||||
|
packet.WriteString(componentWrapper.Info.Name);
|
||||||
|
// Loop through fields
|
||||||
|
for (auto& componentField : componentWrapper.Info.FieldsInOrder) {
|
||||||
|
ComponentInfo::Field_t fieldInfo = componentWrapper.Info.Fields.at(componentField);
|
||||||
|
if (fieldInfo.Type == "string") {
|
||||||
|
std::string& value = componentWrapper[componentField];
|
||||||
|
packet.WriteString(value);
|
||||||
|
} else {
|
||||||
|
packet.WriteData(componentWrapper.Data + fieldInfo.Offset, fieldInfo.Stride);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (packet.Size() > packet.HeaderSize() + componentInfo.Name.size()) {
|
// Go to to your children
|
||||||
broadcast(packet);
|
addChildrenToPacket(packet, childEntityID);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::sendPing()
|
void Server::sendPing()
|
||||||
{
|
{
|
||||||
// Prints connected players ping
|
// Prints connected players ping
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
//for (int i = 0; i < m_ConnectedPlayers.size(); i++) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() != boost::asio::ip::address()) {
|
// if (m_ConnectedPlayers[i].Endpoint.address() != boost::asio::ip::address()) {
|
||||||
int ping = 1000 * (m_ConnectedUsers[i].StopTime - m_StartPingTime) / static_cast<double>(CLOCKS_PER_SEC);
|
// int ping = 1000 * (m_ConnectedPlayers[i].StopTime - m_StartPingTime) / static_cast<double>(CLOCKS_PER_SEC);
|
||||||
LOG_INFO("Last packetID received %i: User %i's ping: %i", m_ConnectedUsers[i].PacketID, i, std::abs(ping));
|
// LOG_INFO("Last packetID received %i: User %i's ping: %i", m_ConnectedPlayers[i].PacketID, i, std::abs(ping));
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
// Create ping message
|
// Create ping message
|
||||||
Packet packet(MessageType::Ping);
|
Packet packet(MessageType::Ping);
|
||||||
packet.WriteString("Ping from server");
|
packet.WriteString("Ping from server");
|
||||||
@@ -230,9 +234,9 @@ void Server::checkForTimeOuts()
|
|||||||
int startPing = 1000 * m_StartPingTime
|
int startPing = 1000 * m_StartPingTime
|
||||||
/ static_cast<double>(CLOCKS_PER_SEC);
|
/ static_cast<double>(CLOCKS_PER_SEC);
|
||||||
|
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
for (int i = 0; i < m_ConnectedPlayers.size(); i++) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() != boost::asio::ip::address()) {
|
if (m_ConnectedPlayers[i].Endpoint.address() != boost::asio::ip::address()) {
|
||||||
int stopPing = 1000 * m_ConnectedUsers[i].StopTime /
|
int stopPing = 1000 * m_ConnectedPlayers[i].StopTime /
|
||||||
static_cast<double>(CLOCKS_PER_SEC);
|
static_cast<double>(CLOCKS_PER_SEC);
|
||||||
if (startPing > stopPing + m_TimeoutMs) {
|
if (startPing > stopPing + m_TimeoutMs) {
|
||||||
LOG_INFO("User %i timed out!", i);
|
LOG_INFO("User %i timed out!", i);
|
||||||
@@ -242,40 +246,30 @@ void Server::checkForTimeOuts()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::disconnect(UserID user)
|
void Server::disconnect(PlayerID playerID)
|
||||||
{
|
{
|
||||||
//broadcast("A player disconnected");
|
//broadcast("A player disconnected");
|
||||||
LOG_INFO("User %s disconnected/timed out", m_PlayerDefinitions[user].Name.c_str());
|
LOG_INFO("User %s disconnected/timed out", m_ConnectedPlayers[playerID].Name.c_str());
|
||||||
// Remove enteties and stuff (When we can remove entity, remove it and tell clients to remove the copy they have)
|
// Remove enteties and stuff (When we can remove entity, remove it and tell clients to remove the copy they have)
|
||||||
Events::PlayerDisconnected e;
|
Events::PlayerDisconnected e;
|
||||||
e.Entity = m_PlayerDefinitions[user].EntityID;
|
e.Entity = m_ConnectedPlayers[playerID].EntityID;
|
||||||
e.PlayerID = user;
|
e.PlayerID = playerID;
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
|
|
||||||
m_PlayerDefinitions[user].Endpoint = boost::asio::ip::udp::endpoint();
|
m_ConnectedPlayers.erase(playerID);
|
||||||
m_PlayerDefinitions[user].EntityID = -1;
|
|
||||||
m_PlayerDefinitions[user].Name = "";
|
|
||||||
m_PlayerDefinitions[user].PacketID = 0;
|
|
||||||
m_ConnectedUsers.erase(m_ConnectedUsers.begin() + user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::parseOnInputCommand(Packet& packet)
|
void Server::parseOnInputCommand(Packet& packet)
|
||||||
{
|
{
|
||||||
PlayerID player = -1;
|
PlayerID player = -1;
|
||||||
// Check which player it was who sent the message
|
// Check which player it was who sent the message
|
||||||
for (int i = 0; i < m_MaxConnections; i++) {
|
player = GetPlayerIDFromEndpoint(m_ReceiverEndpoint);
|
||||||
// if the player is connected set playerID to the correct PlayerID
|
|
||||||
if (m_PlayerDefinitions[i].Endpoint.address() == m_ReceiverEndpoint.address()
|
|
||||||
&& m_PlayerDefinitions[i].Endpoint.port() == m_ReceiverEndpoint.port()) {
|
|
||||||
player = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (player != -1) {
|
if (player != -1) {
|
||||||
while (packet.DataReadSize() < packet.Size()) {
|
while (packet.DataReadSize() < packet.Size()) {
|
||||||
Events::InputCommand e;
|
Events::InputCommand e;
|
||||||
e.Command = packet.ReadString();
|
e.Command = packet.ReadString();
|
||||||
e.PlayerID = player; // Set correct player id
|
e.PlayerID = player; // Set correct player id
|
||||||
|
e.Player = EntityWrapper(m_World, m_ConnectedPlayers.at(player).EntityID);
|
||||||
e.Value = packet.ReadPrimitive<float>();
|
e.Value = packet.ReadPrimitive<float>();
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
//LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
//LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
@@ -286,8 +280,8 @@ void Server::parseOnInputCommand(Packet& packet)
|
|||||||
void Server::parseOnPlayerDamage(Packet & packet)
|
void Server::parseOnPlayerDamage(Packet & packet)
|
||||||
{
|
{
|
||||||
Events::PlayerDamage e;
|
Events::PlayerDamage e;
|
||||||
e.DamageAmount = packet.ReadPrimitive<double>();
|
e.Damage = packet.ReadPrimitive<double>();
|
||||||
e.PlayerDamagedID = packet.ReadPrimitive<EntityID>();
|
e.Player = EntityWrapper(m_World, packet.ReadPrimitive<EntityID>());
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
//LOG_DEBUG("Server::parseOnPlayerDamage: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
|
//LOG_DEBUG("Server::parseOnPlayerDamage: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
|
||||||
}
|
}
|
||||||
@@ -299,9 +293,9 @@ void Server::parseConnect(Packet& packet)
|
|||||||
if (GetPlayerIDFromEndpoint(m_ReceiverEndpoint) != -1) {
|
if (GetPlayerIDFromEndpoint(m_ReceiverEndpoint) != -1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
for (auto& kv : m_ConnectedPlayers) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() == m_ReceiverEndpoint.address() &&
|
if (kv.second.Endpoint.address() == m_ReceiverEndpoint.address() &&
|
||||||
m_ConnectedUsers[i].Endpoint.port() == m_ReceiverEndpoint.port()) {
|
kv.second.Endpoint.port() == m_ReceiverEndpoint.port()) {
|
||||||
// Already connected
|
// Already connected
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -313,11 +307,11 @@ void Server::parseConnect(Packet& packet)
|
|||||||
pd.Name = packet.ReadString();
|
pd.Name = packet.ReadString();
|
||||||
pd.PacketID = 0;
|
pd.PacketID = 0;
|
||||||
pd.StopTime = std::clock();
|
pd.StopTime = std::clock();
|
||||||
m_ConnectedUsers.push_back(pd);
|
m_ConnectedPlayers[m_NextPlayerID++] = pd;
|
||||||
LOG_INFO("Spectator \"%s\" connected on IP: %s", pd.Name.c_str(), pd.Endpoint.address().to_string().c_str());
|
LOG_INFO("Spectator \"%s\" connected on IP: %s", pd.Name.c_str(), pd.Endpoint.address().to_string().c_str());
|
||||||
|
|
||||||
// Send a message to the player that connected
|
// Send a message to the player that connected
|
||||||
Packet connnectPacket(MessageType::Connect, m_ConnectedUsers[m_ConnectedUsers.size() - 1].PacketID);
|
Packet connnectPacket(MessageType::Connect, pd.PacketID);
|
||||||
send(connnectPacket);
|
send(connnectPacket);
|
||||||
|
|
||||||
// Send notification that a player has connected
|
// Send notification that a player has connected
|
||||||
@@ -329,9 +323,10 @@ void Server::parseDisconnect()
|
|||||||
{
|
{
|
||||||
LOG_INFO("%i: Parsing disconnect", m_PacketID);
|
LOG_INFO("%i: Parsing disconnect", m_PacketID);
|
||||||
|
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
for (auto& kv : m_ConnectedPlayers) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() == m_ReceiverEndpoint.address()) {
|
if (kv.second.Endpoint.address() == m_ReceiverEndpoint.address() &&
|
||||||
disconnect(i);
|
kv.second.Endpoint.port() == m_ReceiverEndpoint.port()) {
|
||||||
|
disconnect(kv.first);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,16 +340,16 @@ void Server::parseClientPing()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Return ping
|
// Return ping
|
||||||
Packet packet(MessageType::Ping, m_PlayerDefinitions[player].PacketID);
|
Packet packet(MessageType::Ping, m_ConnectedPlayers[player].PacketID);
|
||||||
packet.WriteString("Ping received");
|
packet.WriteString("Ping received");
|
||||||
send(packet);
|
send(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::parsePing()
|
void Server::parsePing()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_ConnectedUsers.size(); i++) {
|
for (int i = 0; i < m_ConnectedPlayers.size(); i++) {
|
||||||
if (m_ConnectedUsers[i].Endpoint.address() == m_ReceiverEndpoint.address()) {
|
if (m_ConnectedPlayers[i].Endpoint.address() == m_ReceiverEndpoint.address()) {
|
||||||
m_ConnectedUsers[i].StopTime = std::clock();
|
m_ConnectedPlayers[i].StopTime = std::clock();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -369,43 +364,6 @@ void Server::identifyPacketLoss()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::createPlayer()
|
|
||||||
{
|
|
||||||
if (GetPlayerIDFromEndpoint(m_ReceiverEndpoint) != -1) {
|
|
||||||
// Already connected as player
|
|
||||||
LOG_WARNING("Already connected!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
UserID userIndex;
|
|
||||||
for (userIndex = 0; userIndex < m_ConnectedUsers.size(); userIndex++) {
|
|
||||||
if (m_ConnectedUsers[userIndex].Endpoint.address() == m_ReceiverEndpoint.address() &&
|
|
||||||
m_ConnectedUsers[userIndex].Endpoint.port() == m_ReceiverEndpoint.port()) {
|
|
||||||
// Found user
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (userIndex == m_ConnectedUsers.size()) {
|
|
||||||
LOG_WARNING("Not a recognized user!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (PlayerID playerIndex = 0; playerIndex < m_MaxConnections; playerIndex++) {
|
|
||||||
if (m_PlayerDefinitions[playerIndex].Endpoint.address() == boost::asio::ip::address()) {
|
|
||||||
m_PlayerDefinitions[playerIndex] = m_ConnectedUsers[userIndex];
|
|
||||||
EntityID entityID = m_World->CreateEntity();
|
|
||||||
ComponentWrapper transform = m_World->AttachComponent(entityID, "Transform");
|
|
||||||
transform["Position"] = glm::vec3(-1.5f, 0.f, 0.f);
|
|
||||||
ComponentWrapper model = m_World->AttachComponent(entityID, "Model");
|
|
||||||
model["Resource"] = "Models/Core/UnitSphere.obj";
|
|
||||||
model["Color"] = glm::vec4(rand()%255 / 255.f, rand()%255 / 255.f, rand() %255 / 255.f, 1.f);
|
|
||||||
ComponentWrapper player = m_World->AttachComponent(entityID, "Player");
|
|
||||||
m_PlayerDefinitions[playerIndex].EntityID = entityID;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LOG_WARNING("Server is full!");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Server::kick(PlayerID player)
|
void Server::kick(PlayerID player)
|
||||||
{
|
{
|
||||||
disconnect(player);
|
disconnect(player);
|
||||||
@@ -415,10 +373,10 @@ void Server::kick(PlayerID player)
|
|||||||
|
|
||||||
PlayerID Server::GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint)
|
PlayerID Server::GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_MaxConnections; i++) {
|
for (auto& kv : m_ConnectedPlayers) {
|
||||||
if (m_PlayerDefinitions[i].Endpoint.address() == endpoint.address() &&
|
if (kv.second.Endpoint.address() == endpoint.address() &&
|
||||||
m_PlayerDefinitions[i].Endpoint.port() == endpoint.port()) {
|
kv.second.Endpoint.port() == endpoint.port()) {
|
||||||
return i;
|
return kv.first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@@ -443,9 +401,54 @@ bool Server::OnInputCommand(const Events::InputCommand & e)
|
|||||||
|
|
||||||
bool Server::OnPlayerSpawned(const Events::PlayerSpawned & e)
|
bool Server::OnPlayerSpawned(const Events::PlayerSpawned & e)
|
||||||
{
|
{
|
||||||
|
m_ConnectedPlayers[e.PlayerID].EntityID = e.Player.ID;
|
||||||
|
|
||||||
Packet packet = Packet(MessageType::OnPlayerSpawned);
|
Packet packet = Packet(MessageType::OnPlayerSpawned);
|
||||||
packet.WritePrimitive<EntityID>(e.Player.ID);
|
packet.WritePrimitive<EntityID>(e.Player.ID);
|
||||||
packet.WritePrimitive<EntityID>(e.Spawner.ID);
|
packet.WritePrimitive<EntityID>(e.Spawner.ID);
|
||||||
|
// We don't send PlayerID here because it will always be set to -1
|
||||||
|
packet.WriteString(m_ConnectedPlayers[e.PlayerID].Name);
|
||||||
send(e.PlayerID, packet);
|
send(e.PlayerID, packet);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Server::OnEntityDeleted(const Events::EntityDeleted & e)
|
||||||
|
{
|
||||||
|
if (!e.Cascaded) {
|
||||||
|
Packet packet = Packet(MessageType::EntityDeleted);
|
||||||
|
packet.WritePrimitive<EntityID>(e.DeletedEntity);
|
||||||
|
broadcast(packet);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Server::OnComponentDeleted(const Events::ComponentDeleted & e)
|
||||||
|
{
|
||||||
|
if (!e.Cascaded) {
|
||||||
|
Packet packet = Packet(MessageType::ComponentDeleted);
|
||||||
|
packet.WritePrimitive<EntityID>(e.Entity);
|
||||||
|
packet.WriteString(e.ComponentType);
|
||||||
|
broadcast(packet);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::parsePlayerTransform(Packet& packet)
|
||||||
|
{
|
||||||
|
glm::vec3 position;
|
||||||
|
glm::vec3 orientation;
|
||||||
|
position.x = packet.ReadPrimitive<float>();
|
||||||
|
position.y = packet.ReadPrimitive<float>();
|
||||||
|
position.z = packet.ReadPrimitive<float>();
|
||||||
|
orientation.x = packet.ReadPrimitive<float>();
|
||||||
|
orientation.y = packet.ReadPrimitive<float>();
|
||||||
|
orientation.z = packet.ReadPrimitive<float>();
|
||||||
|
|
||||||
|
PlayerID playerID = GetPlayerIDFromEndpoint(m_ReceiverEndpoint);
|
||||||
|
EntityWrapper player(m_World, m_ConnectedPlayers.at(playerID).EntityID);
|
||||||
|
|
||||||
|
if (player.Valid()) {
|
||||||
|
player["Transform"]["Position"] = position;
|
||||||
|
player["Transform"]["Orientation"] = orientation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
#include "Rendering/AnimationSystem.h"
|
||||||
|
|
||||||
|
void AnimationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt)
|
||||||
|
{
|
||||||
|
if(!entity.HasComponent("Model")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Model* model;
|
||||||
|
try {
|
||||||
|
model = ResourceManager::Load<::Model, true>(entity["Model"]["Resource"]);
|
||||||
|
} catch (const std::exception&) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
||||||
|
const Skeleton::Animation* animation = skeleton->GetAnimation(animationComponent["Name"]);
|
||||||
|
|
||||||
|
if(animation != nullptr) {
|
||||||
|
double animationSpeed = (double)animationComponent["Speed"];
|
||||||
|
|
||||||
|
if (animationSpeed != 0.0) {
|
||||||
|
double nextTime = (double)animationComponent["Time"] + animationSpeed * dt;
|
||||||
|
|
||||||
|
|
||||||
|
if (!(bool)animationComponent["Loop"] && glm::abs(nextTime) > animation->Duration) {
|
||||||
|
(double&)animationComponent["Time"] = glm::sign(nextTime) * animation->Duration;
|
||||||
|
(double&)animationComponent["Speed"] = 0.0;
|
||||||
|
Events::AnimationComplete e;
|
||||||
|
e.Entity = entity;
|
||||||
|
e.Name = (std::string)animationComponent["Name"];
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
} else {
|
||||||
|
if (glm::abs(nextTime) > animation->Duration) {
|
||||||
|
(double&)animationComponent["Time"] = glm::abs(nextTime) - animation->Duration;
|
||||||
|
} else {
|
||||||
|
(double&)animationComponent["Time"] = nextTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user