This site is currently in read-only mode during migration to a new platform.
You cannot post questions, answers or comments, as they would be lost during the migration otherwise.
0 votes

Hi,

I have been working on this for a while now and I finally figured out how I can make a working dialogue box with branching properties (this is a .JSON file)

Now I want it to connect to the Main Scene of mine where a dummy character is standing still and has the Area node attached to him. I must add that it is the 3D world / scene. I know that the Area node is able to send a signal to the code where it can say if a Body has entered or left.

I want the code to do following:
- Stop the movement of the character when interacting with the Dummy Character(No further inputs of the player with the WASD Keys which can change the position of the character) this will be the case until every piece of dialogue has been read or skipped. Releasing the input block and continue the normal WASD movement.

  • Input of the player is going to be "Enter" to continue the dialogue

I myself do have some code (shown below) but you can also advice me to use a whole different set of lines of code.


extends Area

const PLAYERNAME = "Mairobi"

export(String) var DialogueName = ""
export(String) var DialogueText = ""

func ready():
connect("body
entered", self, "onbodyenter")
connect("body
exited", self, "onbodyexit")

func process(delta):
if Input.is
actionjustpressed("uiaccept"):
var bodies = get
overlappingbodies()
for body in bodies:
if (body.get
name() == PLAYERNAME):
print(body.getname() + "interacts with" + getname())
var textbox = get_node("Area/Panel")
textbox.setDialog(DialogueName, DialogueText)
textbox.transitionInOut(true)

func onbodyenter(body):
print(body.get
name() + "entered the area")

func onbodyexit(body):
print(body.get
name() + "exited the area")
if(body.getname() == PLAYERNAME):
var textbox = get
node("../Textbox")
textbox.transitionInOut(false)


I am not sure if I need to make more nodes or I need to have another piece of code made.

Thanks for reading
KindoSaur Productions

in Engine by (24 points)

1 Answer

+1 vote

You could use finite state machines here. When player begins conversation with NPC, leave "walking" state an enter "dialogue" state. When reading player's input, in addition to checking action pressed, check state. If input is "WASD" AND state is "walking", move.

by (190 points)
Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.