Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2507516a85 | |||
| 0398006fdc | |||
| ae13a2db6b | |||
| 984b8ad3e9 | |||
| b1148c0c6c | |||
| a5c1e34b8d | |||
| 06b7052bf2 |
@@ -30,6 +30,8 @@ private:
|
|||||||
bool m_LeftFoot = false;
|
bool m_LeftFoot = false;
|
||||||
// To get a difference when calculating the walking state.
|
// To get a difference when calculating the walking state.
|
||||||
glm::vec3 m_LastPosition = glm::vec3();
|
glm::vec3 m_LastPosition = glm::vec3();
|
||||||
|
// Used to track afterimages for sprint effect.
|
||||||
|
float m_SprintEffectTimer;
|
||||||
// The logic for making the sound play when player is moving
|
// The logic for making the sound play when player is moving
|
||||||
void playerStep(double dt);
|
void playerStep(double dt);
|
||||||
// Spawn a hexagon at origin of an Entity
|
// Spawn a hexagon at origin of an Entity
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
|
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
|
||||||
<StrengthOfEffect>2.0</StrengthOfEffect>
|
<StrengthOfEffect>1.3</StrengthOfEffect>
|
||||||
|
<Active>false</Active>
|
||||||
</SprintAbility>
|
</SprintAbility>
|
||||||
@@ -12,6 +12,9 @@
|
|||||||
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>This is the strength of the sprint effect</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>This is the strength of the sprint effect</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element name="Active" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>True if currently sprinting.</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="SprintEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName1></AnimationName1>
|
||||||
|
<AnimationName2></AnimationName2>
|
||||||
|
<AnimationName3></AnimationName3>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.15</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="0" Z="0"/>
|
||||||
|
<ExplosionDuration>0.15</ExplosionDuration>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource></Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
PlayerMovementSystem::PlayerMovementSystem(SystemParams params)
|
PlayerMovementSystem::PlayerMovementSystem(SystemParams params)
|
||||||
: System(params)
|
: System(params)
|
||||||
|
, m_SprintEffectTimer(0.f)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &PlayerMovementSystem::OnPlayerSpawned);
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &PlayerMovementSystem::OnPlayerSpawned);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &PlayerMovementSystem::OnDoubleJump);
|
EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &PlayerMovementSystem::OnDoubleJump);
|
||||||
@@ -19,8 +20,48 @@ void PlayerMovementSystem::Update(double dt)
|
|||||||
{
|
{
|
||||||
updateMovementControllers(dt);
|
updateMovementControllers(dt);
|
||||||
// Only do physics calculations on client and only for themselves.
|
// Only do physics calculations on client and only for themselves.
|
||||||
if (IsClient && LocalPlayer.Valid()) {
|
if (IsClient) {
|
||||||
updateVelocity(LocalPlayer, dt);
|
if (LocalPlayer.Valid()){
|
||||||
|
updateVelocity(LocalPlayer, dt);
|
||||||
|
}
|
||||||
|
m_SprintEffectTimer += dt;
|
||||||
|
if (m_SprintEffectTimer < 0.016f) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_SprintEffectTimer = 0.f;
|
||||||
|
const ComponentPool* pool = m_World->GetComponents("SprintAbility");
|
||||||
|
if (pool == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (auto cSprint : *pool) {
|
||||||
|
if (cSprint.EntityID != LocalPlayer.ID && (bool)cSprint["Active"]) {
|
||||||
|
// Spawn one afterimage for each player that sprints.
|
||||||
|
EntityWrapper player(m_World, cSprint.EntityID);
|
||||||
|
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/SprintEffect.xml");
|
||||||
|
EntityWrapper sprintEffect = entityFile->MergeInto(m_World);
|
||||||
|
auto playerModel = player.FirstChildByName("PlayerModel");
|
||||||
|
if (!playerModel.Valid()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!playerModel.HasComponent("Model")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!playerModel.HasComponent("Animation")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto playerEntityModel = playerModel["Model"];
|
||||||
|
auto playerEntityAnimation = playerModel["Animation"];
|
||||||
|
playerEntityModel.Copy(sprintEffect["Model"]);
|
||||||
|
playerEntityAnimation.Copy(sprintEffect["Animation"]);
|
||||||
|
sprintEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"];
|
||||||
|
((glm::vec4&)sprintEffect["ExplosionEffect"]["EndColor"]).w = 0.f;
|
||||||
|
sprintEffect["Animation"]["Speed1"] = 0.0;
|
||||||
|
sprintEffect["Animation"]["Speed2"] = 0.0;
|
||||||
|
sprintEffect["Animation"]["Speed3"] = 0.0;
|
||||||
|
sprintEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
|
||||||
|
sprintEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,6 +105,7 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
|
|||||||
}
|
}
|
||||||
bool sniperSprinting = false;
|
bool sniperSprinting = false;
|
||||||
if (player.HasComponent("SprintAbility")) {
|
if (player.HasComponent("SprintAbility")) {
|
||||||
|
(bool)player["SprintAbility"]["Active"] = controller->SpecialAbilityKeyDown();
|
||||||
if (controller->SpecialAbilityKeyDown()) {
|
if (controller->SpecialAbilityKeyDown()) {
|
||||||
playerMovementSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
|
playerMovementSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
|
||||||
playerCrouchSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
|
playerCrouchSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
|
||||||
|
|||||||
Reference in New Issue
Block a user