Skip to content

Triggering the dialog by pressing the F key

wsxmr1234 edited this page Oct 19, 2022 · 1 revision
public class TriggerDialogComponent extends Component {

    @Override
    public void create() {
        entity.getEvents().addListener("collisionStart", this::onCollisionStart);
        entity.getEvents().addListener("collisionEnd", this::onCollisionEnd);
    }

    private void onCollisionEnd(Fixture me, Fixture other) {

        if (!PhysicsLayer.contains(targetLayer, other.getFilterData().categoryBits)) {
            // Doesn't match our target layer, ignore
            return;
        }
        npcInteractionDisplay.hideInteractionPrompt();
        Stage stage = ServiceLocator.getRenderService().getStage();
        if (listener != null) {
            stage.removeListener(listener);
        }

    }

    private void onCollisionStart(Fixture me, Fixture other) {
        if (!PhysicsLayer.contains(targetLayer, other.getFilterData().categoryBits)) {
            // Doesn't match our target layer, ignore
            return;
        }
        npcInteractionDisplay.showInteractionPrompt();
        Stage stage = ServiceLocator.getRenderService().getStage();
        listener = new InputListener() {
            @Override
            public boolean keyDown(InputEvent event, int keycode) {
                if (keycode == Input.Keys.F) {
                    // TODO add trigger dialog
                    switch (name) {
                        case Zoe -> {
                            try {
                                npcInteractionDisplay.interactWithZoe();
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            }
                        }
                        case Metis -> {
                            try {
                                npcInteractionDisplay.interactWithMetis();
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            }
                        }
                        case Doris -> {
                            npcInteractionDisplay.interactWithDoris();
                        }
                    }
                }
                return false;
            }
        };
        stage.addListener(listener);
    }
}

In order to achieve the function of triggering the dialog by pressing the f key close to the user, i do it by using the collision event. I added two events onCollisionStart and onCollisionEnd. When the player collides with the NPC, the onCollisionStart event will be triggered, and a key listener will be created to monitor whether the player presses the F key. And when the player is far away from the NPC, the key listener will be removed.

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