trigger_once/multiple/teleport/camera, prop_rope: Save/Restore fixes
This commit is contained in:
parent
367289df84
commit
9110da2cec
5 changed files with 199 additions and 46 deletions
|
@ -89,6 +89,9 @@ trigger_multiple::Save(float handle)
|
|||
{
|
||||
super::Save(handle);
|
||||
SaveFloat(handle, "m_flWait", m_flWait);
|
||||
SaveBool(handle, "m_bStartDisabled", m_bStartDisabled);
|
||||
SaveBool(handle, "m_bIsModern", m_bIsModern);
|
||||
SaveBool(handle, "m_bEnabled", m_bEnabled);
|
||||
SaveString(handle, "m_strOnStartTouch", m_strOnStartTouch);
|
||||
SaveString(handle, "m_strOnEndTouchAll", m_strOnEndTouchAll);
|
||||
SaveString(handle, "m_strOnTrigger", m_strOnTrigger);
|
||||
|
@ -101,6 +104,15 @@ trigger_multiple::Restore(string strKey, string strValue)
|
|||
case "m_flWait":
|
||||
m_flWait = ReadFloat(strValue);
|
||||
break;
|
||||
case "m_bStartDisabled":
|
||||
m_bStartDisabled = ReadBool(strValue);
|
||||
break;
|
||||
case "m_bIsModern":
|
||||
m_bIsModern = ReadBool(strValue);
|
||||
break;
|
||||
case "m_bEnabled":
|
||||
m_bEnabled = ReadBool(strValue);
|
||||
break;
|
||||
case "m_strOnStartTouch":
|
||||
m_strOnStartTouch = ReadString(strValue);
|
||||
break;
|
||||
|
|
|
@ -95,20 +95,32 @@ void
|
|||
trigger_once::Save(float handle)
|
||||
{
|
||||
super::Save(handle);
|
||||
SaveBool(handle, "m_bStartDisabled", m_bStartDisabled);
|
||||
SaveBool(handle, "m_bEnabled", m_bEnabled);
|
||||
SaveString(handle, "m_strOnStartTouch", m_strOnStartTouch);
|
||||
SaveString(handle, "m_strOnTrigger", m_strOnTrigger);
|
||||
SaveBool(handle, "m_bIsModern", m_bIsModern);
|
||||
}
|
||||
|
||||
void
|
||||
trigger_once::Restore(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "m_bStartDisabled":
|
||||
m_bStartDisabled = ReadBool(strValue);
|
||||
break;
|
||||
case "m_bEnabled":
|
||||
m_bEnabled = ReadBool(strValue);
|
||||
break;
|
||||
case "m_strOnStartTouch":
|
||||
m_strOnStartTouch = ReadString(strValue);
|
||||
break;
|
||||
case "m_strOnTrigger":
|
||||
m_strOnTrigger = ReadString(strValue);
|
||||
break;
|
||||
case "m_bIsModern":
|
||||
m_bIsModern = ReadBool(strValue);
|
||||
break;
|
||||
default:
|
||||
super::Restore(strKey, strValue);
|
||||
}
|
||||
|
|
|
@ -47,6 +47,8 @@ public:
|
|||
virtual void Spawned(void);
|
||||
virtual void Respawn(void);
|
||||
virtual void SpawnKey(string, string);
|
||||
virtual void Save(float);
|
||||
virtual void Restore(string,string);
|
||||
|
||||
nonvirtual bool CanPass(NSEntity);
|
||||
|
||||
|
@ -90,6 +92,40 @@ trigger_teleport::SpawnKey(string strKey, string strValue)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
trigger_teleport::Save(float handle)
|
||||
{
|
||||
super::Save(handle);
|
||||
SaveBool(handle, "m_bEnabled", m_bEnabled);
|
||||
SaveString(handle, "m_sndTeleport", m_sndTeleport);
|
||||
SaveString(handle, "m_sndTeleportEnter", m_sndTeleportEnter);
|
||||
SaveString(handle, "m_sndTeleportExit", m_sndTeleportExit);
|
||||
SaveBool(handle, "m_bIsModern", m_bIsModern);
|
||||
}
|
||||
|
||||
void
|
||||
trigger_teleport::Restore(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "m_bEnabled":
|
||||
m_bEnabled = ReadBool(strValue);
|
||||
break;
|
||||
case "m_sndTeleport":
|
||||
m_sndTeleport = ReadString(strValue);
|
||||
break;
|
||||
case "m_sndTeleportEnter":
|
||||
m_sndTeleportEnter = ReadString(strValue);
|
||||
break;
|
||||
case "m_sndTeleportExit":
|
||||
m_sndTeleportExit = ReadString(strValue);
|
||||
break;
|
||||
case "m_bIsModern":
|
||||
m_bIsModern = ReadBool(strValue);
|
||||
break;
|
||||
default:
|
||||
super::Restore(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
trigger_teleport::CanPass(NSEntity target)
|
||||
|
|
|
@ -53,12 +53,6 @@ This entity was introduced in The Wastes (2018).
|
|||
*/
|
||||
class prop_rope:NSEntity
|
||||
{
|
||||
string m_strShader;
|
||||
PREDICTED_FLOAT(m_flSag)
|
||||
PREDICTED_FLOAT(m_flSwingFactor)
|
||||
PREDICTED_INT(m_iSegments)
|
||||
PREDICTED_VECTOR(m_vecTarget)
|
||||
|
||||
public:
|
||||
void prop_rope(void);
|
||||
|
||||
|
@ -67,11 +61,20 @@ public:
|
|||
virtual void ReceiveEntity(float,float);
|
||||
virtual void DrawSegment(vector, vector, vector);
|
||||
#else
|
||||
virtual void SpawnKey(string,string);
|
||||
virtual void Respawn(void);
|
||||
virtual void Save(float);
|
||||
virtual void Restore(string, string);
|
||||
virtual void EvaluateEntity(void);
|
||||
virtual float SendEntity(entity,float);
|
||||
virtual void SpawnKey(string,string);
|
||||
#endif
|
||||
|
||||
private:
|
||||
string m_strShader;
|
||||
PREDICTED_FLOAT(m_flSag)
|
||||
PREDICTED_FLOAT(m_flSwingFactor)
|
||||
PREDICTED_INT(m_iSegments)
|
||||
PREDICTED_VECTOR(m_vecTarget)
|
||||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
|
@ -293,6 +296,42 @@ prop_rope::SpawnKey(string strKey, string strValue)
|
|||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
prop_rope::Save(float handle)
|
||||
{
|
||||
super::Save(handle);
|
||||
|
||||
SaveString(handle, "m_strShader", m_strShader);
|
||||
SaveFloat(handle, "m_flSag", m_flSag);
|
||||
SaveFloat(handle, "m_flSwingFactor", m_flSwingFactor);
|
||||
SaveInt(handle, "m_iSegments", m_iSegments);
|
||||
SaveVector(handle, "m_vecTarget", m_vecTarget);
|
||||
}
|
||||
|
||||
void
|
||||
prop_rope::Restore(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "m_strShader":
|
||||
m_strShader = ReadString(strValue);
|
||||
break;
|
||||
case "m_flSag":
|
||||
m_flSag = ReadFloat(strValue);
|
||||
break;
|
||||
case "m_flSwingFactor":
|
||||
m_flSwingFactor = ReadFloat(strValue);
|
||||
break;
|
||||
case "m_iSegments":
|
||||
m_iSegments = ReadInt(strValue);
|
||||
break;
|
||||
case "m_vecTarget":
|
||||
m_vecTarget = ReadVector(strValue);
|
||||
break;
|
||||
default:
|
||||
super::Restore(strKey, strValue);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
|
|
|
@ -44,22 +44,14 @@ This entity was introduced in Half-Life (1998).
|
|||
*/
|
||||
class trigger_camera:NSPointTrigger
|
||||
{
|
||||
entity m_eLooker;
|
||||
#ifdef CLIENT
|
||||
#else
|
||||
float m_flWait;
|
||||
string m_strAimAt;
|
||||
string m_strMoveTo;
|
||||
entity m_eLooker_net;
|
||||
float m_flSpeed;
|
||||
#endif
|
||||
|
||||
public:
|
||||
void trigger_camera(void);
|
||||
|
||||
#ifdef CLIENT
|
||||
virtual void ReceiveEntity(float,float);
|
||||
#else
|
||||
virtual void Save(float);
|
||||
virtual void Restore(string, string);
|
||||
virtual void NextPath(void);
|
||||
virtual void GoToTarget(void);
|
||||
virtual void Trigger(entity, triggermode_t);
|
||||
|
@ -68,16 +60,26 @@ public:
|
|||
virtual float SendEntity(entity,float);
|
||||
virtual void EvaluateEntity(void);
|
||||
#endif
|
||||
|
||||
private:
|
||||
NETWORKED_FLOAT(m_flWait)
|
||||
entity m_eLooker;
|
||||
#ifdef SERVER
|
||||
string m_strAimAt;
|
||||
string m_strMoveTo;
|
||||
entity m_eLooker_net;
|
||||
float m_flSpeed;
|
||||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
trigger_camera::trigger_camera(void)
|
||||
{
|
||||
#ifndef CLIENT
|
||||
m_flWait = 4.0f;
|
||||
m_eLooker = __NULL__;
|
||||
#ifndef CLIENT
|
||||
m_strAimAt = __NULL__;
|
||||
m_strMoveTo = __NULL__;
|
||||
m_eLooker = __NULL__;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -85,28 +87,26 @@ trigger_camera::trigger_camera(void)
|
|||
void
|
||||
trigger_camera::ReceiveEntity(float flNew, float flFlags)
|
||||
{
|
||||
float flWait = 0.0f;
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_ORIGIN) {
|
||||
//if (flFlags & OCAMFL_CHANGED_ORIGIN) {
|
||||
origin[0] = readcoord();
|
||||
origin[1] = readcoord();
|
||||
origin[2] = readcoord();
|
||||
setorigin(this, origin);
|
||||
}
|
||||
//}
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_ANGLES) {
|
||||
//if (flFlags & OCAMFL_CHANGED_ANGLES) {
|
||||
angles[0] = readfloat();
|
||||
angles[1] = readfloat();
|
||||
angles[2] = readfloat();
|
||||
}
|
||||
//}
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_VIEWER) {
|
||||
//if (flFlags & OCAMFL_CHANGED_VIEWER) {
|
||||
m_eLooker = findfloat(world, ::entnum, readentitynum());
|
||||
}
|
||||
//}
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
flWait = readfloat();
|
||||
}
|
||||
//if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
m_flWait = readfloat();
|
||||
//}
|
||||
|
||||
int s = (float)getproperty(VF_ACTIVESEAT);
|
||||
pSeat = &g_seats[s];
|
||||
|
@ -118,15 +118,16 @@ trigger_camera::ReceiveEntity(float flNew, float flFlags)
|
|||
pSeat->m_vecCameraOrigin = origin;
|
||||
pSeat->m_vecCameraAngle = angles;
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
if (flWait == -1)
|
||||
//if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
if (m_flWait == -1)
|
||||
pSeat->m_flCameraTime = -1;
|
||||
else
|
||||
pSeat->m_flCameraTime = time + flWait;
|
||||
pSeat->m_flCameraTime = time + m_flWait;
|
||||
|
||||
g_view.SetCameraAngle(angles);
|
||||
g_view.SetClientAngle(angles);
|
||||
}
|
||||
//error(sprintf("Wait! %f %f\n", time, pSeat->m_flCameraTime));
|
||||
//}
|
||||
|
||||
classname = "trigger_camera";
|
||||
}
|
||||
|
@ -158,7 +159,42 @@ trigger_camera::Respawn(void)
|
|||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
m_eLooker = world;
|
||||
pvsflags = PVSF_IGNOREPVS;
|
||||
}
|
||||
|
||||
void
|
||||
trigger_camera::Save(float handle)
|
||||
{
|
||||
super::Save(handle);
|
||||
|
||||
SaveFloat(handle, "m_flWait", m_flWait);
|
||||
SaveEntity(handle, "m_eLooker", m_eLooker);
|
||||
SaveString(handle, "m_strAimAt", m_strAimAt);
|
||||
SaveString(handle, "m_strMoveTo", m_strMoveTo);
|
||||
SaveFloat(handle, "m_flSpeed", m_flSpeed);
|
||||
}
|
||||
|
||||
void
|
||||
trigger_camera::Restore(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "m_flWait":
|
||||
m_flWait = ReadFloat(strValue);
|
||||
break;
|
||||
case "m_eLooker":
|
||||
m_eLooker = ReadEntity(strValue);
|
||||
break;
|
||||
case "m_strAimAt":
|
||||
m_strAimAt = ReadString(strValue);
|
||||
break;
|
||||
case "m_strMoveTo":
|
||||
m_strMoveTo = ReadString(strValue);
|
||||
break;
|
||||
case "m_flSpeed":
|
||||
m_flSpeed = ReadFloat(strValue);
|
||||
break;
|
||||
default:
|
||||
super::Restore(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
float
|
||||
|
@ -167,25 +203,25 @@ trigger_camera::SendEntity(entity ePEnt, float flFlags)
|
|||
WriteByte(MSG_ENTITY, ENT_OLDCAMERA);
|
||||
WriteFloat(MSG_ENTITY, flFlags);
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_ORIGIN) {
|
||||
//if (flFlags & OCAMFL_CHANGED_ORIGIN) {
|
||||
WriteCoord(MSG_ENTITY, origin[0]);
|
||||
WriteCoord(MSG_ENTITY, origin[1]);
|
||||
WriteCoord(MSG_ENTITY, origin[2]);
|
||||
}
|
||||
//}
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_ANGLES) {
|
||||
//if (flFlags & OCAMFL_CHANGED_ANGLES) {
|
||||
WriteFloat(MSG_ENTITY, angles[0]);
|
||||
WriteFloat(MSG_ENTITY, angles[1]);
|
||||
WriteFloat(MSG_ENTITY, angles[2]);
|
||||
}
|
||||
// }
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_VIEWER) {
|
||||
//if (flFlags & OCAMFL_CHANGED_VIEWER) {
|
||||
WriteEntity(MSG_ENTITY, m_eLooker);
|
||||
}
|
||||
//}
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
//if (flFlags & OCAMFL_CHANGED_WAIT) {
|
||||
WriteFloat(MSG_ENTITY, m_flWait);
|
||||
}
|
||||
//}
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
@ -193,7 +229,13 @@ trigger_camera::SendEntity(entity ePEnt, float flFlags)
|
|||
void
|
||||
trigger_camera::EvaluateEntity(void)
|
||||
{
|
||||
entity t = find(world, ::targetname, m_strAimAt);
|
||||
entity t;
|
||||
|
||||
if (!m_eLooker)
|
||||
return;
|
||||
|
||||
t = find(world, ::targetname, m_strAimAt);
|
||||
|
||||
if (t) {
|
||||
angles = vectoangles(t.origin - origin);
|
||||
}
|
||||
|
@ -207,10 +249,14 @@ trigger_camera::EvaluateEntity(void)
|
|||
if (ATTR_CHANGED(m_eLooker)) {
|
||||
SetSendFlags(OCAMFL_CHANGED_VIEWER);
|
||||
}
|
||||
if (ATTR_CHANGED(m_flWait)) {
|
||||
SetSendFlags(OCAMFL_CHANGED_WAIT);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin)
|
||||
SAVE_STATE(angles)
|
||||
SAVE_STATE(m_eLooker)
|
||||
SAVE_STATE(m_flWait)
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -245,6 +291,12 @@ void
|
|||
trigger_camera::NextPath(void)
|
||||
{
|
||||
path_corner eNode;
|
||||
|
||||
if (target == "") {
|
||||
return;
|
||||
}
|
||||
|
||||
print(sprintf("Looking for target %S\n", target));
|
||||
eNode = (path_corner)find(world, ::targetname, target);
|
||||
|
||||
if (!eNode) {
|
||||
|
@ -288,7 +340,7 @@ trigger_camera::Trigger(entity act, triggermode_t state)
|
|||
act = find(world, ::classname, "player");
|
||||
}
|
||||
|
||||
NSLog("trigger_camera for %S is now %S\n", act.netname, targetname);
|
||||
NSLog("trigger_camera for %s %S is now %S\n", act.classname, act.netname, targetname);
|
||||
|
||||
/* kill the other cams the player may be attached to */
|
||||
for (trigger_camera cam = __NULL__; (cam = (trigger_camera)find(cam, ::classname, "trigger_camera"));) {
|
||||
|
@ -299,6 +351,7 @@ trigger_camera::Trigger(entity act, triggermode_t state)
|
|||
}
|
||||
|
||||
m_eLooker = act;
|
||||
m_eLooker.view2 = this;
|
||||
NSLog("Triggering it on %s\n", act.netname);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
ClearVelocity();
|
||||
|
@ -306,6 +359,7 @@ trigger_camera::Trigger(entity act, triggermode_t state)
|
|||
SetTriggerTarget(m_strMoveTo);
|
||||
NextPath();
|
||||
GoToTarget();
|
||||
SetSendFlags(-1);
|
||||
SetSendFlags(0xFFFFFF);
|
||||
pvsflags = PVSF_IGNOREPVS;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue