Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix noNetwork and add documentation for automated entity property files #1242

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions cmake/macros/GenerateEntityProperties.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ macro(GENERATE_ENTITY_PROPERTIES)
while(ENTITY_PROPERTIES_FILE)
list(POP_FRONT ENTITY_PROPERTIES_FILE LINE)

# Single-word lines represent sections of properties, which can be base properties like "Physics" or
# Entity types like "Model". We use the section names to generate comments, and also handle indentation
# and opening/closing braces.
if(NOT LINE MATCHES ".*:.*")
if(LINE MATCHES "#.*")
HifiExperiments marked this conversation as resolved.
Show resolved Hide resolved
continue()
elseif(NOT LINE MATCHES ".*:.*")
# Single-word lines represent sections of properties, which can be base properties like "Physics" or
# Entity types like "Model". We use the section names to generate comments, and also handle indentation
# and opening/closing braces.
if(LINE STREQUAL "Common")
set(COMMON_PROPS true)
else()
Expand Down Expand Up @@ -108,11 +110,11 @@ macro(GENERATE_ENTITY_PROPERTIES)
endif()

if (NOT COMMON_PROPS)
string(CONCAT ${CURRENT_TYPE}_REQUESTED_PROPS "${${CURRENT_TYPE}_REQUESTED_PROPS}" "\t// ${LINE}\n")
string(CONCAT ${CURRENT_TYPE}_ENTITY_APPEND "${${CURRENT_TYPE}_ENTITY_APPEND}" "\t\t// ${LINE}\n")
string(CONCAT ${CURRENT_TYPE}_ENTITY_READ "${${CURRENT_TYPE}_ENTITY_READ}" "\t// ${LINE}\n")
string(CONCAT ${CURRENT_TYPE}_ENTITY_COPY_TO "${${CURRENT_TYPE}_ENTITY_COPY_TO}" "\t// ${LINE}\n")
if (NOT LOCAL_PROPS)
string(CONCAT ${CURRENT_TYPE}_REQUESTED_PROPS "${${CURRENT_TYPE}_REQUESTED_PROPS}" "\t// ${LINE}\n")
string(CONCAT ${CURRENT_TYPE}_ENTITY_SET_FROM "${${CURRENT_TYPE}_ENTITY_SET_FROM}" "\t// ${LINE}\n")
endif()
endif()
Expand Down Expand Up @@ -298,7 +300,6 @@ macro(GENERATE_ENTITY_PROPERTIES)
string(CONCAT ENTITY_ITEM_PROPERTY_APPEND "${ENTITY_ITEM_PROPERTY_APPEND}" "\t\t\tAPPEND_ENTITY_PROPERTY(${ENTITY_PROPERTY_ENUM}, properties.get${ENTITY_PROPERTY_NAME_CAPS}());\n")
endif()
string(CONCAT ENTITY_ITEM_PROPERTY_READ "${ENTITY_ITEM_PROPERTY_READ}" "\tREAD_ENTITY_PROPERTY_TO_PROPERTIES(${ENTITY_PROPERTY_ENUM}, ${ENTITY_PROPERTY_READ_TYPE}, set${ENTITY_PROPERTY_NAME_CAPS});\n")
string(CONCAT ${CURRENT_TYPE}_REQUESTED_PROPS "${${CURRENT_TYPE}_REQUESTED_PROPS}" "\trequestedProperties += ${ENTITY_PROPERTY_ENUM};\n")
if(LINE MATCHES ".*enum( |,).*")
string(CONCAT ${CURRENT_TYPE}_ENTITY_APPEND "${${CURRENT_TYPE}_ENTITY_APPEND}" "\tAPPEND_ENTITY_PROPERTY(${ENTITY_PROPERTY_ENUM}, (uint8_t)get${ENTITY_PROPERTY_NAME_CAPS}());\n")
elseif(ENTITY_VARIABLE_NETWORK_GETTER)
Expand All @@ -317,6 +318,9 @@ macro(GENERATE_ENTITY_PROPERTIES)
endif()

if (NOT COMMON_PROPS)
if (NOT LOCAL_PROPS)
string(CONCAT ${CURRENT_TYPE}_REQUESTED_PROPS "${${CURRENT_TYPE}_REQUESTED_PROPS}" "\trequestedProperties += ${ENTITY_PROPERTY_ENUM};\n")
endif()
set(VARIABLE_DEFINE_FUNC "DEFINE_VARIABLE_REF")
if(LINE MATCHES ".*noGetterSetterProp( |,).*")
set(VARIABLE_DEFINE_FUNC "DEFINE_VARIABLE_NO_GETTER_SETTER")
Expand Down Expand Up @@ -427,8 +431,10 @@ macro(GENERATE_ENTITY_PROPERTIES)
while(GROUP_PROPERTIES_FILE)
list(POP_FRONT GROUP_PROPERTIES_FILE LINE)

# Lines that don't end in a comma represent the start of a new property group.
if(NOT LINE MATCHES ".*,")
if(LINE MATCHES "#.*")
continue()
elseif(NOT LINE MATCHES ".*,")
# Lines that don't end in a comma represent the start of a new property group.
string(REGEX MATCH ".*type:+([A-Z0-9a-z_<>::\/\.\"\(\)\+\-]+).*" GROUP_PROPERTY_TYPE ${LINE})
set(GROUP_PROPERTY_TYPE ${CMAKE_MATCH_1})

Expand Down
5 changes: 0 additions & 5 deletions libraries/entities/src/EntityItem.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,6 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param

@Base_REQUESTED_PROPS@

// Some of the properties not transmitted over network need to be added manually here:
requestedProperties += PROP_ENTITY_HOST_TYPE;
requestedProperties += PROP_OWNING_AVATAR_ID;
requestedProperties += PROP_VISIBLE_IN_SECONDARY_CAMERA;

return requestedProperties;
}

Expand Down
16 changes: 16 additions & 0 deletions libraries/entities/src/EntityItemGroupProperties.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
# This file defines all of the behavior of group entity properties. Each line defines one group property.
# This is how each line is interpreted:
# 1. A single word with no spaces or commas: delimits a property group, e.g. "grab" or "animation"
# Can be followed by type:<camelcase actual type>: some groups have a different c++ file name, e.g. ring is RingGizmo. if this isn't specified, the group name is just capitalized, e.g. pulse to Pulse.
# 2. A space separated list of the following properties, ending in a comma, defines a single property:
# Required values:
# enum:<the c++ prop enum (not including the PROP_ prefix)>
# prop:<the actual property name>
# type:<the property type>
# default:<the default value>
# Optional values:
# min:<the min value>
# max:<the max value>
# Optional flags:
# enum: this is an enum value
# urlPermission: this property is a URL which should be guarded by the canViewAssetURLs permission
grab
enum:GRAB_GRABBABLE prop:grabbable type:bool default:INITIAL_GRABBABLE,
enum:GRAB_KINEMATIC prop:grabKinematic type:bool default:INITIAL_KINEMATIC,
Expand Down
44 changes: 44 additions & 0 deletions libraries/entities/src/EntityItemProperties.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,47 @@
# This file defines all of the behavior of non-group entity properties. Each line defines one property or property group.
# This is how each line is interpreted:
# 1. A single word with no spaces or commas: delimits a section of properties, e.g. "Physics" or "Scripts". After "Common", each line delimits a type of entity (e.g. "Shape", "Zone", "Web")
# 2. A space separated list of the following properties, ending in a comma, defines a single property:
# Required values:
# enum:<the c++ prop enum (not including the PROP_ prefix)>
# prop:<the actual property name>
# type:<the property type>
# default:<the default value>
# Optional values:
# min:<the min value>
# max:<the max value>
# fromScriptType:<the type to use when converting from script values, if different than the normal type>
# proxy:<if this is a proxy for another property, the name of the actual property>
# proxyType:<for a proxy prop, the type of the original property, if different from this prop's type>
# getter:<the name of the function to use when getting this property in EntityItemProperties, if different than the default>
# setter:<the name of the function to use when setting this property in EntityItemProperties, if different than the default>
# networkGetter:<the expression to use when appending this property to the network stream in EntityItemProperties>
# variableNetworkGetter:<the expression to use when appending this property to the network stream in XXXXEntityItem>
# variableNetworkSetter:<the expression to use when reading this property from the network stream in XXXXEntityItem>
# variableCopyGetter:<the expression to use when getting this property to go from XXXXEntityItem to EntityItemProperties>
# variableCopySetter:<the expression to use when setting this property to go from EntityItemProperties to XXXXEntityItem>
# readType:<the type to use when reading this property from the network in EntityItemProperties>
# debugString:<the string to append to the debug dump for this property, e.g. units>
# debugGetter:<the expression to use to get a debug representation of this property>
# Optional flags:
# legacy: this is a legacy property, i.e. a proxy for another value
# common: this is a common property that is shared by multiple Entity types
# enum: this is an enum value
# propertySetter: in EntityItemProperties, this property will implement its own setter
# noScript: this property is not exposed to scripts
# readOnly: this property is not settable from scripts
# noNetwork: this property is not sent over the network
# urlPermission: this property is a URL which should be guarded by the canViewAssetURLs permission
# noVariableNetworkSetter: in XXXXEntityItem::readEntityDataFromBuffer/readEntitySubclassDataFromBuffer, this property will implement its own network setter (must still maintain the order though)
# basicProp/renderProp/noGetterSetterProp/inherited: specifies how the getter + setter should be defined in XXXXEntityItem. a basicProp will define them for you and just directly store the data. a renderProp will set _needsRenderUpdate to true if the property changes. a noGetterSetterProp will define the member variable but not the getter/setter. an inherited prop will not define anything, assuming both the member variable and getter/setter are inherited. if none of these are specified, the member variable will be defined as well as the getter/setter, but you must implement the getter/setter in the .cpp file.
# 3. group:<lowercase group property name> followed by optional properties, followed by a comma: represents a property group which uses the group name for scripts
# Optional values:
# type:<camelcase actual type>: some groups have a different c++ file name, e.g. ring is RingGizmo. if this isn't specified, the group name is just capitalized, e.g. pulse to Pulse.
# Optional flags:
# common: if this is a "common" group, shared by multiple entity types
# renderUpdateOnSet/recordChange: renderUpdateOnSet, in setSubClassProperties, set _needsRenderUpdate to true to trigger a render update if any of the group properties change. if recordChange, set a member variable (e.g. _hazePropertiesChanged) to true if any of the group properties change
# customVariableSetFrom: specifies that the class implements its own handling of how to react to changes to this group in setSubClassProperties
# customVariableRead: specifies that the class implements its own handling of how to react to changes to this group in readEntitySubclassDataFromBuffer
Core
enum:SIMULATION_OWNER prop:simulationOwner type:SimulationOwner default:SimulationOwner() noScript readType:QByteArray networkGetter:properties._simulationOwner.toByteArray() variableNetworkGetter:_simulationOwner.toByteArray() noVariableNetworkSetter,
enum:PARENT_ID prop:parentID type:QUuid default:UNKNOWN_ENTITY_ID inherited variableNetworkGetter:actualParentID noVariableNetworkSetter,
Expand Down
Loading