Merge branch 'master' into Importer

This commit is contained in:
William Moberg
2016-03-14 01:09:18 +01:00
15 changed files with 3975 additions and 3836 deletions
+2 -2
View File
@@ -24,14 +24,14 @@ void FadeSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFade,
currentTime += dTime;
if(currentTime > fadeTime) {
currentTime = 0.0;
currentTime = 0.0 + fadeTime * (bool)cFade["Loop"];
if ((bool)cFade["Reverse"]) {
(Field<bool>)cFade["Out"] = !(bool)cFade["Out"];
currentTime = fadeTime;
}
}
if(currentTime < 0.0) {
currentTime = fadeTime;
currentTime = fadeTime * (bool)cFade["Loop"];
if ((bool)cFade["Reverse"]) {
(Field<bool>)cFade["Out"] = !(bool)cFade["Out"];
currentTime = 0.0;
+68 -25
View File
@@ -3,6 +3,7 @@
PlayerMovementSystem::PlayerMovementSystem(SystemParams params)
: System(params)
, m_SprintEffectTimer(0.f)
, m_DashEffectTimer(0.f)
{
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &PlayerMovementSystem::OnPlayerSpawned);
EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &PlayerMovementSystem::OnDoubleJump);
@@ -24,23 +25,57 @@ void PlayerMovementSystem::Update(double dt)
if (LocalPlayer.Valid()){
updateVelocity(LocalPlayer, dt);
}
m_SprintEffectTimer += dt;
if (m_SprintEffectTimer < 0.016f) {
//m_SprintEffectTimer += dt;
//if (m_SprintEffectTimer < 0.016f) {
// return;
//}
//m_SprintEffectTimer = 0.f;
//auto 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"];
// ((Field<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"];
// }
//}
m_DashEffectTimer += dt;
if (m_DashEffectTimer < 0.075f) {
return;
}
m_SprintEffectTimer = 0.f;
auto pool = m_World->GetComponents("SprintAbility");
m_DashEffectTimer = 0.f;
auto pool = m_World->GetComponents("DashAbility");
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);
for (auto cDash : *pool) {
if (cDash.EntityID != LocalPlayer.ID && (double)cDash["CoolDownMaxTimer"] - (double)cDash["CoolDownTimer"] < 0.5) {
// Spawn one afterimage for each player that Dashes.
EntityWrapper player(m_World, cDash.EntityID);
auto playerModel = player.FirstChildByName("PlayerModel");
if (!playerModel.Valid()) {
continue;
@@ -48,20 +83,28 @@ void PlayerMovementSystem::Update(double dt)
if (!playerModel.HasComponent("Model")) {
continue;
}
if (!playerModel.HasComponent("Animation")) {
continue;
EntityWrapper dashEffect = playerModel.Clone();
for (auto& cAnim : dashEffect.ChildrenWithComponent("Animation")) {
cAnim["Animation"]["Play"] = false;
}
auto playerEntityModel = playerModel["Model"];
auto playerEntityAnimation = playerModel["Animation"];
playerEntityModel.Copy(sprintEffect["Model"]);
playerEntityAnimation.Copy(sprintEffect["Animation"]);
sprintEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"];
((Field<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"];
const double fadeTime = 0.5f;
for (auto& cModel : dashEffect.ChildrenWithComponent("Model")) {
EntityWrapper e(m_World, cModel.ID);
e.AttachComponent("Lifetime");
e.AttachComponent("Fade");
e["Fade"]["Loop"] = false;
e["Fade"]["FadeTime"] = fadeTime;
e["Fade"]["Time"] = fadeTime;
e["Lifetime"]["Lifetime"] = fadeTime;
}
dashEffect.AttachComponent("Lifetime");
dashEffect.AttachComponent("Fade");
dashEffect["Fade"]["Loop"] = false;
dashEffect["Fade"]["FadeTime"] = fadeTime;
dashEffect["Fade"]["Time"] = fadeTime;
dashEffect["Lifetime"]["Lifetime"] = fadeTime;
dashEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
dashEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
}
}
}
@@ -324,23 +324,23 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
spawnTracers(cWeapon, wi, pattern);
// View punch
//if (IsClient) {
// EntityWrapper camera = wi.Player.FirstChildByName("Camera");
// if (camera.Valid()) {
// glm::vec3& cameraOrientation = camera["Transform"]["Orientation"];
// float viewPunch = cWeapon["ViewPunch"];
// float maxTravelAngle = cWeapon["MaxTravelAngle"];
// float& currentTravel = cWeapon["CurrentTravel"];
// if (currentTravel < maxTravelAngle) {
// float change = viewPunch;
// if (currentTravel + change > maxTravelAngle) {
// change = maxTravelAngle - currentTravel;
// }
// cameraOrientation.x += change;
// currentTravel += change;
// }
// }
//}
if (IsClient) {
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (camera.Valid()) {
Field<glm::vec3> cameraOrientation = camera["Transform"]["Orientation"];
float viewPunch = cWeapon["ViewPunch"];
float maxTravelAngle = (const float&)cWeapon["MaxTravelAngle"];
Field<float> currentTravel = cWeapon["CurrentTravel"];
if (currentTravel < maxTravelAngle) {
float change = viewPunch;
if (currentTravel + change > maxTravelAngle) {
change = maxTravelAngle - currentTravel;
}
cameraOrientation.x(cameraOrientation.x() + change);
currentTravel += change;
}
}
}
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire");
@@ -69,6 +69,21 @@ void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
}
}
// Restore view angle
if (IsClient) {
Field<float> currentTravel = cWeapon["CurrentTravel"];
Field<float> returnSpeed = cWeapon["ViewReturnSpeed"];
if (currentTravel > 0) {
float change = returnSpeed * dt;
currentTravel = glm::max(0.f, currentTravel - change);
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (camera.Valid()) {
Field<glm::vec3> cameraOrientation = camera["Transform"]["Orientation"];
cameraOrientation.x(cameraOrientation.x() - change);
}
}
}
if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) {
fireBullet(cWeapon, wi);
}
@@ -183,6 +198,25 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
magAmmo -= 1;
}
// View punch
if (IsClient) {
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (camera.Valid()) {
Field<glm::vec3> cameraOrientation = camera["Transform"]["Orientation"];
float viewPunch = cWeapon["ViewPunch"];
float maxTravelAngle = cWeapon["MaxTravelAngle"];
Field<float> currentTravel = cWeapon["CurrentTravel"];
if (currentTravel < maxTravelAngle) {
float change = viewPunch;
if (currentTravel + change > maxTravelAngle) {
change = maxTravelAngle - currentTravel;
}
cameraOrientation.x(cameraOrientation.x() + change);
currentTravel += change;
}
}
}
// Get weapon model based on current person
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
if (!weaponModelEntity.Valid()) {