gdle/Source/PressurePlate.cpp
2018-05-24 22:28:15 +01:00

122 lines
No EOL
2.5 KiB
C++

#include "StdAfx.h"
#include "PressurePlate.h"
#include "World.h"
#include "SpellcastingManager.h"
#include "WeenieFactory.h"
CPressurePlateWeenie::CPressurePlateWeenie()
{
}
CPressurePlateWeenie::~CPressurePlateWeenie()
{
}
void CPressurePlateWeenie::ApplyQualityOverrides()
{
}
void CPressurePlateWeenie::PostSpawn()
{
CWeenieObject::PostSpawn();
}
void CPressurePlateWeenie::Tick()
{
}
int CPressurePlateWeenie::DoCollision(const class ObjCollisionProfile &prof)
{
if (prof._bitfield & Player_OCPB)
{
Activate(prof.id);
}
return 1;
}
int CPressurePlateWeenie::Activate(DWORD activator_id)
{
CWeenieObject::Activate(activator_id);
std::shared_ptr<CWeenieObject> activator_weenie = g_pWorld->FindObject(activator_id);
if (activator_weenie && activator_weenie->_IsPlayer())
{
if (DWORD use_sound_did = InqDIDQuality(USE_SOUND_DID, 0))
{
std::shared_ptr<CWeenieObject> weenie = g_pWorld->FindObject(activator_id);
if (weenie)
{
weenie->EmitSound(use_sound_did, 1.0f);
}
}
if (DWORD activation_target_id = InqIIDQuality(ACTIVATION_TARGET_IID, 0))
{
std::shared_ptr<CWeenieObject> activation_target = g_pWorld->FindObject(activation_target_id);
if (activation_target)
activation_target->Activate(activator_id);
}
if (InqIntQuality(ACTIVATION_RESPONSE_INT, 0) & CastSpell_ActivationResponse)
{
if (DWORD spell_did = InqDIDQuality(SPELL_DID, 0))
{
MakeSpellcastingManager()->CastSpellInstant(activator_id, spell_did);
}
}
if (InqIntQuality(ACTIVATION_RESPONSE_INT, 0) & Generate_ActivationResponse)
{
// spawn generated objects
if (m_Qualities._generator_table)
{
for (auto &entry : m_Qualities._generator_table->_profile_list)
{
if (!entry.maxNum)
continue;
int numToSpawn = entry.maxNum;
if (m_Qualities._generator_registry)
{
for (auto &registered : m_Qualities._generator_registry->_registry)
{
if (entry.slot == registered.second.slot)
{
numToSpawn--;
if (!numToSpawn)
break;
}
}
}
if (m_Qualities._generator_queue)
{
for (auto &queued : m_Qualities._generator_queue->_queue)
{
if (entry.slot == queued.slot)
{
numToSpawn--;
if (!numToSpawn)
break;
}
}
}
for (int i = 0; i < numToSpawn; i++)
{
g_pWeenieFactory->GenerateFromTypeOrWcid(GetPointer<CWeenieObject>(), &entry);
}
}
}
}
}
return 1;
}