mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-05-06 19:01:04 +03:00
Override respondTo method for TriggerEntity
This makes TriggerEntity respond to any object that is a subclass of Entity. This is useful for scripts wanting script_model to touch triggers for cinematic purposes (for example, the bike crash gag at the end of e2l2)
This commit is contained in:
parent
e833b08a8e
commit
059b0ba34f
2 changed files with 32 additions and 47 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Copyright (C) 2015 the OpenMoHAA team
|
Copyright (C) 2024 the OpenMoHAA team
|
||||||
|
|
||||||
This file is part of OpenMoHAA source code.
|
This file is part of OpenMoHAA source code.
|
||||||
|
|
||||||
|
@ -322,7 +322,6 @@ Trigger::Trigger()
|
||||||
Trigger::~Trigger() {}
|
Trigger::~Trigger() {}
|
||||||
|
|
||||||
void Trigger::SetTriggerDir(float angle)
|
void Trigger::SetTriggerDir(float angle)
|
||||||
|
|
||||||
{
|
{
|
||||||
triggerDirYaw = angle;
|
triggerDirYaw = angle;
|
||||||
triggerDir = G_GetMovedir(angle);
|
triggerDir = G_GetMovedir(angle);
|
||||||
|
@ -330,13 +329,11 @@ void Trigger::SetTriggerDir(float angle)
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector Trigger::GetTriggerDir(void)
|
Vector Trigger::GetTriggerDir(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
return triggerDir;
|
return triggerDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::SetTriggerCone(Event *ev)
|
void Trigger::SetTriggerCone(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
triggerCone = cos(DEG2RAD(ev->GetFloat(1)));
|
triggerCone = cos(DEG2RAD(ev->GetFloat(1)));
|
||||||
}
|
}
|
||||||
|
@ -347,7 +344,6 @@ qboolean Trigger::UsingTriggerDir(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::SetTriggerDir(Event *ev)
|
void Trigger::SetTriggerDir(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
SetTriggerDir(ev->GetFloat(1));
|
SetTriggerDir(ev->GetFloat(1));
|
||||||
}
|
}
|
||||||
|
@ -389,7 +385,6 @@ void Trigger::StartThread(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean Trigger::respondTo(Entity *other)
|
qboolean Trigger::respondTo(Entity *other)
|
||||||
|
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
((respondto & TRIGGER_PLAYERS) && other->isClient())
|
((respondto & TRIGGER_PLAYERS) && other->isClient())
|
||||||
|
@ -399,7 +394,6 @@ qboolean Trigger::respondTo(Entity *other)
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity *Trigger::getActivator(Entity *other)
|
Entity *Trigger::getActivator(Entity *other)
|
||||||
|
|
||||||
{
|
{
|
||||||
return other;
|
return other;
|
||||||
}
|
}
|
||||||
|
@ -570,7 +564,6 @@ void Trigger::TriggerStuff(Event *ev)
|
||||||
//==============================
|
//==============================
|
||||||
//
|
//
|
||||||
void Trigger::ActivateTargets(Event *ev)
|
void Trigger::ActivateTargets(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
Entity *other;
|
Entity *other;
|
||||||
Entity *ent;
|
Entity *ent;
|
||||||
|
@ -647,13 +640,11 @@ void Trigger::ActivateTargets(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::EventSetWait(Event *ev)
|
void Trigger::EventSetWait(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
wait = ev->GetFloat(1);
|
wait = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::EventSetDelay(Event *ev)
|
void Trigger::EventSetDelay(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
delay = ev->GetFloat(1);
|
delay = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
@ -668,19 +659,16 @@ void Trigger::EventSetThread(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::EventSetCount(Event *ev)
|
void Trigger::EventSetCount(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
count = ev->GetInteger(1);
|
count = ev->GetInteger(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::EventSetMessage(Event *ev)
|
void Trigger::EventSetMessage(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
SetMessage(ev->GetString(1));
|
SetMessage(ev->GetString(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::SetMessage(const char *text)
|
void Trigger::SetMessage(const char *text)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (text) {
|
if (text) {
|
||||||
message = Director.AddString(text);
|
message = Director.AddString(text);
|
||||||
|
@ -690,19 +678,16 @@ void Trigger::SetMessage(const char *text)
|
||||||
}
|
}
|
||||||
|
|
||||||
str& Trigger::Message(void)
|
str& Trigger::Message(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
return Director.GetString(message);
|
return Director.GetString(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::EventSetNoise(Event *ev)
|
void Trigger::EventSetNoise(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
SetNoise(ev->GetString(1));
|
SetNoise(ev->GetString(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Trigger::SetNoise(const char *text)
|
void Trigger::SetNoise(const char *text)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (text) {
|
if (text) {
|
||||||
noise = Director.AddString(text);
|
noise = Director.AddString(text);
|
||||||
|
@ -714,7 +699,6 @@ void Trigger::SetNoise(const char *text)
|
||||||
}
|
}
|
||||||
|
|
||||||
str& Trigger::Noise(void)
|
str& Trigger::Noise(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
return Director.GetString(noise);
|
return Director.GetString(noise);
|
||||||
}
|
}
|
||||||
|
@ -1075,7 +1059,6 @@ TouchField::TouchField()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchField::Setup(Entity *ownerentity, Event& touchevent, Vector min, Vector max, int respondto)
|
void TouchField::Setup(Entity *ownerentity, Event& touchevent, Vector min, Vector max, int respondto)
|
||||||
|
|
||||||
{
|
{
|
||||||
assert(ownerentity);
|
assert(ownerentity);
|
||||||
if (!ownerentity) {
|
if (!ownerentity) {
|
||||||
|
@ -1098,7 +1081,6 @@ void TouchField::Setup(Entity *ownerentity, Event& touchevent, Vector min, Vecto
|
||||||
}
|
}
|
||||||
|
|
||||||
void TouchField::SendEvent(Event *ev)
|
void TouchField::SendEvent(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
Event *event;
|
Event *event;
|
||||||
|
|
||||||
|
@ -1309,7 +1291,6 @@ TriggerSecret::TriggerSecret()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerSecret::FoundSecret(Event *ev)
|
void TriggerSecret::FoundSecret(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// anything that causes the trigger to fire increments the number
|
// anything that causes the trigger to fire increments the number
|
||||||
|
@ -1395,7 +1376,6 @@ void TriggerPush::SetPushDir(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPush::SetPushSpeed(Event *ev)
|
void TriggerPush::SetPushSpeed(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
speed = ev->GetFloat(1);
|
speed = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
@ -1530,7 +1510,6 @@ CLASS_DECLARATION(Trigger, TriggerPlaySound, "play_sound_triggered") {
|
||||||
};
|
};
|
||||||
|
|
||||||
void TriggerPlaySound::ToggleSound(Event *ev)
|
void TriggerPlaySound::ToggleSound(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (!state) {
|
if (!state) {
|
||||||
// noise should already be initialized
|
// noise should already be initialized
|
||||||
|
@ -1556,7 +1535,6 @@ void TriggerPlaySound::ToggleSound(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::StartSound(void)
|
void TriggerPlaySound::StartSound(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
// turn the current one off
|
// turn the current one off
|
||||||
state = 1;
|
state = 1;
|
||||||
|
@ -1568,31 +1546,26 @@ void TriggerPlaySound::StartSound(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::SetVolume(float vol)
|
void TriggerPlaySound::SetVolume(float vol)
|
||||||
|
|
||||||
{
|
{
|
||||||
volume = vol;
|
volume = vol;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::SetVolume(Event *ev)
|
void TriggerPlaySound::SetVolume(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
volume = ev->GetFloat(1);
|
volume = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::SetMinDist(float dist)
|
void TriggerPlaySound::SetMinDist(float dist)
|
||||||
|
|
||||||
{
|
{
|
||||||
min_dist = dist;
|
min_dist = dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::SetMinDist(Event *ev)
|
void TriggerPlaySound::SetMinDist(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
min_dist = ev->GetFloat(1);
|
min_dist = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerPlaySound::SetChannel(Event *ev)
|
void TriggerPlaySound::SetChannel(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
channel = ev->GetInteger(1);
|
channel = ev->GetInteger(1);
|
||||||
}
|
}
|
||||||
|
@ -1726,7 +1699,6 @@ CLASS_DECLARATION(TriggerSpeaker, RandomSpeaker, "sound_randomspeaker") {
|
||||||
};
|
};
|
||||||
|
|
||||||
void RandomSpeaker::TriggerSound(Event *ev)
|
void RandomSpeaker::TriggerSound(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
ScheduleSound();
|
ScheduleSound();
|
||||||
if (G_Random(1) <= chance) {
|
if (G_Random(1) <= chance) {
|
||||||
|
@ -1735,44 +1707,37 @@ void RandomSpeaker::TriggerSound(Event *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::ScheduleSound(void)
|
void RandomSpeaker::ScheduleSound(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
CancelEventsOfType(EV_Trigger_Effect);
|
CancelEventsOfType(EV_Trigger_Effect);
|
||||||
PostEvent(EV_Trigger_Effect, mindelay + G_Random(maxdelay - mindelay));
|
PostEvent(EV_Trigger_Effect, mindelay + G_Random(maxdelay - mindelay));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetMinDelay(Event *ev)
|
void RandomSpeaker::SetMinDelay(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
mindelay = ev->GetFloat(1);
|
mindelay = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetMaxDelay(Event *ev)
|
void RandomSpeaker::SetMaxDelay(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
maxdelay = ev->GetFloat(1);
|
maxdelay = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetChance(Event *ev)
|
void RandomSpeaker::SetChance(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
chance = ev->GetFloat(1);
|
chance = ev->GetFloat(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetMinDelay(float newMinDelay)
|
void RandomSpeaker::SetMinDelay(float newMinDelay)
|
||||||
|
|
||||||
{
|
{
|
||||||
mindelay = newMinDelay;
|
mindelay = newMinDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetMaxDelay(float newMaxDelay)
|
void RandomSpeaker::SetMaxDelay(float newMaxDelay)
|
||||||
|
|
||||||
{
|
{
|
||||||
maxdelay = newMaxDelay;
|
maxdelay = newMaxDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RandomSpeaker::SetChance(float newChance)
|
void RandomSpeaker::SetChance(float newChance)
|
||||||
|
|
||||||
{
|
{
|
||||||
chance = newChance;
|
chance = newChance;
|
||||||
}
|
}
|
||||||
|
@ -1850,7 +1815,6 @@ TriggerChangeLevel::TriggerChangeLevel()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerChangeLevel::SetMap(Event *ev)
|
void TriggerChangeLevel::SetMap(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
map = ev->GetConstString(1);
|
map = ev->GetConstString(1);
|
||||||
}
|
}
|
||||||
|
@ -2137,13 +2101,11 @@ TriggerDamageTargets::TriggerDamageTargets()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerDamageTargets::SetDamage(Event *ev)
|
void TriggerDamageTargets::SetDamage(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
damage = ev->GetInteger(1);
|
damage = ev->GetInteger(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerDamageTargets::PassDamage(Event *ev)
|
void TriggerDamageTargets::PassDamage(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
Entity *attacker;
|
Entity *attacker;
|
||||||
int dmg;
|
int dmg;
|
||||||
|
@ -2179,7 +2141,6 @@ void TriggerDamageTargets::PassDamage(Event *ev)
|
||||||
//
|
//
|
||||||
|
|
||||||
void TriggerDamageTargets::DamageTargets(Event *ev)
|
void TriggerDamageTargets::DamageTargets(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
Entity *other;
|
Entity *other;
|
||||||
Entity *ent;
|
Entity *ent;
|
||||||
|
@ -2333,13 +2294,11 @@ TriggerExit::TriggerExit()
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerExit::TurnExitSignOff(Event *ev)
|
void TriggerExit::TurnExitSignOff(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
level.near_exit = false;
|
level.near_exit = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriggerExit::DisplayExitSign(Event *ev)
|
void TriggerExit::DisplayExitSign(Event *ev)
|
||||||
|
|
||||||
{
|
{
|
||||||
level.near_exit = qtrue;
|
level.near_exit = qtrue;
|
||||||
|
|
||||||
|
@ -2856,7 +2815,6 @@ void TriggerByPushObject::setTriggerName(Event *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean TriggerByPushObject::respondTo(Entity *other)
|
qboolean TriggerByPushObject::respondTo(Entity *other)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (other->isSubclassOf(PushObject)) {
|
if (other->isSubclassOf(PushObject)) {
|
||||||
if (triggername != STRING_EMPTY) {
|
if (triggername != STRING_EMPTY) {
|
||||||
|
@ -2870,7 +2828,6 @@ qboolean TriggerByPushObject::respondTo(Entity *other)
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity *TriggerByPushObject::getActivator(Entity *other)
|
Entity *TriggerByPushObject::getActivator(Entity *other)
|
||||||
|
|
||||||
{
|
{
|
||||||
Entity *owner;
|
Entity *owner;
|
||||||
|
|
||||||
|
@ -3037,6 +2994,12 @@ void TriggerClickItem::SetClickItemModelEvent(Event *ev)
|
||||||
link();
|
link();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===============
|
||||||
|
//
|
||||||
|
// Added in 2.0
|
||||||
|
//
|
||||||
|
//===============
|
||||||
|
|
||||||
CLASS_DECLARATION(TriggerUse, TriggerNoDamage, "trigger_nodamage") {
|
CLASS_DECLARATION(TriggerUse, TriggerNoDamage, "trigger_nodamage") {
|
||||||
{&EV_Touch, &TriggerNoDamage::TakeNoDamage},
|
{&EV_Touch, &TriggerNoDamage::TakeNoDamage},
|
||||||
{&EV_Trigger_Effect, &TriggerNoDamage::TakeNoDamage},
|
{&EV_Trigger_Effect, &TriggerNoDamage::TakeNoDamage},
|
||||||
|
@ -3057,10 +3020,21 @@ void TriggerNoDamage::TakeNoDamage(Event *ev)
|
||||||
ent->PostEvent(newev, level.frametime * 3);
|
ent->PostEvent(newev, level.frametime * 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===============
|
||||||
|
//
|
||||||
|
// Added in 2.30
|
||||||
|
//
|
||||||
|
//===============
|
||||||
|
|
||||||
CLASS_DECLARATION(Trigger, TriggerEntity, "trigger_entity") {
|
CLASS_DECLARATION(Trigger, TriggerEntity, "trigger_entity") {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
qboolean TriggerEntity::respondTo(Entity* other)
|
||||||
|
{
|
||||||
|
return other != NULL && other->IsSubclassOfEntity() != false;
|
||||||
|
}
|
||||||
|
|
||||||
Event EV_Trigger_IsAbandoned
|
Event EV_Trigger_IsAbandoned
|
||||||
(
|
(
|
||||||
"isabandoned",
|
"isabandoned",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
===========================================================================
|
===========================================================================
|
||||||
Copyright (C) 2023 the OpenMoHAA team
|
Copyright (C) 2024 the OpenMoHAA team
|
||||||
|
|
||||||
This file is part of OpenMoHAA source code.
|
This file is part of OpenMoHAA source code.
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ public:
|
||||||
TouchField();
|
TouchField();
|
||||||
virtual void Setup(Entity *ownerentity, Event& ontouch, Vector min, Vector max, int respondto);
|
virtual void Setup(Entity *ownerentity, Event& ontouch, Vector min, Vector max, int respondto);
|
||||||
void SendEvent(Event *ev);
|
void SendEvent(Event *ev);
|
||||||
void Archive(Archiver &arc) override;
|
void Archive(Archiver& arc) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void TouchField::Archive(Archiver& arc)
|
inline void TouchField::Archive(Archiver& arc)
|
||||||
|
@ -380,7 +380,7 @@ public:
|
||||||
void ChangeLevel(Event *ev);
|
void ChangeLevel(Event *ev);
|
||||||
const char *Map(void);
|
const char *Map(void);
|
||||||
const char *SpawnSpot(void);
|
const char *SpawnSpot(void);
|
||||||
void Archive(Archiver &arc) override;
|
void Archive(Archiver& arc) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TriggerExit : public Trigger
|
class TriggerExit : public Trigger
|
||||||
|
@ -604,6 +604,10 @@ inline void TriggerClickItem::Archive(Archiver& arc)
|
||||||
Trigger::Archive(arc);
|
Trigger::Archive(arc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Added in 2.0
|
||||||
|
//
|
||||||
|
|
||||||
class TriggerNoDamage : public TriggerUse
|
class TriggerNoDamage : public TriggerUse
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -613,10 +617,17 @@ public:
|
||||||
void TakeNoDamage(Event *ev);
|
void TakeNoDamage(Event *ev);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Added in 2.30
|
||||||
|
//
|
||||||
|
|
||||||
class TriggerEntity : public Trigger
|
class TriggerEntity : public Trigger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CLASS_PROTOTYPE(TriggerEntity);
|
CLASS_PROTOTYPE(TriggerEntity);
|
||||||
|
|
||||||
|
public:
|
||||||
|
qboolean respondTo(Entity *other) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TriggerLandmine : public TriggerEntity
|
class TriggerLandmine : public TriggerEntity
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue