djcev.com

//

Git Repos / fte_dogmode / qc / triggers / look.qc

Last update to this file was on 2024-03-24 at 02:40.

Show look.qc

////////////////////////////////////////////////////////////////////////////////
// trigger_look (a.k.a. trigger_onlookat from NullPointPaladin!)
////////////////////////////////////////////////////////////////////////////////

//======================================================================
// forward declarations
//======================================================================

void() trigger_look_use;
void() trigger_look_touch;
void(entity e) trigger_look_init;
void() trigger_look;

//------------------------------------------------------------------------------

/*QUAKED trigger_look (.5 .5 .5) ? X X X X X X X X NOT_ON_EASY NOT_ON_NORMAL NOT_ON_HARD_OR_NIGHTMARE NOT_IN_DEATHMATCH NOT_IN_COOP NOT_IN_SINGLEPLAYER X NOT_ON_HARD_ONLY NOT_ON_NIGHTMARE_ONLY
This will trigger when a player is within the brush trigger and looks directly at a target entity.
Use the first target key for the "looked at entity" and use the subsequent targets (2-4) to trigger other events.

speed = Distance from player to search for trigger, adjust if the target is too far from the trigger (default 500 units)
wait = Time between re-triggering (default 0)
sounds = 0-3 are standard Quake trigger choices, 4 allows a custom sound, requires a path set in noise1 key
noise1 = Path to custom sound. Use with sounds key set to 4 (e.g. fish/bite.wav)

See manual for complete details. See pd_cutscenes sample map for example
*/
//----------------------------------------------------------------------
// class trigger_look: base_multiple
// {
//--------------------------------------------------------------
void() trigger_look_use =
{
base_multiple_fire ();
};

//--------------------------------------------------------------
void() trigger_look_touch =
{
// from Copper -- dumptruck_ds
if (sub_checkvalidtouch(other) == FALSE)
return;

if (self.nextthink > time)
// already been triggered
return;

// added player view offset to make self more accurate
// to the player crosshairs
local vector player_offset = other.origin + other.view_ofs;

makevectors (other.v_angle);

// using speed to determine the reach of the trace
if (!self.speed)
self.speed = 500;

traceline (player_offset,
(player_offset + (v_forward * self.speed)),
FALSE, other);

if (trace_ent.targetname == self.target)
{
// Play message if available
if (self.message != "")
centerprint (other, self.message);

self.use = trigger_look_use;
sub_usetargets ();

if (self.noise != "")
sound (self, CHAN_VOICE, self.noise, 1,
ATTN_NORM);
else
sound (self, CHAN_VOICE, self.noise1, 1,
ATTN_NORM);

// added wait
if (self.wait > 0)
{
self.think = base_multiple_think_wait;
self.nextthink = time + self.wait;
}
else
{
// we can't just remove (self) here, because
// self is a touch function called while C
// code is looping through area links...
self.think = sub_remove;
self.touch = sub_null;
self.use = sub_null;
self.nextthink = time + 0.1;
}
}
};

//--------------------------------------------------------------
void(entity e) trigger_look_init =
{
e.classname = "trigger_look";
e.classtype = CT_TRIGGER_LOOK;

// play all the sounds available for a normal trigger
if (e.sounds == 0)
{
precache_sound ("misc/null.wav");
e.noise = "misc/null.wav";
}
else if (e.sounds == 1)
{
precache_sound ("misc/secret.wav");
e.noise = "misc/secret.wav";
}
else if (e.sounds == 2)
{
precache_sound ("misc/talk.wav");
e.noise = "misc/talk.wav";
}
else if (e.sounds == 3)
{
precache_sound ("misc/trigger1.wav");
e.noise = "misc/trigger1.wav";
}
else if (e.sounds == 4)
{
if (!e.noise1)
{
// dumptruck_ds
objerror ("trigger_look_init: no soundfile "
"set in noise1!\n");
remove (e);
return;
}
else
{
precache_sound (e.noise1);
}
e.noise = e.noise1;
}

base_trigger_init (e);
e.touch = trigger_look_touch;
sub_checkwaiting (e);
};

//--------------------------------------------------------------
void() trigger_look =
{
// new spawnflags for all entities -- iw
if (SUB_Inhibit())
return;

trigger_look_init (self);
};
// };

Return to the top of this page or return to the overview of this repo.

Log look.qc

Date Commit Message Author + -
2024-03-24 2nd pass refactor, rework QC class structure cev +70 -52
2024-02-18 Client/player, projectiles, entrypoints refactor cev +1 -1
2024-01-09 Continue OO / Class-based refactor cev +28 -19
2023-12-09 Start OO / class-based refactor, work on items cev +106 -103
2023-11-20 changes to movement, build environment, file reorg cev +124  

Return to the top of this page or return to the overview of this repo.