Skip to content

Configuring Entities

Anastasia Laczko edited this page Jun 11, 2021 · 5 revisions

Introduction

Entities can be configured using config files with pre-defined properties. This makes gameplay testing easier as the gameplay experience can be tweaked without having to edit code.

The core idea is that the FileLoader reads JSON config files which store entity properties such as attack: 10 or health: 100 and transforms them into config classes. The properties can then be read from these config classes and passed into the entity creation methods in Entity Factories.

Key Components

  • File Loader - :FileLoader.
  • Entity Factory - Factory for creating similar types of entities: e.g. PlayerFactory, NPCFactory.
  • Group Config Class - Defines the config classes for groups of entities: e.g. NPCConfigs.
  • Config Class - Defines a config class with default properties: e.g. PlayerConfig, BaseEntityConfig, GhostKingConfig, etc.
  • Config File - JSON file with values for properties that are defined in the corresponding config class or group config class, e.g. NPCs.json, player.json.

Usage

Example: Single entity

In this example, we're going to look at how to use properties stored in the player's config file.

Config File - "configs/player.json":

{
  "health": 100,
  "baseAttack": 10
  "gold": 50,
  "favouriteColour": "peach"
}

Config Class:

public class PlayerConfig {
  public int health = 1;
  public int baseAttack = 0;
  public int gold = 1;
  public String favouriteColour = "none";
}

Load config using the FileLoader:

private static final PlayerConfig stats = FileLoader.loadClass(PlayerConfig.class, "configs/player.json");

int health = stats.health;
int baseAttack = stats.baseAttack;
int gold = stats.gold;
String favouriteColour = stats.favouriteColour;

Example: Multiple entities

When we have multiple entities with similar properties, it is useful to be able to store all of their configs in a single JSON file. The following is an example of this for multiple NPC entities.

Config File - "configs/NPCs.json":

{
  "ghost": {
    "health": 40,
    "baseAttack": 10
  },
  "ghostKing": {
    "health": 100,
    "baseAttack": 25
    "spookyFactor": 7
  }
}

Group Config Class:

public class NPCConfigs {
  public GhostConfigghost = new GhostConfig();
  public GhostKingConfig ghostKing = new GhostKingConfig();
}

Config Classes:

public class GhostConfig {
  public int health = 1;
  public int baseAttack = 0;
}

public class GhostKingConfig extends GhostConfig {
  public int spookyFactor = 0;
}

Load configs using the FileLoader:

private static final NPCConfigs configs = FileLoader.loadClass(NPCConfigs.class, "configs/NPCs.json");

GhostConfig ghostConfig = configs.ghost;
GhostKingConfig ghostKingConfig = configs.ghostKing;

int ghostHealth = ghostConfig .health;
int ghostBaseAttack = ghostConfig .baseAttack;

int ghostKingHealth = ghostKingConfig .health;
int ghostKingBaseAttack = ghostKingConfig .baseAttack;
int ghostKingSpookyFactor = ghostKingConfig.spookyFactor;

Table of Contents

Home

Game Design

User survey

Sprint 4

Eviction Menu and Win/lose Logic: Polishing tasks (Team 7)

Button Sounds and Ending Menu improve (Team 3)

Sound effect and Fixing the clue bug (Team 6)

Improvement of Enemy and Attack (Team 1)

Add Features When The Player Get Attacked and Overall UI Improvement (Team 8)

Sprint 1

Achievement System (Team 2)

Player Eviction Menu (Team 7)

Countdown Clock (Team 4)

Music (Team3)

Map (Team6)

Sprint 2

Player Eviction Menu (Team 7)

Character Design & Animation (Team 1)

Music (Team 3)

Inventory System and Consumables Items (Team 8)

Scenario design

Achievement System(team 2)

Storyline (Team 5)

Countdown Clock (Team 4)

Sprint 3

Ending Menu (Team 3)

NPC interaction (Team 2)

Win/lose Condition (Based on Eviction Menu) (Team 7)

Player Profile (Team 4)

Game Logo (Team 8)

Clue storage (Team 6)

Enemy Design and Attack (Team 1)

Scenario design for village(Team5)

Game design
Entities and Components

Service Locator

Loading Resources

Logging

Unit Testing

Debug Terminal

Input Handling

UI

Animations

Audio

AI

Physics

Game Screens and Areas

Terrain

Concurrency & Threading

Settings

Troubleshooting

MacOS Setup Guide

Clone this wiki locally