1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-17 10:52:46 +00:00

Differentiate between float and int types in plNotify

This commit is contained in:
Bartek Bok
2012-04-07 23:04:12 +02:00
parent c70bb776ba
commit 82e4c81303
6 changed files with 176 additions and 17 deletions

View File

@ -174,8 +174,14 @@ void plNotifyMsg::AddEvent( proEventData* ed )
proVariableEventData *evt = (proVariableEventData *)ed;
switch (evt->fDataType)
{
case proEventData::kNumber:
AddVariableEvent(evt->fName, evt->fNumber);
case proEventData::kFloat:
AddVariableEvent(evt->fName, evt->fNumber.f);
break;
case proEventData::kInt:
AddVariableEvent(evt->fName, evt->fNumber.i);
break;
case proEventData::kNull:
AddVariableEvent(evt->fName);
break;
case proEventData::kKey:
AddVariableEvent(evt->fName, evt->fKey);
@ -588,12 +594,44 @@ void plNotifyMsg::AddVariableEvent( const char* name, float number )
// create the control key event record
proVariableEventData* pED = new proVariableEventData;
pED->fName = hsStrcpy(nil,name);
// pED->fName = (char*)name;
pED->fDataType = proEventData::kNumber;
pED->fNumber = number;
pED->fDataType = proEventData::kFloat;
pED->fNumber.f = number;
fEvents.Append(pED); // then add it to the list of event records
}
/////////////////////////////////////////////////////////////////////////////
//
// Function : AddVariableEvent
// PARAMETERS : name - name of the variable
// : number - the value of the variable as a number
//
// PURPOSE : Add a variable event record to this notify message
//
void plNotifyMsg::AddVariableEvent( const char* name, int number )
{
// create the control key event record
proVariableEventData* pED = new proVariableEventData;
pED->fName = hsStrcpy(nil,name);
pED->fDataType = proEventData::kInt;
pED->fNumber.i = number;
fEvents.Append(pED); // then add it to the list of event records
}
/////////////////////////////////////////////////////////////////////////////
//
// Function : AddVariableEvent
// PARAMETERS : name - name of the variable
//
// PURPOSE : Add a variable event record to this notify message
//
void plNotifyMsg::AddVariableEvent( const char* name)
{
// create the control key event record
proVariableEventData* pED = new proVariableEventData;
pED->fName = hsStrcpy(nil,name);
pED->fDataType = proEventData::kNull;
fEvents.Append(pED); // then add it to the list of event records
}
/////////////////////////////////////////////////////////////////////////////
//
@ -1283,11 +1321,41 @@ void proVariableEventData::IDestruct()
fName = nil;
}
void proVariableEventData::IReadNumber(hsStream * stream) {
switch (fDataType)
{
case kFloat:
fNumber.f = stream->ReadLEScalar();
break;
case kInt:
fNumber.i = stream->ReadLE32();
break;
default:
stream->ReadLE32(); //ignore
break;
}
}
void proVariableEventData::IWriteNumber(hsStream * stream) {
switch (fDataType)
{
case kFloat:
stream->WriteLEScalar(fNumber.f);
break;
case kInt:
stream->WriteLE32(fNumber.i);
break;
default:
stream->WriteLE32(0);
break;
}
}
void proVariableEventData::IRead(hsStream* stream, hsResMgr* mgr)
{
fName = stream->ReadSafeString();
fDataType = stream->ReadLE32();
fNumber = stream->ReadLEScalar();
IReadNumber(stream);
fKey = mgr->ReadKey(stream);
}
@ -1295,7 +1363,7 @@ void proVariableEventData::IWrite(hsStream* stream, hsResMgr* mgr)
{
stream->WriteSafeString(fName);
stream->WriteLE32(fDataType);
stream->WriteLEScalar(fNumber);
IWriteNumber(stream);
mgr->WriteKey(stream, fKey);
}
@ -1317,7 +1385,7 @@ void proVariableEventData::IReadVersion(hsStream* s, hsResMgr* mgr)
if (contentFlags.IsBitSet(kProVariableDataType))
fDataType = s->ReadLE32();
if (contentFlags.IsBitSet(kProVariableNumber))
fNumber = s->ReadLEScalar();
IReadNumber(s);
if (contentFlags.IsBitSet(kProVariableKey))
fKey = mgr->ReadKey(s);
}
@ -1336,7 +1404,7 @@ void proVariableEventData::IWriteVersion(hsStream* s, hsResMgr* mgr)
// kProVariableDataType
s->WriteLE32(fDataType);
// kProVariableNumber
s->WriteLEScalar(fNumber);
IWriteNumber(s);
// kProVariableKey
mgr->WriteKey(s, fKey);
}

View File

@ -87,8 +87,10 @@ public:
enum dataType
{
kNumber=1,
kFloat=1,
kKey,
kInt,
kNull,
kNotta
};
@ -181,9 +183,12 @@ proEventType(Variable)
int32_t fDataType; // type of data
// Can't be a union, sadly, but it isn't that much of a waste of space...
float fNumber; // if its a number
plKey fKey; // if its a plKey (pointer to something)
union {
float f;
int32_t i;
} fNumber;
protected:
virtual void IInit();
@ -193,6 +198,9 @@ protected:
virtual void IReadVersion(hsStream* s, hsResMgr* mgr);
virtual void IWriteVersion(hsStream* s, hsResMgr* mgr);
virtual void IReadNumber(hsStream * stream);
virtual void IWriteNumber(hsStream * stream);
};
proEventType(Facing)
@ -368,7 +376,9 @@ public:
void AddPickEvent( const plKey &other, const plKey& self, hsBool enabled, hsPoint3 hitPoint );
void AddControlKeyEvent( int32_t key, hsBool down );
void AddVariableEvent( const char* name, float number );
void AddVariableEvent( const char *name, const plKey &key);
void AddVariableEvent( const char* name, int number );
void AddVariableEvent( const char* name );
void AddVariableEvent( const char *name, const plKey &key );
void AddFacingEvent( const plKey &other, const plKey &self, float dot, hsBool enabled);
void AddContainerEvent( const plKey &container, const plKey &contained, hsBool entering);
void AddActivateEvent( hsBool activate );