removing of created timestamp from wire format, still supports lifetime

This commit is contained in:
ZappoMan 2013-12-18 17:43:48 -08:00
parent 8b1c39a471
commit c68a226094
3 changed files with 40 additions and 33 deletions

View file

@ -36,7 +36,6 @@ Particle::~Particle() {
void Particle::init(glm::vec3 position, float radius, rgbColor color, glm::vec3 velocity, glm::vec3 gravity, void Particle::init(glm::vec3 position, float radius, rgbColor color, glm::vec3 velocity, glm::vec3 gravity,
float damping, bool inHand, QString updateScript, uint32_t id) { float damping, bool inHand, QString updateScript, uint32_t id) {
if (id == NEW_PARTICLE) { if (id == NEW_PARTICLE) {
_created = usecTimestampNow();
_id = _nextID; _id = _nextID;
_nextID++; _nextID++;
} else { } else {
@ -45,7 +44,8 @@ void Particle::init(glm::vec3 position, float radius, rgbColor color, glm::vec3
uint64_t now = usecTimestampNow(); uint64_t now = usecTimestampNow();
_lastEdited = now; _lastEdited = now;
_lastSimulated = now; _lastSimulated = now;
_created = now; // will get updated as appropriate in setLifetime()
_position = position; _position = position;
_radius = radius; _radius = radius;
memcpy(_color, color, sizeof(_color)); memcpy(_color, color, sizeof(_color));
@ -64,7 +64,7 @@ bool Particle::appendParticleData(OctreePacketData* packetData) const {
//printf("Particle::appendParticleData()... getID()=%d\n", getID()); //printf("Particle::appendParticleData()... getID()=%d\n", getID());
if (success) { if (success) {
success = packetData->appendValue(getCreated()); success = packetData->appendValue(getLifetime());
} }
if (success) { if (success) {
success = packetData->appendValue(getLastEdited()); success = packetData->appendValue(getLastEdited());
@ -101,9 +101,17 @@ bool Particle::appendParticleData(OctreePacketData* packetData) const {
} }
int Particle::expectedBytes() { int Particle::expectedBytes() {
int expectedBytes = sizeof(uint32_t) + sizeof(uint64_t) + sizeof(uint64_t) + sizeof(uint64_t) + sizeof(float) + int expectedBytes = sizeof(uint32_t) // id
sizeof(glm::vec3) + sizeof(rgbColor) + sizeof(glm::vec3) + + sizeof(float) // lifetime
sizeof(glm::vec3) + sizeof(float) + sizeof(bool); + sizeof(uint64_t) // lastedited
+ sizeof(float) // radius
+ sizeof(glm::vec3) // position
+ sizeof(rgbColor) // color
+ sizeof(glm::vec3) // velocity
+ sizeof(glm::vec3) // gravity
+ sizeof(float) // damping
+ sizeof(bool); // inhand
// potentially more...
return expectedBytes; return expectedBytes;
} }
@ -117,10 +125,12 @@ int Particle::readParticleDataFromBuffer(const unsigned char* data, int bytesLef
dataAt += sizeof(_id); dataAt += sizeof(_id);
bytesRead += sizeof(_id); bytesRead += sizeof(_id);
// created // lifetime
memcpy(&_created, dataAt, sizeof(_created)); float lifetime;
dataAt += sizeof(_created); memcpy(&lifetime, dataAt, sizeof(lifetime));
bytesRead += sizeof(_created); dataAt += sizeof(lifetime);
bytesRead += sizeof(lifetime);
setLifetime(lifetime);
// _lastEdited // _lastEdited
memcpy(&_lastEdited, dataAt, sizeof(_lastEdited)); memcpy(&_lastEdited, dataAt, sizeof(_lastEdited));
@ -207,16 +217,14 @@ Particle Particle::fromEditPacket(unsigned char* data, int length, int& processe
processedBytes += sizeof(creatorTokenID); processedBytes += sizeof(creatorTokenID);
newParticle.setCreatorTokenID(creatorTokenID); newParticle.setCreatorTokenID(creatorTokenID);
newParticle._newlyCreated = true; newParticle._newlyCreated = true;
newParticle.setLifetime(0); // this guy is new!
} else { } else {
newParticle._id = editID; newParticle._id = editID;
newParticle._newlyCreated = false; newParticle._newlyCreated = false;
} }
// created
memcpy(&newParticle._created, dataAt, sizeof(newParticle._created));
dataAt += sizeof(newParticle._created);
processedBytes += sizeof(newParticle._created);
// lastEdited // lastEdited
memcpy(&newParticle._lastEdited, dataAt, sizeof(newParticle._lastEdited)); memcpy(&newParticle._lastEdited, dataAt, sizeof(newParticle._lastEdited));
dataAt += sizeof(newParticle._lastEdited); dataAt += sizeof(newParticle._lastEdited);
@ -279,7 +287,7 @@ Particle Particle::fromEditPacket(unsigned char* data, int length, int& processe
void Particle::debugDump() const { void Particle::debugDump() const {
printf("Particle id :%u\n", _id); printf("Particle id :%u\n", _id);
printf(" created:%llu\n", _created); printf(" lifetime:%f\n", getLifetime());
printf(" last edited:%llu\n", _lastEdited); printf(" last edited:%llu\n", _lastEdited);
printf(" position:%f,%f,%f\n", _position.x, _position.y, _position.z); printf(" position:%f,%f,%f\n", _position.x, _position.y, _position.z);
printf(" velocity:%f,%f,%f\n", _velocity.x, _velocity.y, _velocity.z); printf(" velocity:%f,%f,%f\n", _velocity.x, _velocity.y, _velocity.z);
@ -312,7 +320,6 @@ bool Particle::encodeParticleEditMessageDetails(PACKET_TYPE command, int count,
sizeOut += lengthOfOctcode; sizeOut += lengthOfOctcode;
// Now add our edit content details... // Now add our edit content details...
uint64_t created = usecTimestampNow();
// id // id
memcpy(copyAt, &details[i].id, sizeof(details[i].id)); memcpy(copyAt, &details[i].id, sizeof(details[i].id));
@ -325,15 +332,8 @@ bool Particle::encodeParticleEditMessageDetails(PACKET_TYPE command, int count,
memcpy(copyAt, &details[i].creatorTokenID, sizeof(details[i].creatorTokenID)); memcpy(copyAt, &details[i].creatorTokenID, sizeof(details[i].creatorTokenID));
copyAt += sizeof(details[i].creatorTokenID); copyAt += sizeof(details[i].creatorTokenID);
sizeOut += sizeof(details[i].creatorTokenID); sizeOut += sizeof(details[i].creatorTokenID);
} else {
created = 0;
} }
// created
memcpy(copyAt, &created, sizeof(created));
copyAt += sizeof(created);
sizeOut += sizeof(created);
// lastEdited // lastEdited
memcpy(copyAt, &details[i].lastEdited, sizeof(details[i].lastEdited)); memcpy(copyAt, &details[i].lastEdited, sizeof(details[i].lastEdited));
copyAt += sizeof(details[i].lastEdited); copyAt += sizeof(details[i].lastEdited);
@ -413,7 +413,7 @@ void Particle::update() {
bool isInHand = getInHand(); bool isInHand = getInHand();
bool shouldDie = !isInHand && !isStillMoving && isReallyOld; bool shouldDie = !isInHand && !isStillMoving && isReallyOld;
setShouldDie(shouldDie); setShouldDie(shouldDie);
runScript(); // allow the javascript to alter our state runScript(); // allow the javascript to alter our state
// If the ball is in hand, it doesn't move or have gravity effect it // If the ball is in hand, it doesn't move or have gravity effect it
@ -465,3 +465,8 @@ void Particle::runScript() {
} }
} }
} }
void Particle::setLifetime(float lifetime) {
uint64_t lifetimeInUsecs = lifetime * USECS_PER_SECOND;
_created = usecTimestampNow() - lifetimeInUsecs;
}

View file

@ -67,8 +67,10 @@ public:
const glm::vec3& getGravity() const { return _gravity; } const glm::vec3& getGravity() const { return _gravity; }
bool getInHand() const { return _inHand; } bool getInHand() const { return _inHand; }
float getDamping() const { return _damping; } float getDamping() const { return _damping; }
uint64_t getCreated() const { return _created; }
uint64_t getLifetime() const { return usecTimestampNow() - _created; } /// lifetime of the particle in seconds
float getLifetime() const { return (float)(usecTimestampNow() - _created) / (float)USECS_PER_SECOND; }
uint64_t getLastEdited() const { return _lastEdited; } uint64_t getLastEdited() const { return _lastEdited; }
uint32_t getID() const { return _id; } uint32_t getID() const { return _id; }
bool getShouldDie() const { return _shouldDie; } bool getShouldDie() const { return _shouldDie; }
@ -91,7 +93,7 @@ public:
void setShouldDie(bool shouldDie) { _shouldDie = shouldDie; } void setShouldDie(bool shouldDie) { _shouldDie = shouldDie; }
void setUpdateScript(QString updateScript) { _updateScript = updateScript; } void setUpdateScript(QString updateScript) { _updateScript = updateScript; }
void setCreatorTokenID(uint32_t creatorTokenID) { _creatorTokenID = creatorTokenID; } void setCreatorTokenID(uint32_t creatorTokenID) { _creatorTokenID = creatorTokenID; }
void setCreated(uint64_t created) { _created = created; } void setLifetime(float lifetime);
bool appendParticleData(OctreePacketData* packetData) const; bool appendParticleData(OctreePacketData* packetData) const;
int readParticleDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args); int readParticleDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args);
@ -144,8 +146,8 @@ public slots:
float getDamping() const { return _particle->getDamping(); } float getDamping() const { return _particle->getDamping(); }
float getRadius() const { return _particle->getRadius(); } float getRadius() const { return _particle->getRadius(); }
bool getShouldDie() { return _particle->getShouldDie(); } bool getShouldDie() { return _particle->getShouldDie(); }
float getCreated() const { return ((float)_particle->getCreated() / (float)USECS_PER_SECOND); } //float getCreated() const { return ((float)_particle->getCreated() / (float)USECS_PER_SECOND); }
float getLifetime() const { return ((float)_particle->getLifetime() / (float)USECS_PER_SECOND); } float getLifetime() const { return _particle->getLifetime(); }
void setPosition(glm::vec3 value) { _particle->setPosition(value); } void setPosition(glm::vec3 value) { _particle->setPosition(value); }

View file

@ -127,12 +127,12 @@ bool ParticleTreeElement::updateParticle(const Particle& particle) {
debug::valueOf(particle.isNewlyCreated()) ); debug::valueOf(particle.isNewlyCreated()) );
} }
uint64_t actuallyCreated = particle.getCreated(); float actualLifetime = particle.getLifetime();
if (!particle.isNewlyCreated()) { if (!particle.isNewlyCreated()) {
actuallyCreated = _particles[i].getCreated(); actualLifetime = _particles[i].getLifetime();
} }
_particles[i] = particle; _particles[i] = particle;
_particles[i].setCreated(actuallyCreated); _particles[i].setLifetime(actualLifetime);
} else { } else {
if (wantDebug) { if (wantDebug) {
printf(">>> NO CHANGE <<< -- local particle [id:%d] %s particle.isNewlyCreated()=%s\n", printf(">>> NO CHANGE <<< -- local particle [id:%d] %s particle.isNewlyCreated()=%s\n",