removed todo file

This commit is contained in:
ZappoMan 2014-09-01 23:09:18 -07:00
parent ea22073ddc
commit fa5c2b9638

View file

@ -1,319 +0,0 @@
// REQUIRED:
http://highfidelity-public.s3-us-west-1.amazonaws.com/meshes/Feisar_Ship.FBX#1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
http://highfidelity-public.s3-us-west-1.amazonaws.com/meshes/newInvader16x16-large-purple.svo#1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
1) clock skew sometimes causes properties to get reject when sent from the server...
-- this appears to be related to clock skew!!!
-- need to determine "when to deleted extra data" --
2) edits not being sent???
7) some jutter with moving entities
-- I think this might only happen with lots of models in an element or in view
-- test lots of entities with the new suppress mode
10) What happens if the edit properties don't fit in a single message MTU???
12) Double check operators for these problems:
MovingEntitiesOperator has these issues:
- does the same pruning/reallocating issue as the old UpdateEntityOperator
- doesn't used clamped boxes for best fit tests... so could be problematic
// NICE TO HAVE:
1) clean up Octree::encodeTreeBitstreamRecursion() --
It would be nice to clean up this function to be shorter...
1015-1158 - helper functions "exit early helpers"
1200-1245 - helper function "sorted children"
1248-1376 - helper function "visible children" -
this handles LOD, occlusion, in view/was in view for child elements
NOTE: this information could be cached for secondary passes of the element
in the same scene encode since they shouldn't change in same scene encode
11) quickly do some edits... then change domains... watch the entities continue to exist in new domain and move around.
-- verify this happens in old code, if so... move to "nice to have"
-- maybe this relates to having incoming packets waiting in the processing queue... they should be discarded on switching domains?
Z) Consider using client side "on the fly" billboard of entites to handle LOD
-- have routine to shoot views of an entity for 6 faces
-- store those images in the entity on the client
-- based on camera position pick "closest" face of model
-- as LOD drops use those images instead of rendering the model
3) Make sure LOD logic honors the LOD settings for entities in "spanners/parent" cells.
-- network - don't SEND small entities even if their spanner cell is visible
-- if animation is stopped, changing frame doesn't update the simulation
why is _entityItems a pointer? why not just make it a member of EntityTreeElement....
1) EnterEntity/LeaveEntity JS messages
2) PROP_VISIBLE
3) PROP_SCRIPT
2) update and verify all particle examples to use new entity features
3) implement support for requestedProperties in appendEntityData() that only include CHANGED properties for the viewer...
4) unit tests?
5) make the rotated model bounds work for other entity types?
6) improve EntityItemProperties class to allow registration of new properties, and to be more generic
basic properties features use getter/setter....
all others use:
set('propertyName', value)... but... we need to know the type of value
setStringProperty('name', const QString& value);
QString getStringProperty('name');
setFloatProperty('name', float value);
float getFloatProperty('name');
7) Consider making properties of the entities be registered...
and handle their streaming in a more automatice fashion
DRY up the code, eliminate the common blocks for each differetn property
8) add user properties
9) implement "Light" entity, "Fire" entity?
10) LOD - we've never supported LOD in model server other than not recursing into nodes that can't be seen.
10a) LOD - at higher level nodes with entities that are small, handle don't include small entities for LOD setting would not have sent them.
10b) LOD - generalized "re-averaging"?
how can we allow an entity to present itself to a higher level as an average?
for models - we've talked about storing them as voxels...
for models - if we had access to mesh, we could use numerous mesh LOD algorithms out there
12) xColor vs rbgColor????
13) get rid of EntityItem::expectedBytes()...
14) consider moving the EntityTypes static Maps to be inside a singleton instance of EntityTypes to ensure initialization order
15) Why can't we call REGISTER_ENTITY_TYPE() in BoxEntityType.cpp or the CPP of the implementation?
16) crash on startup of client sometimes...
Thread 46 Crashed:: QThread
0 QtCore 0x000000010d189e47 QHashData::nextNode(QHashData::Node*) + 7
1 io.highfidelity.Interface 0x000000010bce2189 QHash<QUuid, EditPacketBuffer>::iterator::operator++(int) + 41 (qhash.h:378)
2 io.highfidelity.Interface 0x000000010bce109a OctreeEditPacketSender::releaseQueuedMessages() + 154 (OctreeEditPacketSender.cpp:306)
3 io.highfidelity.Interface 0x000000010bf17bb3 ScriptEngine::run() + 2099 (ScriptEngine.cpp:433)
4 io.highfidelity.Interface 0x000000010b97444e void QtPrivate::FunctionPointer<void (ScriptEngine::*)()>::call<void, void>(void (ScriptEngine::*)(), ScriptEngine*, void**) + 142 (qobjectdefs_impl.h:142)
5 io.highfidelity.Interface 0x000000010b97432a QtPrivate::QSlotObject<void (ScriptEngine::*)(), void, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) + 202 (qobject_impl.h:150)
6 QtCore 0x000000010d34383b QMetaObject::activate(QObject*, int, int, void**) + 2139
7 QtCore 0x000000010d12aba5 QThreadPrivate::start(void*) + 309
8 libsystem_pthread.dylib 0x00007fff8bb96899 _pthread_body + 138
9 libsystem_pthread.dylib 0x00007fff8bb9672a _pthread_start + 137
10 libsystem_pthread.dylib 0x00007fff8bb9afc9 thread_start + 13
-- crash on shutdown while animating...???
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 io.highfidelity.Interface 0x000000010cf99a6a EntityTree::updateChangingEntities(unsigned long long, QSet<EntityItemID>&) + 202
1 io.highfidelity.Interface 0x000000010cf998a6 EntityTree::update() + 70
2 io.highfidelity.Interface 0x000000010cb64a3e EntityTreeRenderer::update() + 62
3 io.highfidelity.Interface 0x000000010c9eb6ec Application::update(float) + 796
4 io.highfidelity.Interface 0x000000010c9f5e26 Application::idle() + 550
5 io.highfidelity.Interface 0x000000010c99f567 Application::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) + 1655
6 QtCore 0x0000000112474a30 QMetaObject::activate(QObject*, int, int, void**) + 2640
7 QtCore 0x000000011246d5c1 QObject::event(QEvent*) + 49
===============
// SOLVED - 1) crash in client assert on addEntity() assetting that not viewing???
// SOLVED - 2) when changing properties that include position OR radius, but not both the update logic gets confused.
// SOLVED - 3) in assignEntityID() we assert if the containing element exists... this is too harsh, what if someone sends us a bad packet
// -- fixed this by only storing assigned IDs in the server's ID base
// SOLVED - 4) problem here... looks like the client got confused and sent us an unknown edit packet with a creator token id we already had...
// we probably can't keep the creator tokens in our server tree or else we'll collide between multiple editors!!
// -- fixed this by only storing assigned IDs in the server's ID base
// SOLVED - 5) fix all places where "Voxels" turns off some features of models/entities
// SOLVED - 6) duplicate copies of entity references in the elements... this appears to be caused when "viewing" while editing...
// SOLVED - 7) Handle the newer on client vs changed on server problem properly for entities
// SOLVED - 8) Verified that multiple machines viewing real time edits works - fixed bugs in lastEdited.
// SOLVED - 9) entities have same ID? unknown??? - wasn't setting ID on read from buffer...
// SOLVED - 10) crash in entity server on add entity?
// SOLVED - 11) addOrUpdateEntity()
// SOLVED - 12) enable animation in model class
// SOLVED - 13) change ID's to UUIDS????
// SOLVED - 14) sometimes assert/crashes in server about containing element? I think we're adding entityIDs with UNKNOWN_ID to our maps
// this crash is definitely caused by starting a server with an existing models file which has ID's already in use...
// SOLVED - 15) change EntityTree::handleAddEntityResponse() to not scan entire tree... it can use the containing element stuff!!!
// SOLVED - 16) TODO: do we need to handle "killing" viewed entities as well???
// void EntityTreeElement::updateEntityItemID(const EntityItemID& creatorTokenEntityID, const EntityItemID& knownIDEntityID)...
// SOLVED - 17) move to EntityItemProperties
// EntityItem::encodeEntityEditMessageDetails()
// EntityTypes::decodeEntityEditPacket()
// SOLVED - 18) handle sublass appendEntityData() and readEntityItemIDFromBuffer() similar to how we
// handle setProperty()/getProperty() so that each subclass doesn't have to completely reimplement
// the entire base class data stream...
// SOLVED - 19) implement support for requestedProperties in appendEntityData() to be virtual to handle various subclasses
// SOLVED - 20) add velocity, gravity, damping to entity base class
// SOLVED - 21) EntityTree::update()/EntityTreeElement::update()... velocity changes...
// SOLVED - 22) verify "update" works
// SOLVED - 23) crash/assert when you move an entity out of domain bounds???
// SOLVED - 24) UNEXPECTED -- OctreeElement::getMyChildContaining() cubeScale=[0.000012] > ourScale=[0.000004]
// SOLVED - 25) what about??? rememberDirtyCube()... -- removed it... not needed
// SOLVED - 26) what about editing/edit messages... moved to EntityItemProperties...
// EntityItem::encodeEntityEditMessageDetails() -- this could be a member of EntityItemProperties
// EntityTypes::decodeEntityEditPacket() -- this could be a member of EntityItemProperties
// SOLVED - 27) change delete to use delete messages instead of shouldBeDeleted property
// SOLVED - 27a) make sure server is deleting items??
// SOLVED - 27b) Use the delete message instead of shouldDelete property
// SOLVED -- problem 1:
// it appears as if on a second pass on the element a DONT_FIT case occurs and this confuses things...
// SOLVED -- problem 2:
// sometimes it appears as if the element entities mostly fit, but then the extra data (bit masks) fails
// to fit and in this case the "extra data" gets confused...
// maybe remember the extra state before removing it and if it fails, always re-add it
// maybe add support for "reserving" bytes in the packet
// SOLVED -- 28) BROKEN File persistence... -- added chunking support in SVO file persistence.
// SOLVED -- 29) why does is the Box entity not drawn in it's bounds
// SOLVED -- 30) render performance of models...
// SOLVED -- a) make getModel() faster... consider storing the Model* in the actual EntityItem class
// SOLVED -- b) only call simulate when properties change
// SOLVED -- 31) verify lots of models in single element works
// -- repro case - run editModelsExample.js -- create 10 models in the same octree element
// SOLVED -- 32) support sitpoints and referentials....
// SOLVED -- 33) Referentials -- working as well as master
// For sitting points and referentials you can kill two birds with one stone.
// Put this model in world: http://highfidelity-public.s3-us-west-1.amazonaws.com/ozan/theater.fst
// Launch sit.js
// See sitting points
// Sit somewhere
// Move model with another avatar.
// Observe first avatar moving.
// SOLVED -- 34) verify shadows work
// SOLVED -- 35) Handle the ID -> UUID swap in old files to new files - verify old files read correctly
// SOLVED -- 36) Test models -> attachments logic --- TESTED/WORKS
// SOLVED -- 37) Import/Export Models - verify it works. /copy/paste??
// DONE -- 37d) void ModelTree::findModelsInCube(const AACube& cube, QVector<ModelItem*>& foundModels)...
// DONE -- 37e) void ModelTreeElement::getModelsInside(const AACube& box, QVector<ModelItem*>& foundModels)...
// DONE -- 37f) Application::exportEntities() tested/works
// DONE -- 37g) Application::pasteEntities() tested/works
// DONE -- 37c) void ModelTree::sendModels(ModelEditPacketSender* packetSender, float x, float y, float z)....
// bool EntityTree::sendEntitiesOperation(OctreeElement* element, void* extraData) {...
// RESOLVED -- 37a) void ModelItemProperties::copyFromNewModelItem(const ModelItem& modelItem); // Do we need this? NO!
// WORKS AS PRODUCTION -- 37b) Local Entities Overlay - from Local Models Overlay
// Note: there's a bug in production related to the overlay correctly rendering when
// the original (non-translated positions) of the models are out of view. This is a bug
// not introduced byt this PR.
// SOLVED -- 38) Make sure EntityItems are deleted...
// delete all entity items on deletion of the tree?
// cases:
// PASSED -- 1) test UI delete entity (on client)
// PASSED -- 2) test UI delete entity (on server)
// PASSED --- 7) test UI delete on other client
// PASSED --- 3) test client shutdown
// PASSED --- 4) test server shutdown (on server)
// PASSED --- a) click X on domain page
// PASSED --- b) shutdown domain server
// PASSED --- 6) test change domains
// SAME AS PRODUCTION - 5) test server shutdown (on client) - models aren't deleted when model server goes away
// SOLVED -- 39) EntityTreeRenderer::clearModelsCache() - Model instance cleanup handled in ~RenderableModelEntityItem
// SOLVED -- 40) Lifetime, Age, Created
// DONE - * support created timestamp in all entities
// DONE - * handle old model files with no created time stamp
// DONE - * add age, ageAsText properties for scripting
// DONE - * make sure that entities that expire are correctly deleted safely
// DONE - * make sure that deleting a mortal but not yet dead entity works
// DONE - * make sure that newly "viewed" entities are correctly added to our simulation lists: mortal, changing, moving
// SOLVED -- 41) clear all entities when changing domains?
// SOLVED -- 42) Crash in delete model - deleting the geometry...
// SOLVED -- 43) Moving models don't always move.. I think this relates to the render optimization...
// need to make sure we re-simulate when a model is moving...
// SOLVED -- 44) if velocity sends a model out of the domain - delete it
// SOLVED -- 45) Don't allow models to be "edited" to be outside of domain. clamp them to the domain. - clamp it baby!!
// SOLVED -- 46) random crashes on moving --
// FIXED - bug in PossiblyCreateChildAt for clamped entities - new entity not added.
// FIXED - Assertion failed: (!_removeOld), function PreRecursion, file /Users/zappoman/Development/HiFi/hifi/libraries/entities/src/UpdateEntityOperator.cpp, line 234
// -- what appears to be happening is that the containing elements memory location is getting reused
// -- 1) the OLD containing element was found first,
// -- 2) the entity was removed
// -- 3) the containing element got pruned
// -- 4) the NEW branch is traversed and PossiblyCreateChildAt creates a new element -- THAT HAS SAME POINTER AS CONTAINING ELEMENT!!!!
// -- 5) the logic for recursedelement == _containingElement gets confused
// SOLVED -- 47) crash on rendering of element that flies off the domain
// -- root cause was an UpdateEntityOperator that left two copies of the entity in the tree
// this was caused by the original element that the entity was in (according to the server)
// was not actually the best fit. it's not clear how this happened, but we can protect
// against it in the update operator if it does happen again. This made update operator more robust.
// SOLVED -- 48) server and client definitley not adding entities to proper update lists on load... only on change...
// SOLVED -- 49) test animation again...
// FIXED -- This looks like it was all related to members not being initialized...
// FIXED -- animations don't appear on all viewers
// FIXED -- animations are on different frames -- the data suggest they are the same frame number from a simulation perspective
// SOLVED -- 50) Verify pruning logic...
// SOLVED -- 51) LOD for rendering - don't render small entities even if their spanner cell is visible
// SOLVED -- 52) Look into why non-changed octree cells are being resent when editing an entity --
// this is probably because we're marking the trees as dirty -- but we probably can not send entitys that haven't changed
// Solution -- suppress sending of entities that haven't been edited since the last view frustum sent
// SOLVED -- 53) Test sibling cells
---------------- properties -----------------
Base properties...
* type
* position
* size/radius/bounds?? maybe correct is x,y,z scales
* rotation
* script
* velocity
* gravity
* damping
* mass
* glow level
* lifetime
* age
should these be included for all entities? Light, Models, planes, etc?
* rotational velocity? - wouldn't that be cool to be automatic with no edits
* rotational damping?? - can you slow a quat rotation by simply multiplying it by a fraction?
* color??
Primitive Object Properties:
* color?
* texture?
Model properties:
void setModelURL(const QString& url)
void setAnimationURL(const QString& url)
void setAnimationFrameIndex(float value)
void setAnimationIsPlaying(bool value)
void setAnimationFPS(float value)
void setSittingPoints(QVector<SittingPoint> sittingPoints) ??? - should this just be a string property???