From 79eb4c3aed59edce58d2529bf9c6334f7fe6fbad Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Tue, 1 Aug 2017 18:51:43 +0100 Subject: Implement invisibility effect --- src/Entities/EntityEffect.cpp | 73 ++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 28 deletions(-) (limited to 'src/Entities/EntityEffect.cpp') diff --git a/src/Entities/EntityEffect.cpp b/src/Entities/EntityEffect.cpp index 620be395b..cc9aaca5a 100644 --- a/src/Entities/EntityEffect.cpp +++ b/src/Entities/EntityEffect.cpp @@ -1,8 +1,9 @@ #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "EntityEffect.h" -#include "../Mobs/Monster.h" #include "Player.h" +#include "../Chunk.h" +#include "../Mobs/Monster.h" @@ -185,40 +186,40 @@ cEntityEffect & cEntityEffect::operator =(cEntityEffect a_OtherEffect) -cEntityEffect * cEntityEffect::CreateEntityEffect(cEntityEffect::eType a_EffectType, int a_Duration, short a_Intensity, double a_DistanceModifier) +std::unique_ptr cEntityEffect::CreateEntityEffect(cEntityEffect::eType a_EffectType, int a_Duration, short a_Intensity, double a_DistanceModifier) { switch (a_EffectType) { - case cEntityEffect::effNoEffect: return new cEntityEffect (a_Duration, a_Intensity, a_DistanceModifier); - - case cEntityEffect::effAbsorption: return new cEntityEffectAbsorption (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effBlindness: return new cEntityEffectBlindness (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effFireResistance: return new cEntityEffectFireResistance(a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effHaste: return new cEntityEffectHaste (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effHealthBoost: return new cEntityEffectHealthBoost (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effHunger: return new cEntityEffectHunger (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effInstantDamage: return new cEntityEffectInstantDamage (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effInstantHealth: return new cEntityEffectInstantHealth (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effInvisibility: return new cEntityEffectInvisibility (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effJumpBoost: return new cEntityEffectJumpBoost (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effMiningFatigue: return new cEntityEffectMiningFatigue (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effNausea: return new cEntityEffectNausea (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effNightVision: return new cEntityEffectNightVision (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effPoison: return new cEntityEffectPoison (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effRegeneration: return new cEntityEffectRegeneration (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effResistance: return new cEntityEffectResistance (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effSaturation: return new cEntityEffectSaturation (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effSlowness: return new cEntityEffectSlowness (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effSpeed: return new cEntityEffectSpeed (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effStrength: return new cEntityEffectStrength (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effWaterBreathing: return new cEntityEffectWaterBreathing(a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effWeakness: return new cEntityEffectWeakness (a_Duration, a_Intensity, a_DistanceModifier); - case cEntityEffect::effWither: return new cEntityEffectWither (a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effNoEffect: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + + case cEntityEffect::effAbsorption: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effBlindness: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effFireResistance: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effHaste: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effHealthBoost: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effHunger: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effInstantDamage: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effInstantHealth: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effInvisibility: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effJumpBoost: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effMiningFatigue: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effNausea: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effNightVision: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effPoison: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effRegeneration: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effResistance: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effSaturation: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effSlowness: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effSpeed: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effStrength: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effWaterBreathing: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effWeakness: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); + case cEntityEffect::effWither: return cpp14::make_unique(a_Duration, a_Intensity, a_DistanceModifier); } ASSERT(!"Unhandled entity effect type!"); #ifndef __clang__ - return nullptr; + return {}; #endif } @@ -407,6 +408,22 @@ void cEntityEffectHunger::OnTick(cPawn & a_Target) +//////////////////////////////////////////////////////////////////////////////// +// cEntityEffectInvisibility: + +void cEntityEffectInvisibility::BroadcastMetadata(cPawn & a_Target) +{ + auto ParentChunk = a_Target.GetParentChunk(); + if (ParentChunk != nullptr) + { + ParentChunk->BroadcastEntityMetadata(a_Target); + } +} + + + + + //////////////////////////////////////////////////////////////////////////////// // cEntityEffectWeakness: -- cgit v1.2.3