Skip to main content

Aframe Systems and Networked-Aframe

This week saw less direct contribution to the project, and had a greater testing and learning component to it.  Most of my time in the past week was devoted to a different Aframe project that involved a multi-user interaction with a cooperative and competitive component.  I used this project as a guinea pig to test out Networked-Aframe and some more 'advanced' Aframe design patterns (~25 hours).

Networked-Aframe is a framework built on top of Aframe that integrates WebSockets and component syncing to streamline the process of creating multi-user Aframe projects.  The main feature of Networked-Aframe we are interested in was the voice chat support, as we feel it could be a great feature to have for playing the game with friends remotely.  However, I also set out to see if there are other features in the framework that could be useful in developing our project.  An element I did find useful was component syncing, which uses HTML <template/> tags to create entities that have their components synced across all clients.  Only the 'position' and 'rotation' components are synced by default, but implementing custom components is quite simple, as shown below.

NAF.schemas.add({
  template: '#avatar-template',
  components: [
    'position',
    'rotation',
    'scale',
    {
      selector: '.hairs',
      component: 'show-child'
    },
    {
      selector: '.head',
      component: 'material',
      property: 'color'
    },
  ]
});  

The above code, taken from the Networked Aframe GitHub, shows the implementation for syncing the custom 'show-child' component, as well as the 'material' component.  However, due to the nature of our project, where each player will be in their own environment and will not need synced entities, using Networked Aframe just for voice chat may be overkill.

Finally, I also took the time to experiment with the Aframe systems element.  Systems provide overarching management and services to the entire application, and they are often used to manage the game state or NPC elements of games.  These systems rely on events to communicate with various components in the application.  My first attempt was not wholly successful, but I figured out a lot of does-and-don'ts for when it comes time to implement such systems in Build-A-Furniture

Comments

Popular posts from this blog

Building the Shelf and Chairs

With the final submission looming closer, most of my effort was directed at replacing some hard-coded game-play functionality with dynamic data from the Builder and Finder systems (~3 hours), assisting my team with issues they encountered (~2-3 hours), and getting the shelf and chair ready to be built by the players (~8 hours). The Builder and Finder systems still had a few hard-coded values from the Beta build of the project that were specific to constructing the table, so I worked on replacing those with the data that is contained in the instructions arrays that Priscilla and Maxime created this week.  I was initially have problems accessing this array before I discovered that JavaScript arrays can be accessed by string, which simplified it a lot.  Below is an example of the before and after of this process. // Before socket . on ( 'setFurn' , function ( data ) { this . current = data . id ; // Where data.id was always "table" this . step = ...

[WEEK 6] Back from Reading Week

We got back from Reading Week and reviewed what each of us accomplished. Expected deliverables for this week include: moodboards for the Living Room and the Warehouse, basic recolouring for the Living Room, a completed final Warehouse environment, and a working spawning objects prototype.

JavaScript Libraries and Flow Charts

This sprint we focused on the laying the groundwork for the project and writing the design document.   For the design document, I outlined the Technical Requirements, Technical Features, Interaction Features, and created a user experience flow chart (~4-5 hours).   The rest of the sprint was spent testing the JavaScript packages we plan to, or are interested in, implementing in the project (~4-6 hours).    Creating the user experience flow chart took a few iterations as we weren’t certain of the final gameplay.   The current version is fairly linear, but the gameplay is straight forward to make it easy to pick up and play.    A part of the final user experience flow chart. The packages I tested for our project were aframe-extras , aframe-physics , and aframe-click-drag-component .   ‘Extras’, as the name suggests, adds some extra functionality to A-Frame, including controller support, ‘Physics’ adds a physics system, while ‘C...