summaryrefslogtreecommitdiff
path: root/src/simulation/Simulation.h
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-05-14 22:04:08 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-05-14 22:04:08 (GMT)
commit0b4ad4f25cf168226677f648cf4cadfdb6caa59a (patch)
treeef8cdb5026d3fa7b7dde4decadc4f216d0f5963d /src/simulation/Simulation.h
parentbe849a91502bf99a44b572fc16fa1699f3210be1 (diff)
downloadpowder-0b4ad4f25cf168226677f648cf4cadfdb6caa59a.zip
powder-0b4ad4f25cf168226677f648cf4cadfdb6caa59a.tar.gz
Add ability to introspect the Particle struct
Diffstat (limited to 'src/simulation/Simulation.h')
-rw-r--r--src/simulation/Simulation.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/simulation/Simulation.h b/src/simulation/Simulation.h
index d200106..6a7c733 100644
--- a/src/simulation/Simulation.h
+++ b/src/simulation/Simulation.h
@@ -25,6 +25,22 @@ class Renderer;
class Gravity;
class Air;
+//Describes fields in structures such as Particle or Element
+struct StructProperty
+{
+ enum PropertyType { ParticleType, Colour, Integer, UInteger, Float, String };
+ std::string Name;
+ PropertyType Type;
+ intptr_t Offset;
+ StructProperty(std::string name, PropertyType type, intptr_t offset):
+ Name(name),
+ Type(type),
+ Offset(offset)
+ {
+
+ }
+};
+
struct Particle
{
int type;
@@ -36,6 +52,25 @@ struct Particle
int tmp;
int tmp2;
unsigned int dcolour;
+ /** Returns a list of properties, their type and offset within the structure that can be changed
+ by higher-level processes refering to them by name such as Lua or the property tool **/
+ std::vector<StructProperty> GetProperties()
+ {
+ std::vector<StructProperty> properties;
+ properties.push_back(StructProperty("type", StructProperty::ParticleType, offsetof(Particle, type)));
+ properties.push_back(StructProperty("life", StructProperty::ParticleType, offsetof(Particle, life)));
+ properties.push_back(StructProperty("ctype", StructProperty::ParticleType, offsetof(Particle, ctype)));
+ properties.push_back(StructProperty("x", StructProperty::Float, offsetof(Particle, x)));
+ properties.push_back(StructProperty("y", StructProperty::Float, offsetof(Particle, y)));
+ properties.push_back(StructProperty("vx", StructProperty::Float, offsetof(Particle, vx)));
+ properties.push_back(StructProperty("vy", StructProperty::Float, offsetof(Particle, vy)));
+ properties.push_back(StructProperty("temp", StructProperty::Float, offsetof(Particle, temp)));
+ properties.push_back(StructProperty("flags", StructProperty::UInteger, offsetof(Particle, flags)));
+ properties.push_back(StructProperty("tmp", StructProperty::Integer, offsetof(Particle, tmp)));
+ properties.push_back(StructProperty("tmp2", StructProperty::Integer, offsetof(Particle, tmp2)));
+ properties.push_back(StructProperty("dcolour", StructProperty::UInteger, offsetof(Particle, dcolour)));
+ return properties;
+ }
};
typedef struct Particle Particle;