The Builder system keeps track of which piece of furniture is being built, what step the Builder is on in the build process, as well as how many steps there are to complete the furniture. Every time a piece is successfully snapped an event is emitted by the scene element and the Builder system picks this up, increments the current step, checks if the furniture is complete, and emits a Socket.io event that informs the Finder what the next piece is or that the furniture is complete. This system also listens for a Socket.io 'shipping' event from the Finder and uses the data passed to create the new piece in the Builder's environment.
A table leg appearing in the living room after being shipped by the Finder. The builder clicks on the box, and the table leg appears. |
The Finder system works in conjunction with a 'shipping' component attached to the shipping platform seen in the picture below. When a furniture piece collides with the shipping platform the shipping component checks with the Finder system whether it is the correct piece; if it is the Finder component then emits a Socket,io event containing the piece id. The Builder system listens for this event and creates the piece from the id, as stated above.
The placeholder shipping platform and a table leg in the warehouse. The Finder drops the table leg on the platform and if it is the correct piece it gets 'shipped'. |
The code below demonstrates the process shipping component uses to determine whether the collided piece needs to be shipped or not.
el.addEventListener('hitstart', function (event) { for (var i = 0; i < event.detail.intersectedEls.length; i++) { let targetEl = event.detail.intersectedEls[i]; if (targetEl.classList.contains(system.data.requiredPiece)) { // If the dropped piece is the one we are looking for, remove this instance // and emit the sendPiece event for the Builder. el.sceneEl.removeChild(targetEl); socket.emit('sendPiece', { pieceId: system.data.requiredPiece, }); } else { // If not, launch the piece back at the player. targetEl.body.velocity.set(-5, 6, 0); } } });
At the moment the values for the number of steps and the pieces required for each step are still hard coded, one job for this next week is to implement a process that allows the systems to pull this information from a database depending on the furniture selected, and I will be working with Priscilla to complete this. I would also like get game controller supported.
Comments
Post a Comment