diff --git a/.vscode/settings.json b/.vscode/settings.json index 811746e..4340040 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,8 @@ "godotTools.editorPath.godot4": "/var/lib/flatpak/app/org.godotengine.Godot/current/active/export/bin/org.godotengine.Godot", "terminal.integrated.tabs.enabled": false, "editor.insertSpaces": false, - "editor.tabSize": 4 + "editor.tabSize": 4, + "files.exclude": { + "**/*.uid": true + }, } \ No newline at end of file diff --git a/scenes/Entities/TestNPC.tscn b/scenes/Entities/TestNPC.tscn index 9d5df45..acdd90e 100644 --- a/scenes/Entities/TestNPC.tscn +++ b/scenes/Entities/TestNPC.tscn @@ -20,7 +20,6 @@ shader_parameter/npcTexture = ExtResource("3_20w6p") [node name="TestNpc" type="CharacterBody3D"] script = ExtResource("1_1muh7") -interactType = 1 interactCutscene = ExtResource("2_jwvuu") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] diff --git a/scenes/Maps/SomeMap.tscn b/scenes/Maps/SomeMap.tscn index 50d0504..ff21516 100644 --- a/scenes/Maps/SomeMap.tscn +++ b/scenes/Maps/SomeMap.tscn @@ -29,6 +29,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.651853, 0.684572, -0.05930 [node name="TestNpc" parent="." instance=ExtResource("3_q0pj2")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.68747, 0.459578, -0.399262) +interactType = 2 +interactTexts = Array[String](["Hello, I am an NPC"]) +moveType = 1 direction = 1 [node name="OmniLight3D" type="OmniLight3D" parent="."] diff --git a/scripts/Cutscene/TestCutscene.gd b/scripts/Cutscene/TestCutscene.gd index 65f9e64..d2e2fe6 100644 --- a/scripts/Cutscene/TestCutscene.gd +++ b/scripts/Cutscene/TestCutscene.gd @@ -1,14 +1,10 @@ -class_name TestCutscene extends "res://scripts/Cutscene/Cutscene.gd" -const OverworldEntity = preload("res://scripts/Entities/OverworldEntity.gd"); -const CookingStartEvent = preload("res://scripts/Cutscene/Cooking/CookingStartEvent.gd"); - -var cook:CookingGame; +class_name TestCutscene extends "res://scripts/Cutscene/Scene/OverworldConversationEvent.gd" func _init(speaker:OverworldEntity, interacted:OverworldEntity ) -> void: - cook = CookingGame.new(VerticalSlice.new()); - pass - -func setupCutscene() -> void: - add([ - CookingStartEvent.new(cook), - ]); + super( + speaker, + interacted, + [ + "Hello" + ] + ); diff --git a/scripts/Entities/BasicNPCEntity.gd b/scripts/Entities/BasicNPCEntity.gd index 3428849..42ab12f 100644 --- a/scripts/Entities/BasicNPCEntity.gd +++ b/scripts/Entities/BasicNPCEntity.gd @@ -1,13 +1,27 @@ class_name BasicNPCEntity extends "res://scripts/Entities/OverworldEntity.gd" -const Cutscene = preload("res://scripts/Cutscene/Cutscene.gd") +const Cutscene = preload("res://scripts/Cutscene/Cutscene.gd"); +const OverworldConversationEvent = preload("res://scripts/Cutscene/Scene/OverworldConversationEvent.gd"); enum BasicNPCInteractType { NONE, - CUTSCENE + CUTSCENE, + TEXTS +}; + +enum BasicNPCMoveType { + STILL, + RANDOM_LOOK }; @export var interactType:BasicNPCInteractType = BasicNPCInteractType.NONE; -@export var interactCutscene:Resource; +@export var interactCutscene:GDScript; +@export var interactTexts:Array[String]; + +@export var moveType:BasicNPCMoveType = BasicNPCMoveType.STILL; + +@export var randomLookMinTime:float = 1.0; +@export var randomLookMaxTime:float = 3.0; +var randomLookTimer:float = 0.0; func interact(interactor:OverworldEntity) -> void: if interactType == BasicNPCInteractType.NONE: @@ -16,11 +30,26 @@ func interact(interactor:OverworldEntity) -> void: if interactType == BasicNPCInteractType.CUTSCENE: # Cutscene in this manner must take two entities # (self, speaker, and interactor, player) - var instance:Cutscene = interactCutscene.new(self, interactor); - getSystems().CUTSCENE.setCurrentCutscene(instance); + var cs:Cutscene = interactCutscene.new(self, interactor); + getSystems().CUTSCENE.setCurrentCutscene(cs); + return + + if interactType == BasicNPCInteractType.TEXTS: + var cs:Cutscene = OverworldConversationEvent.new(self, interactor, interactTexts); + getSystems().CUTSCENE.setCurrentCutscene(cs); return pass func updateMovement(delta:float) -> void: + if moveType == BasicNPCMoveType.STILL: + return + + if moveType == BasicNPCMoveType.RANDOM_LOOK: + randomLookTimer -= delta; + if randomLookTimer <= 0: + randomLookTimer = randf_range(randomLookMinTime, randomLookMaxTime); + self.direction = randi_range(0, 3); + return + pass diff --git a/scripts/MapBounds.gd b/scripts/MapBounds.gd index f18b546..96693a4 100644 --- a/scripts/MapBounds.gd +++ b/scripts/MapBounds.gd @@ -7,11 +7,9 @@ func _ready() -> void: func _on_body_entered(body: Node3D) -> void: if (!body is OverworldEntity): return - print("Entered overworld ent") (body as OverworldEntity).withinMapBounds = self; func _on_body_exited(body: Node3D) -> void: if (!body is OverworldEntity): return - print("Entered overworld ent") (body as OverworldEntity).withinMapBounds = null; diff --git a/scripts/UI/VNTextbox.gd b/scripts/UI/VNTextbox.gd index dd8bd30..3481359 100644 --- a/scripts/UI/VNTextbox.gd +++ b/scripts/UI/VNTextbox.gd @@ -20,6 +20,7 @@ var isClosed = true; func _ready() -> void: label = $MarginContainer/Label + self.visible = false; func _process(delta: float) -> void: if text == "": @@ -39,9 +40,9 @@ func _process(delta: float) -> void: if visibleCharacters >= getCountOfCharactersToScrollInView(): currentViewScrolled = true; - print("Scrolled view"); - if isMoreViews: - print("More views"); + #print("Scrolled view"); + #if isMoreViews: + #print("More views"); return; if Input.is_action_just_pressed("interact"): @@ -108,7 +109,7 @@ func setText(text:String) -> void: self.text = text; if text == "": isClosed = true; - label.text = "closed."; + self.visible = false; return; isClosed = false; @@ -117,3 +118,4 @@ func setText(text:String) -> void: currentLine = 0; currentViewScrolled = false; recalculateWrapping(); + self.visible = true;