gdle/Source/HotSpot.cpp
Morosity 0101b3ea59 Fix up client commands for starting/stopping events. Now offers more robust feedback if event string is not found.
Does not errantly declare event already active if not found or not active if event not found.
2020-03-18 21:44:35 +00:00

94 lines
2 KiB
C++

#include <StdAfx.h>
#include "HotSpot.h"
#include "World.h"
CHotSpotWeenie::CHotSpotWeenie()
{
}
CHotSpotWeenie::~CHotSpotWeenie()
{
}
void CHotSpotWeenie::ApplyQualityOverrides()
{
}
void CHotSpotWeenie::PostSpawn()
{
CWeenieObject::PostSpawn();
SetNextCycleTime();
}
void CHotSpotWeenie::SetNextCycleTime()
{
double cycleTime = m_Qualities.GetFloat(HOTSPOT_CYCLE_TIME_FLOAT, 5.0);
double cycleTimeVariance = m_Qualities.GetFloat(HOTSPOT_CYCLE_TIME_VARIANCE_FLOAT, 0.0);
if (cycleTime == 0.0)
return;
cycleTimeVariance = std::max(1.0 - std::min(cycleTimeVariance, 1.0), 0.0);
cycleTimeVariance = Random::RollDice(cycleTimeVariance, 1.0f);
m_fNextCycleTime = Timer::cur_time + (cycleTime * cycleTimeVariance);
}
void CHotSpotWeenie::Tick()
{
if (m_fNextCycleTime <= Timer::cur_time)
{
DoCycle();
SetNextCycleTime();
}
CWeenieObject::Tick();
}
int CHotSpotWeenie::DoCollision(const class ObjCollisionProfile &prof)
{
if (prof._bitfield & Player_OCPB)
{
m_ContactedWeenies.insert(prof.id);
}
return 1;
}
void CHotSpotWeenie::DoCollisionEnd(uint32_t object_id)
{
m_ContactedWeenies.erase(object_id);
}
void CHotSpotWeenie::DoCycle()
{
for (std::set<uint32_t>::iterator i = m_ContactedWeenies.begin(); i != m_ContactedWeenies.end();)
{
CWeenieObject *other = g_pWorld->FindObject(*i);
//if (other && check_collision(other))
//{
DoCycleDamage(other);
i++;
//}
//else
//{
// i = m_ContactedWeenies.erase(i);
//}
}
}
void CHotSpotWeenie::DoCycleDamage(CWeenieObject *other)
{
DamageEventData damageEvent;
damageEvent.damage_type = (DAMAGE_TYPE) m_Qualities.GetInt(DAMAGE_TYPE_INT, 0);
damageEvent.damage_form = DAMAGE_FORM::DF_HOTSPOT;
damageEvent.damageAfterMitigation = damageEvent.damageBeforeMitigation = (int)(m_Qualities.GetInt(DAMAGE_INT, 0) * (1.0 - (Random::GenFloat(0.0f, (float)m_Qualities.GetFloat(DAMAGE_VARIANCE_FLOAT, 0.0)))));
damageEvent.target = other;
damageEvent.source = this;
TryToDealDamage(damageEvent);
}