From 163c37ffe3c91f37e3cdbf407a17845f708a38c3 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sun, 19 Jan 2025 21:53:28 -0600 Subject: [PATCH] Add basic npc entity script. --- Themes/UI Theme.tres | 15 ------------ scenes/Entities/TestNPC.tscn | 9 ++++--- scenes/MainMenu.tscn | 7 +----- scenes/Maps/SomeMap.tscn | 32 +++++++++++++++++++++++- scenes/Meta/Overworld.tscn | 31 +---------------------- scenes/Meta/RootScene.tscn | 2 -- scenes/Meta/UI.tscn | 3 +-- scenes/UI/VNTextbox.tscn | 5 ++-- scripts/Entities/BasicNPCEntity.gd | 26 ++++++++++++++++++++ scripts/Entities/OverworldEntity.gd | 22 +++++++++++------ scripts/Entities/TestNPCController.gd | 15 ------------ scripts/Scenes/UIScene.gd | 2 +- textures/ui/ui_frame.png | Bin 0 -> 1436 bytes textures/ui/ui_frame.png.import | 34 ++++++++++++++++++++++++++ textures/ui/ui_split.png | Bin 0 -> 21699 bytes textures/ui/ui_split.png.import | 34 ++++++++++++++++++++++++++ textures/ui/ui_split.txt | 1 + ui/UI Theme.tres | 19 ++++++++++++++ 18 files changed, 173 insertions(+), 84 deletions(-) delete mode 100644 Themes/UI Theme.tres create mode 100644 scripts/Entities/BasicNPCEntity.gd delete mode 100644 scripts/Entities/TestNPCController.gd create mode 100644 textures/ui/ui_frame.png create mode 100644 textures/ui/ui_frame.png.import create mode 100644 textures/ui/ui_split.png create mode 100644 textures/ui/ui_split.png.import create mode 100644 textures/ui/ui_split.txt create mode 100644 ui/UI Theme.tres diff --git a/Themes/UI Theme.tres b/Themes/UI Theme.tres deleted file mode 100644 index 5faba1b..0000000 --- a/Themes/UI Theme.tres +++ /dev/null @@ -1,15 +0,0 @@ -[gd_resource type="Theme" load_steps=2 format=3 uid="uid://dm7ee4aqjr2dl"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l4fss"] -bg_color = Color(9.14484e-07, 0.446448, 0.577112, 1) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 - -[resource] -MarginContainer/constants/margin_bottom = 16 -MarginContainer/constants/margin_left = 16 -MarginContainer/constants/margin_right = 16 -MarginContainer/constants/margin_top = 16 -PanelContainer/styles/panel = SubResource("StyleBoxFlat_l4fss") diff --git a/scenes/Entities/TestNPC.tscn b/scenes/Entities/TestNPC.tscn index 94f6a58..9d5df45 100644 --- a/scenes/Entities/TestNPC.tscn +++ b/scenes/Entities/TestNPC.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=7 format=3 uid="uid://dr4b2pmsknuhc"] +[gd_scene load_steps=8 format=3 uid="uid://dr4b2pmsknuhc"] -[ext_resource type="Script" path="res://scripts/Entities/TestNPCController.gd" id="1_61g2d"] +[ext_resource type="Script" path="res://scripts/Entities/BasicNPCEntity.gd" id="1_1muh7"] [ext_resource type="Shader" path="res://shaders/NPC Shader.gdshader" id="1_xgcv1"] +[ext_resource type="Script" path="res://scripts/Cutscene/TestCutscene.gd" id="2_jwvuu"] [ext_resource type="Texture2D" uid="uid://boa4hvwyoslv0" path="res://textures/characters/base_male.png" id="3_20w6p"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_dw1sy"] @@ -18,7 +19,9 @@ shader_parameter/direction = 1 shader_parameter/npcTexture = ExtResource("3_20w6p") [node name="TestNpc" type="CharacterBody3D"] -script = ExtResource("1_61g2d") +script = ExtResource("1_1muh7") +interactType = 1 +interactCutscene = ExtResource("2_jwvuu") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.126485) diff --git a/scenes/MainMenu.tscn b/scenes/MainMenu.tscn index 83163fa..5df1622 100644 --- a/scenes/MainMenu.tscn +++ b/scenes/MainMenu.tscn @@ -1,8 +1,3 @@ -[gd_scene load_steps=2 format=3 uid="uid://w1q5eoiejmy3"] - -[ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="1_0sbv6"] +[gd_scene format=3 uid="uid://w1q5eoiejmy3"] [node name="MainMenu" type="Node3D"] - -[node name="Rosa" parent="." instance=ExtResource("1_0sbv6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.837138, 0, 0.904558) diff --git a/scenes/Maps/SomeMap.tscn b/scenes/Maps/SomeMap.tscn index c4545dd..50d0504 100644 --- a/scenes/Maps/SomeMap.tscn +++ b/scenes/Maps/SomeMap.tscn @@ -1,7 +1,37 @@ -[gd_scene load_steps=2 format=3 uid="uid://dx6fv8n4jl5ku"] +[gd_scene load_steps=7 format=3 uid="uid://dx6fv8n4jl5ku"] [ext_resource type="PackedScene" uid="uid://mr2ako4ox2gq" path="res://models/maps/SomeMap/SomeMapModel.tscn" id="1_sbtr5"] +[ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="2_2h4bv"] +[ext_resource type="PackedScene" uid="uid://dr4b2pmsknuhc" path="res://scenes/Entities/TestNPC.tscn" id="3_q0pj2"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_e1h75"] +sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) +sky_energy_multiplier = 0.0 +ground_bottom_color = Color(0, 0, 0, 1) +ground_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) + +[sub_resource type="Sky" id="Sky_weucl"] +sky_material = SubResource("ProceduralSkyMaterial_e1h75") + +[sub_resource type="Environment" id="Environment_nyivo"] +sky = SubResource("Sky_weucl") +ambient_light_source = 1 [node name="Some-map" type="Node3D"] [node name="some map" parent="." instance=ExtResource("1_sbtr5")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_nyivo") + +[node name="Rosa" parent="." instance=ExtResource("2_2h4bv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.651853, 0.684572, -0.0593004) + +[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) +direction = 1 + +[node name="OmniLight3D" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38.1432, 54.7591, -25.7675) +light_energy = 15.315 +omni_range = 281.646 diff --git a/scenes/Meta/Overworld.tscn b/scenes/Meta/Overworld.tscn index 4b16439..7e9a659 100644 --- a/scenes/Meta/Overworld.tscn +++ b/scenes/Meta/Overworld.tscn @@ -1,38 +1,9 @@ -[gd_scene load_steps=8 format=3 uid="uid://tmbx2kit0jyq"] +[gd_scene load_steps=3 format=3 uid="uid://tmbx2kit0jyq"] -[ext_resource type="PackedScene" uid="uid://yhtpoum3eek7" path="res://scenes/Entities/Rosa.tscn" id="1_xny00"] [ext_resource type="Script" path="res://scripts/Scenes/OverworldScene.gd" id="1_yv6j0"] -[ext_resource type="PackedScene" uid="uid://dr4b2pmsknuhc" path="res://scenes/Entities/TestNPC.tscn" id="2_p8bk2"] [ext_resource type="PackedScene" uid="uid://dx6fv8n4jl5ku" path="res://scenes/Maps/SomeMap.tscn" id="4_8dvtu"] -[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_asdol"] -sky_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) -sky_energy_multiplier = 0.0 -ground_bottom_color = Color(0, 0, 0, 1) -ground_horizon_color = Color(0.59625, 0.6135, 0.6375, 1) - -[sub_resource type="Sky" id="Sky_weucl"] -sky_material = SubResource("ProceduralSkyMaterial_asdol") - -[sub_resource type="Environment" id="Environment_pyuof"] -sky = SubResource("Sky_weucl") -ambient_light_source = 1 - [node name="Overworld" type="Node3D"] script = ExtResource("1_yv6j0") -[node name="WorldEnvironment" type="WorldEnvironment" parent="."] -environment = SubResource("Environment_pyuof") - -[node name="Rosa" parent="." instance=ExtResource("1_xny00")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.651853, 0.684572, -0.0593004) - -[node name="TestNpc" parent="." instance=ExtResource("2_p8bk2")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.68747, 0.459578, -0.399262) - -[node name="OmniLight3D" type="OmniLight3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38.1432, 54.7591, -25.7675) -light_energy = 15.315 -omni_range = 281.646 - [node name="Some-map" parent="." instance=ExtResource("4_8dvtu")] diff --git a/scenes/Meta/RootScene.tscn b/scenes/Meta/RootScene.tscn index 33bef81..4dab95e 100644 --- a/scenes/Meta/RootScene.tscn +++ b/scenes/Meta/RootScene.tscn @@ -10,5 +10,3 @@ script = ExtResource("1_xu06r") [node name="Systems" parent="." instance=ExtResource("2_et43v")] [node name="UI" parent="." instance=ExtResource("3_fwr0j")] -offset_right = -1152.0 -offset_bottom = -648.0 diff --git a/scenes/Meta/UI.tscn b/scenes/Meta/UI.tscn index 0c72566..89ab090 100644 --- a/scenes/Meta/UI.tscn +++ b/scenes/Meta/UI.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://dfwwtbs3ywcyq"] -[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://Themes/UI Theme.tres" id="1_3b1y4"] +[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_3b1y4"] [ext_resource type="Script" path="res://scripts/Scenes/UIScene.gd" id="2_5efuf"] [ext_resource type="PackedScene" uid="uid://bkx3l0kckf4a8" path="res://scenes/UI/VNTextbox.tscn" id="2_x0c4l"] @@ -15,6 +15,5 @@ theme = ExtResource("1_3b1y4") script = ExtResource("2_5efuf") [node name="VNTextbox" parent="." instance=ExtResource("2_x0c4l")] -visible = false layout_mode = 1 offset_top = -133.0 diff --git a/scenes/UI/VNTextbox.tscn b/scenes/UI/VNTextbox.tscn index e6468d9..5c5bf2f 100644 --- a/scenes/UI/VNTextbox.tscn +++ b/scenes/UI/VNTextbox.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://bkx3l0kckf4a8"] -[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://Themes/UI Theme.tres" id="1_wx4lp"] +[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_wx4lp"] [ext_resource type="Script" path="res://scripts/UI/VNTextbox.gd" id="2_uo1gm"] [node name="VNTextbox" type="PanelContainer"] @@ -8,7 +8,7 @@ anchors_preset = 12 anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -offset_top = -134.0 +offset_top = -140.0 grow_horizontal = 2 grow_vertical = 0 theme = ExtResource("1_wx4lp") @@ -24,4 +24,5 @@ theme = ExtResource("1_wx4lp") bbcode_enabled = true text = "test test +test test" diff --git a/scripts/Entities/BasicNPCEntity.gd b/scripts/Entities/BasicNPCEntity.gd new file mode 100644 index 0000000..3428849 --- /dev/null +++ b/scripts/Entities/BasicNPCEntity.gd @@ -0,0 +1,26 @@ +class_name BasicNPCEntity extends "res://scripts/Entities/OverworldEntity.gd" +const Cutscene = preload("res://scripts/Cutscene/Cutscene.gd") + +enum BasicNPCInteractType { + NONE, + CUTSCENE +}; + +@export var interactType:BasicNPCInteractType = BasicNPCInteractType.NONE; +@export var interactCutscene:Resource; + +func interact(interactor:OverworldEntity) -> void: + if interactType == BasicNPCInteractType.NONE: + return + + 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); + return + + pass + +func updateMovement(delta:float) -> void: + pass diff --git a/scripts/Entities/OverworldEntity.gd b/scripts/Entities/OverworldEntity.gd index 26f6efc..6cb7dd9 100644 --- a/scripts/Entities/OverworldEntity.gd +++ b/scripts/Entities/OverworldEntity.gd @@ -1,5 +1,4 @@ -extends CharacterBody3D -class_name OverworldEntity +class_name OverworldEntity extends CharacterBody3D const PauseSystem = preload("res://scripts/System/PauseSystem.gd") @@ -14,7 +13,11 @@ var speed:float = 150; var friction:float = 8.5; var gravity:float = 30; -var direction = Direction.SOUTH; +@export var direction = Direction.SOUTH: + set(newDirection): + direction = newDirection; + _updateMaterial(); + var meshInstance:MeshInstance3D; var underFootTile:int = -1; var underFootPosition:Vector3; @@ -22,6 +25,14 @@ var underFootPosition:Vector3; var withinMapBounds:MapBounds; var withinBoundsLastFrame:bool = true; +func _updateMaterial(): + if !meshInstance: + return + var material:ShaderMaterial = meshInstance.get_surface_override_material(0) + if !material: + return + material.set_shader_parameter("direction", direction) + func getSystems() -> Systems: return get_tree().current_scene.get_node("Systems") as Systems; @@ -128,6 +139,7 @@ func _updateTileData() -> void: func _ready() -> void: meshInstance = get_node("MeshInstance3D") _updateTileData(); + _updateMaterial(); pass func _process(delta:float) -> void: @@ -144,10 +156,6 @@ func _process(delta:float) -> void: # Update logic updateOverworldLogic(delta) - - # Set shader direction. - var material:ShaderMaterial = meshInstance.get_surface_override_material(0) - material.set_shader_parameter("direction", direction) func _physics_process(delta: float) -> void: if isPaused(): diff --git a/scripts/Entities/TestNPCController.gd b/scripts/Entities/TestNPCController.gd deleted file mode 100644 index 84cd155..0000000 --- a/scripts/Entities/TestNPCController.gd +++ /dev/null @@ -1,15 +0,0 @@ -class_name TestNPCController extends "res://scripts/Entities/OverworldEntity.gd" -const TestCutscene = preload("res://scripts/Cutscene/TestCutscene.gd") - -func interact(interactor:OverworldEntity) -> void: - # var battle = Battle.new(); - # getSystems().BATTLE.startBattle(battle); - - # var game = CookingGame.new(VerticalSlice.new()); - # getSystems().COOKING.setCookingGame(game); - - getSystems().CUTSCENE.setCurrentCutscene(TestCutscene.new(interactor, self)); - pass - -func updateMovement(delta:float) -> void: - pass diff --git a/scripts/Scenes/UIScene.gd b/scripts/Scenes/UIScene.gd index 9d05b37..4334283 100644 --- a/scripts/Scenes/UIScene.gd +++ b/scripts/Scenes/UIScene.gd @@ -1 +1 @@ -class_name UIScene extends Control \ No newline at end of file +class_name UIScene extends Control diff --git a/textures/ui/ui_frame.png b/textures/ui/ui_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7ff25c226778bf3ddbfe3a462f40bac3e31be8 GIT binary patch literal 1436 zcmeAS@N?(olHy`uVBq!ia0vp^Gl1BOgBeH`yvj9aU|?nl@Ck7Raz%J#TvSZ_y!={y z3@+8`+`1A66dVPkAutj`py=QxDFy~chLRw^;Qu2VFa&>RR|Up7XMsm#F#`kN5fEma zs?8@23?MU47srr{#<#OB@--W9xR&Pq`!Am_bjcx8{#h`8+i!#DuG=S9WSqIXZ+h8` zmQ3d6x4+rd93MAvUaR!9D^0mHV}kYp_rg)9Pn`g(HCVE9ClplPxY7h6c$E&We^Rh)$G#zb9^yXw$-rCKiy@6@* zR_>hUqxUAYZNC;^kfXUUVN2OTcIBx;w-dPE7$#W$lK3%=g>~}&ewJtR5-ujJUI=u= zt+r_W)82GLN|WVxvQM4$&!9kIk>+uKfHflaGL2OeNa~NboFyt=akR{09&T9P5=M^ literal 0 HcmV?d00001 diff --git a/textures/ui/ui_frame.png.import b/textures/ui/ui_frame.png.import new file mode 100644 index 0000000..52deeb9 --- /dev/null +++ b/textures/ui/ui_frame.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://63qoqwcwjrdr" +path="res://.godot/imported/ui_frame.png-30b876d1de3012af765e0e33ed431a25.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://textures/ui/ui_frame.png" +dest_files=["res://.godot/imported/ui_frame.png-30b876d1de3012af765e0e33ed431a25.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/textures/ui/ui_split.png b/textures/ui/ui_split.png new file mode 100644 index 0000000000000000000000000000000000000000..fb9f11afbd97113067584126ec4d3c9d19ce8308 GIT binary patch literal 21699 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�X!218mqSbw%-?^lfH>-snkb&)I761AU^v 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 bJtQOoF>$ZfCczk>Hjs;^S55FnF46x274Zyy literal 0 HcmV?d00001 diff --git a/textures/ui/ui_split.png.import b/textures/ui/ui_split.png.import new file mode 100644 index 0000000..fd9bce0 --- /dev/null +++ b/textures/ui/ui_split.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddwqq0mthg8e7" +path="res://.godot/imported/ui_split.png-404d87f656179f2ebbb5cf9344e99106.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://textures/ui/ui_split.png" +dest_files=["res://.godot/imported/ui_split.png-404d87f656179f2ebbb5cf9344e99106.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/textures/ui/ui_split.txt b/textures/ui/ui_split.txt new file mode 100644 index 0000000..f35b931 --- /dev/null +++ b/textures/ui/ui_split.txt @@ -0,0 +1 @@ +https://opengameart.org/content/golden-ui diff --git a/ui/UI Theme.tres b/ui/UI Theme.tres new file mode 100644 index 0000000..4a24d4d --- /dev/null +++ b/ui/UI Theme.tres @@ -0,0 +1,19 @@ +[gd_resource type="Theme" load_steps=3 format=3 uid="uid://dm7ee4aqjr2dl"] + +[ext_resource type="Texture2D" uid="uid://63qoqwcwjrdr" path="res://textures/ui/ui_frame.png" id="1_wss1l"] + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_linbi"] +texture = ExtResource("1_wss1l") +texture_margin_left = 14.0 +texture_margin_top = 14.0 +texture_margin_right = 14.0 +texture_margin_bottom = 14.0 +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 + +[resource] +MarginContainer/constants/margin_bottom = 8 +MarginContainer/constants/margin_left = 8 +MarginContainer/constants/margin_right = 8 +MarginContainer/constants/margin_top = 8 +PanelContainer/styles/panel = SubResource("StyleBoxTexture_linbi")