Skip to main content

Polishing Snapping and Spawning Objects

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. 

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

Popular posts from this blog

[FINAL] - Where to find our game

Hello future builders, we're 3 programmer-artists that make up the Seismic Octopus team: Mitchell Koch - lead programmer, game tester, researcher  Priscilla Lo - project manager, sound design, lead 2D artist, programmer, documentation  Maxime Vincent - lead 3D artist, lighting designer, game tester We finished this course in May 2020 with a final release of Build-a-Furniture available on GitHub: https://github.com/Areizza/Build-a-Furniture Although this semester was full of hardships and unprecedented times near the end, we got through it together and are proud to present our simple web-VR game. Check it out and let us know what you think! :)

Catalogue, Sound Effects, JSON for Instructions

This week I updated the image for the catalogue and added it to the Living Room environment as an image plane (~2hrs). I am currently adding smaller clickable planes on top of it to represent the different furniture options to choose to build. A screenshot of this can be seen below. I also looked for some sound effects to use for user feedback (~2hrs) when pieces are combined together correctly, incorrectly, pieces are dropped, etc. These sound files have been added to the shared drive and will be implemented in the code in the next few days. Some example sounds can be listened to at the following links: https://freesound.org/people/NenadSimic/sounds/150879/ https://freesound.org/people/grunz/sounds/109662/ https://freesound.org/people/GabrielAraujo/sounds/242501/ https://freesound.org/people/kirbydx/sounds/175409/  I also worked on adding JSON for the builder.js and finder.js files to store the required information for the instructions (~1hr). An example o...

Making Instructions

This week, I worked on creating all the instructions images for both the Warehouse and the Living Room. Although this was not a very difficult task, it was tedious to work on and took around 3hrs to complete. It was a challenge to adjust to our new schedules given the current circumstances and allot appropriate time to spend on each of our classes. The instructions in the Living Room show the current required furniture pieces and their quantities, which the Builder will need to communicate to the Finder in the Warehouse. See below for an example of pieces required for a table. On the other hand, the instructions in the Warehouse would show the symbols on the different furniture pieces that should touch in order to be combined, which the Finder will need to communicate to the Builder in the Living Room. See below for an example where the green heart marking should be made to touch the green circle marking. I will be putting the source link for these instructions into arr...