Skip to main content

Spawning Templates and Refining Snap-Points

This past week saw the development of a component for spawning in pieces of furniture with their snap-points already attached (~4 hours), as well as an improvement on the snapping system that removed strange physics behaviour from joined components and increased maintainability (~6 hours).  Unfortunately the week was also busy there was less progress on the code than I had hoped for.

 Since there will be a lot of different pieces that could be spawned by either the Finder or Builder in the course of a game we needed some way of quickly creating the entities with their snap-point already placed, and they had to be identical for both players.  The solution I found involves the aframe-template-component, which allows an entity to pull child elements and attributes from an external storage file.  The below code demonstrates the implementation of a template file.

<a-mixin id="wing" geometry="primitive: box; depth: .005; height: 1; width: 0.5"
                   pivot="0.15 0" material="color: red" scale="0.5 0.625 0.5"> 
</a-mixin>
<a-mixin id="flap" attribute="rotation" direction="alternate" repeat="indefinite">
 </a-mixin>

<a-entity position="{{ position }}">
  <a-animation attribute="rotation" to="0 360 0" dur="3000"
               easing="linear" repeat="indefinite"></a-animation>
  <a-entity rotation="0 90 0" position="2.5 -1 0">
    <a-entity rotation="-45 0 90">
      <a-entity mixin="wing">
        <a-animation mixin="flap" to="0 120 10"></a-animation>
      </a-entity>
    </a-entity>
    <a-entity rotation="-45 0 90">
      <a-entity mixin="wing">
        <a-animation mixin="flap" to="0 -120 10"></a-animation>
      </a-entity>
    </a-entity>
  </a-entity>
</a-entity>

This template file can then be added in the <a-assets> tag and applied to an entity like so:


        <script id="butterflies" src="butterflies.template">
              <a-entity template="src: butterfly.template; type: handlebars"
                        data-position="{{ x * 10 }} 1 {{ z * 10 }}"></a-entity>
        </script>

I do want to see if the templates can be stored in a .json file to reduce the number of files we need to create.

Additionally, I implemented a 'tier' property on the snap-point component that is used to indicate the piece's child/parent relationship to the rest of the furniture pieces.  This replaces the "isParent" boolean that was originally used to indicate which piece was the parent.  This new property allows for more complex parent/child structures.

With the beta deadline fast approaching the next week will see a dramatic ramp up in the work being completed.

Comments

Popular posts from this blog

[WEEK 1] Introducing our project...

Our goal is to make a cool VR game for Design Studio 3. The main idea involves a collaborative asymmetrical experience to build furniture virtually. There will be two roles in this game: a finder (to look for furniture pieces in the warehouse), and a builder (putting the parts together). We started this project on January 22, 2020 and are currently on our first 1 week sprint of development.

Sprint 10 - Adding more boxes and lots of scripting

As the final submission draws near, lots of work has yet to be done. Due to time constraints and the lack of resources in light of recent events, we made the decision to cut down our scope by removing VR functionality entirely and focus on desktop-to-desktop connection fully. With new goals in mind, I spent the beginning of the week by adding all the boxes for spawning furniture components. To do so, I started by replacing the blue boxes we used previously with stylised boxes that match the environment better. To tell the player what each box contains, an image of the rendered component is placed on each side. The challenge here was that I wanted to avoid creating a GLTF for every single box because it would have slowed down the page drastically. The solution was to instead use a single, universal GLTF for every box and placed images on each side of the box as explained previously (~6hrs). New Warehouse Area - Added new boxes Close up of updated box - Bright colours and side

Storyboard and Physical Layout

I finished up on some graphical elements for the user interaction specification component of the proposal due this coming Friday. This includes the storyboard panels and the physical layout diagram. As I was researching Oculus Rift physical setups, I had to determine how many sensors we would need for our game. I believe that 2 sensors will be sufficient, since we do not need a true 360 degrees experience as the Builder player will primarily be focused on the 180 degree space in front of them (i.e. the fireplace, the TV, and building the furniture). Our game is not an action packed game with any running or shooting. Of course, the player will still be able to fully look around but they shouldn't have a great need to move in the other 180 degrees of space. This would also take into consideration accessibility to our game, because it costs extra to buy a third sensor (the Rift only comes with 2) as well as requiring adapters and wire extensions. I spent about 4 hours researching