mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-12 07:04:36 +00:00
Merge pull request #2157 from Areloch/NetworkedFields
Adds a new function for defining network-aware console fields on NetObjects
This commit is contained in:
commit
4182827b9a
5 changed files with 168 additions and 2 deletions
|
|
@ -493,6 +493,96 @@ void NetObject::removeScopeRef()
|
|||
}
|
||||
}
|
||||
|
||||
//Networked fields
|
||||
//------------------------------------------------------------------
|
||||
void NetObject::addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags,
|
||||
U32 networkMask)
|
||||
{
|
||||
addNetworkedField(
|
||||
in_pFieldname,
|
||||
in_fieldType,
|
||||
in_fieldOffset,
|
||||
1,
|
||||
in_pFieldDocs,
|
||||
flags,
|
||||
networkMask);
|
||||
}
|
||||
|
||||
void NetObject::addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
AbstractClassRep::WriteDataNotify in_writeDataFn,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags,
|
||||
U32 networkMask)
|
||||
{
|
||||
addNetworkedField(
|
||||
in_pFieldname,
|
||||
in_fieldType,
|
||||
in_fieldOffset,
|
||||
in_writeDataFn,
|
||||
1,
|
||||
in_pFieldDocs,
|
||||
flags,
|
||||
networkMask);
|
||||
}
|
||||
|
||||
void NetObject::addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
const U32 in_elementCount,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags,
|
||||
U32 networkMask)
|
||||
{
|
||||
addNetworkedField(in_pFieldname,
|
||||
in_fieldType,
|
||||
in_fieldOffset,
|
||||
&defaultProtectedWriteFn,
|
||||
in_elementCount,
|
||||
in_pFieldDocs,
|
||||
flags,
|
||||
networkMask);
|
||||
}
|
||||
|
||||
void NetObject::addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
AbstractClassRep::WriteDataNotify in_writeDataFn,
|
||||
const U32 in_elementCount,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags,
|
||||
U32 networkMask)
|
||||
{
|
||||
AbstractClassRep::Field f;
|
||||
f.pFieldname = StringTable->insert(in_pFieldname);
|
||||
|
||||
if (in_pFieldDocs)
|
||||
f.pFieldDocs = in_pFieldDocs;
|
||||
|
||||
f.type = in_fieldType;
|
||||
f.offset = in_fieldOffset;
|
||||
f.elementCount = in_elementCount;
|
||||
f.validator = NULL;
|
||||
f.flag = flags;
|
||||
|
||||
f.setDataFn = &defaultProtectedSetFn;
|
||||
f.getDataFn = &defaultProtectedGetFn;
|
||||
f.writeDataFn = in_writeDataFn;
|
||||
|
||||
f.networkMask = networkMask;
|
||||
|
||||
ConsoleBaseType* conType = ConsoleBaseType::getType(in_fieldType);
|
||||
AssertFatal(conType, "ConsoleObject::addField - invalid console type");
|
||||
f.table = conType->getEnumTable();
|
||||
|
||||
sg_tempFieldList.push_back(f);
|
||||
}
|
||||
|
||||
DefineEngineMethod(NetObject, clearScopeAlways, void, (), ,
|
||||
"@brief Clears the scope always flag on this object.\n\n")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -422,6 +422,57 @@ public:
|
|||
void removeScopeRef();
|
||||
void setScopeRegistered(bool flag) { scope_registered = flag; }
|
||||
bool getScopeRegistered() const { return scope_registered; }
|
||||
|
||||
protected:
|
||||
/// Add a networked field
|
||||
///
|
||||
/// A networked field is a regular field but with a bitmask flag associated to it.
|
||||
/// When the field is set, it automatically triggers a call to setMaskBits with the mask associated to the field
|
||||
/// in order to streamline simple networking code
|
||||
/// Register a complex field.
|
||||
///
|
||||
/// @param in_pFieldname Name of the field.
|
||||
/// @param in_fieldType Type of the field. @see ConsoleDynamicTypes
|
||||
/// @param in_fieldOffset Offset to the field from the start of the class; calculated using the Offset() macro.
|
||||
/// @param in_elementCount Number of elements in this field. Arrays of elements are assumed to be contiguous in memory.
|
||||
/// @param in_pFieldDocs Usage string for this field. @see console_autodoc
|
||||
static void addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
const U32 in_elementCount = 1,
|
||||
const char* in_pFieldDocs = NULL,
|
||||
U32 flags = 0,
|
||||
U32 networkMask = 0);
|
||||
|
||||
static void addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
AbstractClassRep::WriteDataNotify in_writeDataFn,
|
||||
const U32 in_elementCount = 1,
|
||||
const char* in_pFieldDocs = NULL,
|
||||
U32 flags = 0,
|
||||
U32 networkMask = 0);
|
||||
|
||||
/// Register a simple field.
|
||||
///
|
||||
/// @param in_pFieldname Name of the field.
|
||||
/// @param in_fieldType Type of the field. @see ConsoleDynamicTypes
|
||||
/// @param in_fieldOffset Offset to the field from the start of the class; calculated using the Offset() macro.
|
||||
/// @param in_pFieldDocs Usage string for this field. @see console_autodoc
|
||||
static void addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags = 0,
|
||||
U32 networkMask = 0);
|
||||
|
||||
static void addNetworkedField(const char* in_pFieldname,
|
||||
const U32 in_fieldType,
|
||||
const dsize_t in_fieldOffset,
|
||||
AbstractClassRep::WriteDataNotify in_writeDataFn,
|
||||
const char* in_pFieldDocs,
|
||||
U32 flags = 0,
|
||||
U32 networkMask = 0);
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue