first commit
This commit is contained in:
194
mod_mine/quakec_src/func_bob.qc
Normal file
194
mod_mine/quakec_src/func_bob.qc
Normal file
@@ -0,0 +1,194 @@
|
||||
.float attack_timer;
|
||||
.float bsporigin; // All bmodel origins are 0,0,0 check this first
|
||||
.float distance;
|
||||
.float waitmin2;
|
||||
|
||||
float BOB_COLLISION = 2; // Collision for misc_bob
|
||||
float BOB_NONSOLID = 4; // Non solid for func_bob
|
||||
|
||||
/*QUAKED func_bob (0 .5 .8) ?
|
||||
A SOLID bmodel that gently moves back and forth
|
||||
-------- KEYS --------
|
||||
targetname : trigger entity (works with entity state system)
|
||||
angle : direction movement, use "360" for angle 0
|
||||
height : direction intensity (def=8)
|
||||
count : direction cycle timer (def=2s, minimum=1s)
|
||||
waitmin : Speed up scale (def=1) 1+=non linear
|
||||
waitmin2 : Slow down scale (def=0.75)
|
||||
delay : Starting time delay (def=0, -1=random)
|
||||
style : If set to 1, starts off and waits for trigger
|
||||
_dirt : -1 = will be excluded from dirtmapping
|
||||
_minlight : Minimum light level for any surface of the brush model
|
||||
_mincolor : Minimum light color for any surface (def='1 1 1' RGB)
|
||||
_shadow : Will cast shadows on other models and itself
|
||||
_shadowself : Will cast shadows on itself
|
||||
-------- SPAWNFLAGS --------
|
||||
STARTOFF : Starts off and waits for trigger - DISABLED, Ripped out ESTATE System (RennyC)
|
||||
-------- NOTES --------
|
||||
A SOLID bmodel that gently moves back and forth
|
||||
*/
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void() func_bob_timer =
|
||||
{
|
||||
// Keep ticking in background, use local timer (faster)
|
||||
self.think = func_bob_timer;
|
||||
|
||||
if (self.bsporigin)
|
||||
self.nextthink = self.ltime + 0.1;
|
||||
else
|
||||
self.nextthink = time + 0.1;
|
||||
|
||||
// Has the cycle completed?
|
||||
if (self.attack_timer < time)
|
||||
{
|
||||
// Setup bob cycle and half way point for slowdown
|
||||
self.attack_timer = time + self.count;
|
||||
self.distance = time + (self.count * 0.5);
|
||||
// Flip direction of bmodel bob
|
||||
self.lefty = 1 - self.lefty;
|
||||
if (self.lefty < 1)
|
||||
self.t_length = self.height;
|
||||
else
|
||||
self.t_length = -self.height;
|
||||
|
||||
// Always reset velocity and flags
|
||||
self.velocity = '0 0 0';
|
||||
self.flags = 0;
|
||||
}
|
||||
|
||||
// Is the direction set?
|
||||
// This is a block condition to prevent the bmodel moving
|
||||
if (self.lefty != -1)
|
||||
{
|
||||
// Slow down velocity (gradually)
|
||||
if (self.distance < time)
|
||||
self.velocity = self.velocity * self.waitmin2;
|
||||
else
|
||||
{
|
||||
// Speed up velocity (linear/exponentially)
|
||||
self.t_length = self.t_length * self.waitmin;
|
||||
self.velocity = self.velocity + (self.movedir * self.t_length);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void() func_bob_on =
|
||||
{
|
||||
// This may have been called as a "use" function, so don't allow it
|
||||
// to be called repeatedly -- iw
|
||||
self.use = SUB_Null;
|
||||
|
||||
if (self.bsporigin)
|
||||
{
|
||||
self.movetype = MOVETYPE_PUSH;
|
||||
self.solid = SOLID_BSP;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.movetype = MOVETYPE_FLY;
|
||||
self.solid = SOLID_BBOX;
|
||||
self.flags = 0; // Reset any onground flags
|
||||
}
|
||||
|
||||
if (self.spawnflags & BOB_NONSOLID)
|
||||
self.solid = SOLID_NOT;
|
||||
|
||||
setmodel (self, self.mdl);
|
||||
setsize (self, self.mins , self.maxs);
|
||||
|
||||
self.think = func_bob_timer;
|
||||
if (self.bsporigin)
|
||||
self.nextthink = self.ltime + 0.1 + self.delay;
|
||||
else
|
||||
self.nextthink = time + 0.1 + self.delay;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void() func_bob_off =
|
||||
{
|
||||
if (self.bsporigin)
|
||||
{
|
||||
self.movetype = MOVETYPE_PUSH;
|
||||
self.solid = SOLID_BSP;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.movetype = MOVETYPE_FLY;
|
||||
self.solid = SOLID_BBOX;
|
||||
}
|
||||
|
||||
if (self.spawnflags & BOB_NONSOLID)
|
||||
self.solid = SOLID_NOT;
|
||||
|
||||
setmodel (self, self.mdl);
|
||||
setsize (self, self.mins , self.maxs);
|
||||
self.velocity = '0 0 0';
|
||||
|
||||
if (self.style & 1)
|
||||
self.use = func_bob_on;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void() func_bob =
|
||||
{
|
||||
if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
|
||||
return;
|
||||
|
||||
self.spawnflags = self.spawnflags | BOB_COLLISION;
|
||||
if (self.spawnflags & BOB_NONSOLID)
|
||||
self.spawnflags = self.spawnflags - (self.spawnflags & BOB_COLLISION);
|
||||
|
||||
// Using a custom model?
|
||||
if (self.mdl == "")
|
||||
{
|
||||
self.bsporigin = TRUE;
|
||||
self.mdl = self.model;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.bsporigin = FALSE;
|
||||
self.modelindex = 0;
|
||||
self.model = "";
|
||||
}
|
||||
|
||||
SetMovedir ();
|
||||
self.movedir = normalize(self.movedir);
|
||||
|
||||
if (self.height <= 0)
|
||||
self.height = 8; // Direction intensity
|
||||
if (self.count < 1)
|
||||
self.count = 2; // Direction switch timer
|
||||
if (self.waitmin <= 0)
|
||||
self.waitmin = 1; // Speed up
|
||||
if (self.waitmin2 <= 0)
|
||||
self.waitmin2 = 0.75; // Slow down
|
||||
if (self.delay < 0)
|
||||
self.delay = random() + random() + random();
|
||||
|
||||
// Setup Entity State functionality - Nope! (RennyC)
|
||||
// if (self.targetname != "")
|
||||
// self.use = func_bob_on;
|
||||
|
||||
if (!self.style) //added style key 1 for start off -- dumptruck_ds
|
||||
func_bob_on();
|
||||
else
|
||||
func_bob_off();
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
/*QUAKED misc_bob (0 0.5 0.8) (-8 -8 -8) (8 8 8)
|
||||
*/
|
||||
void() misc_bob =
|
||||
{
|
||||
if (SUB_Inhibit ()) // new spawnflags for all entities -- iw
|
||||
return;
|
||||
|
||||
if (self.mdl == "")
|
||||
self.mdl = string_null;
|
||||
precache_model(self.mdl);
|
||||
|
||||
func_bob();
|
||||
};
|
||||
Reference in New Issue
Block a user