func_areaportal: Make work on Source Engine BSP by shoving the "portalnumber" key into .style
This commit is contained in:
parent
c3f5e7a1c2
commit
e44f56a56d
1 changed files with 61 additions and 22 deletions
|
@ -34,39 +34,80 @@ This entity was introduced in Quake II (1997).
|
||||||
class
|
class
|
||||||
func_areaportal:NSEntity
|
func_areaportal:NSEntity
|
||||||
{
|
{
|
||||||
int m_iPortalState;
|
bool m_bPortalState;
|
||||||
int m_iStartOpen;
|
bool m_bStartOpen;
|
||||||
|
int m_iPortalNumber; /* Source Engine only */
|
||||||
|
bool m_bSourcePortal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void func_areaportal(void);
|
void func_areaportal(void);
|
||||||
|
|
||||||
/* overrides */
|
/* overrides */
|
||||||
virtual void Respawn(void);
|
virtual void Spawned(void);
|
||||||
virtual void SpawnKey(string,string);
|
virtual void SpawnKey(string,string);
|
||||||
virtual void Trigger(entity, triggermode_t);
|
virtual void Trigger(entity, triggermode_t);
|
||||||
virtual void Input(entity,string,string);
|
virtual void Input(entity,string,string);
|
||||||
|
virtual void Save(float);
|
||||||
|
virtual void Restore(string, string);
|
||||||
|
|
||||||
virtual void PortalOpen(void);
|
nonvirtual void PortalOpen(void);
|
||||||
virtual void PortalClose(void);
|
nonvirtual void PortalClose(void);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
func_areaportal::func_areaportal(void)
|
func_areaportal::func_areaportal(void)
|
||||||
{
|
{
|
||||||
m_iPortalState = 0i;
|
m_bPortalState = true;
|
||||||
m_iStartOpen = 0i;
|
m_bStartOpen = false;
|
||||||
|
m_iPortalNumber = 0i;
|
||||||
|
m_bSourcePortal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
func_areaportal::Respawn(void)
|
func_areaportal::Save(float handle)
|
||||||
{
|
{
|
||||||
|
super::Save(handle);
|
||||||
|
SaveBool(handle, "m_bPortalState", m_bPortalState);
|
||||||
|
SaveBool(handle, "m_bStartOpen", m_bStartOpen);
|
||||||
|
SaveInt(handle, "m_iPortalNumber", m_iPortalNumber);
|
||||||
|
SaveBool(handle, "m_bSourcePortal", m_bSourcePortal);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
func_areaportal::Restore(string strKey, string strValue)
|
||||||
|
{
|
||||||
|
switch (strKey) {
|
||||||
|
case "m_bPortalState":
|
||||||
|
m_bPortalState = ReadBool(strValue);
|
||||||
|
break;
|
||||||
|
case "m_bStartOpen":
|
||||||
|
m_bStartOpen = ReadBool(strValue);
|
||||||
|
break;
|
||||||
|
case "m_iPortalNumber":
|
||||||
|
m_iPortalNumber = ReadInt(strValue);
|
||||||
|
break;
|
||||||
|
case "m_bSourcePortal":
|
||||||
|
m_bSourcePortal = ReadBool(strValue);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super::Restore(strKey, strValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
func_areaportal::Spawned(void)
|
||||||
|
{
|
||||||
|
super::Spawned();
|
||||||
|
|
||||||
SetModel(GetSpawnModel());
|
SetModel(GetSpawnModel());
|
||||||
SetOrigin(GetSpawnOrigin());
|
SetOrigin(GetSpawnOrigin());
|
||||||
Hide();
|
Hide();
|
||||||
SetSolid(SOLID_NOT);
|
SetSolid(SOLID_NOT);
|
||||||
|
|
||||||
if (!m_iStartOpen)
|
if (m_bSourcePortal)
|
||||||
|
style = (float)m_iPortalNumber;
|
||||||
|
|
||||||
|
if (m_bStartOpen == false)
|
||||||
PortalClose();
|
PortalClose();
|
||||||
else
|
else
|
||||||
PortalOpen();
|
PortalOpen();
|
||||||
|
@ -75,11 +116,13 @@ func_areaportal::Respawn(void)
|
||||||
void
|
void
|
||||||
func_areaportal::SpawnKey(string strKey, string strValue)
|
func_areaportal::SpawnKey(string strKey, string strValue)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (strKey) {
|
switch (strKey) {
|
||||||
case "StartOpen":
|
case "StartOpen":
|
||||||
m_iStartOpen = stoi(strValue);
|
m_bStartOpen = ReadBool(strValue);
|
||||||
break;
|
break;
|
||||||
|
case "portalnumber":
|
||||||
|
m_iPortalNumber = ReadInt(strValue);
|
||||||
|
m_bSourcePortal = true;
|
||||||
default:
|
default:
|
||||||
super::SpawnKey(strKey, strValue);
|
super::SpawnKey(strKey, strValue);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +136,7 @@ func_areaportal::Trigger(entity act, triggermode_t state)
|
||||||
} else if (state == TRIG_ON) {
|
} else if (state == TRIG_ON) {
|
||||||
PortalOpen();
|
PortalOpen();
|
||||||
} else {
|
} else {
|
||||||
if (m_iPortalState == 1)
|
if (m_bPortalState == true)
|
||||||
PortalClose();
|
PortalClose();
|
||||||
else
|
else
|
||||||
PortalOpen();
|
PortalOpen();
|
||||||
|
@ -104,9 +147,11 @@ void
|
||||||
func_areaportal::Input(entity eAct, string strInput, string strData)
|
func_areaportal::Input(entity eAct, string strInput, string strData)
|
||||||
{
|
{
|
||||||
switch (strInput) {
|
switch (strInput) {
|
||||||
|
case "TurnOn":
|
||||||
case "Open":
|
case "Open":
|
||||||
Trigger(eAct, TRIG_ON);
|
Trigger(eAct, TRIG_ON);
|
||||||
break;
|
break;
|
||||||
|
case "TurnOff":
|
||||||
case "Close":
|
case "Close":
|
||||||
Trigger(eAct, TRIG_OFF);
|
Trigger(eAct, TRIG_OFF);
|
||||||
break;
|
break;
|
||||||
|
@ -121,10 +166,7 @@ func_areaportal::Input(entity eAct, string strInput, string strData)
|
||||||
void
|
void
|
||||||
func_areaportal::PortalOpen(void)
|
func_areaportal::PortalOpen(void)
|
||||||
{
|
{
|
||||||
if (m_iPortalState == 1)
|
m_bPortalState = true;
|
||||||
return;
|
|
||||||
|
|
||||||
m_iPortalState = 1;
|
|
||||||
setorigin(this, origin);
|
setorigin(this, origin);
|
||||||
openportal(this, AREAPORTAL_OPEN);
|
openportal(this, AREAPORTAL_OPEN);
|
||||||
}
|
}
|
||||||
|
@ -132,10 +174,7 @@ func_areaportal::PortalOpen(void)
|
||||||
void
|
void
|
||||||
func_areaportal::PortalClose(void)
|
func_areaportal::PortalClose(void)
|
||||||
{
|
{
|
||||||
if (m_iPortalState == 0)
|
m_bPortalState = false;
|
||||||
return;
|
|
||||||
|
|
||||||
m_iPortalState = 0;
|
|
||||||
setorigin(this, origin);
|
setorigin(this, origin);
|
||||||
openportal(this, AREAPORTAL_CLOSED);
|
openportal(this, AREAPORTAL_CLOSED);
|
||||||
}
|
}
|
Loading…
Reference in a new issue