Finishing the alpha prototype made up the majority of the work completed this week (~20 hours), but even after the alpha presentation there was still some more work and polishing to do with snapping components together (~4 hours), and then work began on dynamically spawning modular furniture (~2 hours) pieces and that will be the focus of this coming week.
Creating the snapping functionality we desired for our alpha prototype proved to be quite the challenge, and this was not because of the logic or technical requirements behind snapping objects, but rather due to some limitations of the A-Frame Physics System library. Before going into these limitations I will go over the two approaches taken to try and create this functionality.
The original approach was to take the smaller piece that was attached parent it to the larger object, and then apply translations to the piece to line it up correctly. However, in practice sometimes the transformations would not apply to the component and it would remain positioned the same way it was originally attached, and the rest of the time A-Frame itself would crash, which is not ideal.
The second approach was to clone the object being attached, use the clone as the attachment, and delete the original part. In practice, the clone was not a full clone and did not partake in the physics system, so was not solid, and trying to delete the original component in any fashion caused A-Frame to crash.
An inordinate amount of time was spent trying to interpret the error and warnings messages thrown by A-Frame the Physics library and Three.js, but eventually, through much trial and error, I was able to determine the crashes occurred were because the physics system does not now how to handle dynamic objects that are removed while undergoing collisions, and transformations were not applying to attached parts because the physics system would override the new values. In the end, the prototype used the cloning method and the old part was just hidden. The current build uses the first method, but there is still some fine tuning to do.
I tried to record an example of the alpha prototype in action, but for some reason my screen capture software cannot record a browser window that has the mouse captured. Instead here is an image of the partially completed table.
The snapping functionality should be the biggest technical hurdle, so with luck the rest will be smoother sailing, but we all now that is not how software development works.
Creating the snapping functionality we desired for our alpha prototype proved to be quite the challenge, and this was not because of the logic or technical requirements behind snapping objects, but rather due to some limitations of the A-Frame Physics System library. Before going into these limitations I will go over the two approaches taken to try and create this functionality.
The original approach was to take the smaller piece that was attached parent it to the larger object, and then apply translations to the piece to line it up correctly. However, in practice sometimes the transformations would not apply to the component and it would remain positioned the same way it was originally attached, and the rest of the time A-Frame itself would crash, which is not ideal.
The second approach was to clone the object being attached, use the clone as the attachment, and delete the original part. In practice, the clone was not a full clone and did not partake in the physics system, so was not solid, and trying to delete the original component in any fashion caused A-Frame to crash.
An inordinate amount of time was spent trying to interpret the error and warnings messages thrown by A-Frame the Physics library and Three.js, but eventually, through much trial and error, I was able to determine the crashes occurred were because the physics system does not now how to handle dynamic objects that are removed while undergoing collisions, and transformations were not applying to attached parts because the physics system would override the new values. In the end, the prototype used the cloning method and the old part was just hidden. The current build uses the first method, but there is still some fine tuning to do.
I tried to record an example of the alpha prototype in action, but for some reason my screen capture software cannot record a browser window that has the mouse captured. Instead here is an image of the partially completed table.
How the game appeared for the alpha. |
The snapping functionality should be the biggest technical hurdle, so with luck the rest will be smoother sailing, but we all now that is not how software development works.
Comments
Post a Comment