Skip to content

Floor Buttons

Brianna Jones edited this page Oct 5, 2021 · 10 revisions

Design

These buttons were originally proposed to be on the floor of a level, so the animation above is based upon this notion. There are plans to implement wall-based buttons also in future sprints; it is believed these will have the same functionality but with a different texture (e.g. levers).

This button used a similar colour scheme to the jump pad, wherein the object glows light-blue when active to visually display it's success. It was noted by the team that the button should press down with little effort, while the button reset should be slightly more delayed.

Cables or 'veins' were also added to the base of the button, this was to show the flow of power (light-blue colouring) from the button to the floor. It was assumed this allowed the user to see the connection between a button and it's corresponding action.

Implementation

The button entities are all mapped to a specific bridge or portal entities which, after the button is pressed, are made able or unable to be collided with. The buttons are mapped to the closest bridge or portal when the level is created as to avoid any scenarios where a button early in the level is mapped to a bridge/portal late in the level and it prevents the player from being able to progress through the level.

This functionality is handled in both the LevelGameArea and PlayerMovementComponent classes. All buttons are created with an InteractableComponent which is a dummy component that acts as an indicator to the mapInteractables function in the LevelGameArea class and the onCollisonStart function that the entity is an interactable entity. An interactable entity is one that is able to be interacted with at any point in the game and whose state doesn't change when interacted with. As of now, buttons can only be pressed once to trigger bridge/portal state changes.

As mentioned, button entities will be mapped to the closest bridge or portal entity in the mapInteractables function. The ArrayList<ObstacleEntity> mappedSubInteractables will hold these mappings to be used by the onCollisionStart function in the PlayerMovementComponent class. If onCollisionStart is provided a fixture with an InteractableComponent, it will retrieve the mapped bridge or portal and toggle whether the entity is a sensor of not.

public void mapInteractables() {
      // list of all buttons in order of creation
      ArrayList<ObstacleEntity> buttons = new ArrayList<>();

      //list of all doors and bridges in order of creation
      ArrayList<ObstacleEntity> subInteractables = new ArrayList<>();

      for (int i = 0; i < obstacleEntities.size(); i++) {
        ObstacleEntity obstacle = obstacleEntities.get(i);
        InteractableComponent interactable = obstacle.getComponent(InteractableComponent.class); // button
        SubInteractableComponent subInteractable = obstacle.getComponent(SubInteractableComponent.class); //door or bridge

        if (subInteractable != null) { // if bridge or door
          subInteractables.add(obstacle);
        } else if (interactable != null) { //if button
          buttons.add(obstacle);
        }
      }

      if (buttons.size() > 0 && subInteractables.size() > 0) {
        for (int j = 0; j < buttons.size(); j++) {
          InteractableComponent interactable = buttons.get(j).getComponent(InteractableComponent.class);
          interactable.addSubInteractable(subInteractables.get(j));
          interactableEntities.add(buttons.get(j));
        }
      }

    System.out.println(buttons.toString());
    System.out.println(subInteractables.toString());
}

Table of Contents

Home


Game Design

Game Design Document

Void/Antivirus

Loading Screen

Game Sound

Menu Assets

Player Design

     Original Design

     Final Design


Gameplay

Movement

Jumping & Sliding

Jump Pads

Portals & Bridges

Buttons

Pick-Ups

Physics

    Momentum & Physics

    Gravity

    Collision


Level Design

Level 1

     Background

     Textures

     Map Design

Level 2

     Background

     Textures

     Map Design

Level 3

     Background

     Textures

     Map Design

Level 4

     Background

     Textures

     Map Design


Sprint Round-Up

Sprint 1 Summary

Sprint 2 Summary

Sprint 3 Summary

Sprint 4 Summary


User Testing

Testing Plans

Sprint 1

     Team 1
     Team 2
     Team 3
     Team 4
     Team 5

Sprint 2

     Team 1
     Team 2
     Team 3
     Team 4
     Team 5

Sprint 3

     Team 1
     Team 2
     Team 3
     Team 4
     Team 5

Sprint 4

     Team 1
     Team 2
     Team 3
     Team 4
     Team 5

User Testing

Sprint 1

     Sprint 1 - Game Audio
     Sprint 1 - Character Design
     Sprint 1 - Menu Assets
     Sprint 1 - Map Design
     Sprint 1 - Void

Sprint 2

     Sprint 2 - Game Audio
     Sprint 2 - Character Design
     Sprint 2 - Menu Assets
     Sprint 2 - Interactable Design Animation
     Sprint 2 - Levels 1 & 4, and Level Editor
     Sprint 2 - Proposed Level 2 & 3 Designs
     Sprint 2 - Current Game State

Sprint 3

     Sprint 3 - Menu Assets
     Sprint 3 - Map Design
     Sprint 3 - Score Display
     Sprint 3 - Player Death and Spawn Animations
     Sprint 3 - Pick Ups and Pause Screen

Sprint 4

     Sprint 4 - Gameplay
     Sprint 4 - Game UI and Animation
     Sprint 4 - Level Background and Music
     Sprint 4 - Game User Testing
     Sprint 4 - Final Game State Testing


Game Engine

Entities and Components

     Status Components
     Event System
     Player Animations Implementation

Level Editor

Level Saving and Loading

Status Effect


Defunct

Development Resources

    Getting Started

Entities and Components

    Level Editor (Saving and Loading
         Multiple Levels)

    Service Locator

    Loading Resources

    Logging

    Unit Testing

    Debug Terminal

Input Handling

    UI

    Level Saving/Loading

    Status Effects

    Animations

    Audio

    AI

    Physics

Game Screens and Areas

    Terrain

    Concurrency & Threading

    Settings


Troubleshooting

MacOS Setup Guide

Clone this wiki locally