Whatever lol
This commit is contained in:
18
overworld/entity/Entity.gd
Normal file
18
overworld/entity/Entity.gd
Normal file
@@ -0,0 +1,18 @@
|
||||
class_name Entity extends CharacterBody3D
|
||||
|
||||
enum MovementType {
|
||||
NONE,
|
||||
DISABLED,
|
||||
PLAYER
|
||||
}
|
||||
|
||||
enum InteractType {
|
||||
NONE,
|
||||
};
|
||||
|
||||
|
||||
# Movement settings
|
||||
@export var movementType:MovementType = MovementType.NONE
|
||||
|
||||
# Interaction settings
|
||||
@export var interactType:InteractType = InteractType.NONE
|
||||
1
overworld/entity/Entity.gd.uid
Normal file
1
overworld/entity/Entity.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c8146flooxeue
|
||||
70
overworld/entity/Entity.tscn
Normal file
70
overworld/entity/Entity.tscn
Normal file
@@ -0,0 +1,70 @@
|
||||
[gd_scene load_steps=12 format=3 uid="uid://by4a0r2hp0w6s"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c8146flooxeue" path="res://overworld/entity/Entity.gd" id="1_8e8ef"]
|
||||
[ext_resource type="Script" uid="uid://cj122th32iabx" path="res://overworld/entity/EntityMovement.gd" id="2_sfgsm"]
|
||||
[ext_resource type="Script" uid="uid://8is1soq6i282" path="res://overworld/entity/EntityInteractingArea.gd" id="3_bhm0o"]
|
||||
[ext_resource type="Script" uid="uid://cr03t63s321wp" path="res://overworld/entity/EntityInteractableArea.gd" id="4_e1jqj"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_8e8ef"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_sfgsm"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8e8ef"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0.521569, 1, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_8e8ef"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sfgsm"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0.518134, 0.620745, 1)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_sfgsm"]
|
||||
size = Vector3(0.689728, 0.52002, 0.796997)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_bhm0o"]
|
||||
size = Vector3(1.3, 1.3, 1.3)
|
||||
|
||||
[node name="Entity" type="CharacterBody3D"]
|
||||
script = ExtResource("1_8e8ef")
|
||||
metadata/_custom_type_script = "uid://c8146flooxeue"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("CapsuleShape3D_8e8ef")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("CapsuleMesh_sfgsm")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_8e8ef")
|
||||
|
||||
[node name="Nose" type="Node3D" parent="."]
|
||||
transform = Transform3D(0.393905, 0, 0, 0, 0.393905, 0, 0, 0, 0.393905, 0.571181, 0.340915, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Nose"]
|
||||
mesh = SubResource("BoxMesh_8e8ef")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_sfgsm")
|
||||
|
||||
[node name="Components" type="Node" parent="."]
|
||||
|
||||
[node name="Movement" type="Node" parent="Components" node_paths=PackedStringArray("entity", "interactingArea")]
|
||||
script = ExtResource("2_sfgsm")
|
||||
entity = NodePath("../..")
|
||||
interactingArea = NodePath("../../EntityInteractingArea")
|
||||
|
||||
[node name="EntityInteractingArea" type="Area3D" parent="." node_paths=PackedStringArray("entity")]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
script = ExtResource("3_bhm0o")
|
||||
entity = NodePath("..")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EntityInteractingArea"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.604726, 0, 0)
|
||||
shape = SubResource("BoxShape3D_sfgsm")
|
||||
|
||||
[node name="EntityInteractableArea" type="Area3D" parent="." node_paths=PackedStringArray("entity")]
|
||||
collision_layer = 2
|
||||
collision_mask = 0
|
||||
script = ExtResource("4_e1jqj")
|
||||
entity = NodePath("..")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EntityInteractableArea"]
|
||||
shape = SubResource("BoxShape3D_bhm0o")
|
||||
16
overworld/entity/EntityInteractableArea.gd
Normal file
16
overworld/entity/EntityInteractableArea.gd
Normal file
@@ -0,0 +1,16 @@
|
||||
class_name EntityInteractableArea extends Area3D
|
||||
const Entity = preload("res://overworld/entity/Entity.gd")
|
||||
|
||||
@export var entity:Entity
|
||||
|
||||
func isInteractable() -> bool:
|
||||
return entity && entity.interactType != Entity.InteractType.NONE
|
||||
|
||||
func onInteract() -> void:
|
||||
if !isInteractable():
|
||||
return
|
||||
|
||||
if entity.interactType == Entity.InteractType.NONE:
|
||||
return
|
||||
|
||||
print("Entity Interacted")
|
||||
1
overworld/entity/EntityInteractableArea.gd.uid
Normal file
1
overworld/entity/EntityInteractableArea.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cr03t63s321wp
|
||||
33
overworld/entity/EntityInteractingArea.gd
Normal file
33
overworld/entity/EntityInteractingArea.gd
Normal file
@@ -0,0 +1,33 @@
|
||||
class_name EntityInteractingArea extends Area3D
|
||||
const Entity = preload("res://overworld/entity/Entity.gd")
|
||||
|
||||
var interactableAreas:Array[EntityInteractableArea] = []
|
||||
@export var entity:Entity
|
||||
|
||||
func hasInteraction() -> bool:
|
||||
return true
|
||||
|
||||
func interact() -> void:
|
||||
for area in interactableAreas:
|
||||
area.onInteract()
|
||||
|
||||
func _enter_tree() -> void:
|
||||
self.area_entered.connect(_onAreaEntered)
|
||||
self.area_exited.connect(_onAreaExited)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
self.area_entered.disconnect(_onAreaEntered)
|
||||
self.area_exited.disconnect(_onAreaExited)
|
||||
|
||||
func _onAreaEntered(area:Area3D) -> void:
|
||||
if area is EntityInteractableArea:
|
||||
if area.entity == entity:
|
||||
return
|
||||
if !area.isInteractable():
|
||||
return
|
||||
print("EntityInteractingArea: Area Entered")
|
||||
interactableAreas.append(area)
|
||||
|
||||
func _onAreaExited(area:Area3D) -> void:
|
||||
print("EntityInteractingArea: Area Exited")
|
||||
interactableAreas.erase(area)
|
||||
1
overworld/entity/EntityInteractingArea.gd.uid
Normal file
1
overworld/entity/EntityInteractingArea.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://8is1soq6i282
|
||||
80
overworld/entity/EntityMovement.gd
Normal file
80
overworld/entity/EntityMovement.gd
Normal file
@@ -0,0 +1,80 @@
|
||||
class_name EntityMovement extends Node
|
||||
|
||||
const FRICTION = 0.01
|
||||
const WALK_SPEED_DEFAULT = 8
|
||||
const RUN_SPEED_DEFAULT = 12
|
||||
|
||||
# var _inputDir:Vector2 = Vector2.ZERO
|
||||
# var _running:bool = false
|
||||
|
||||
@export var entity:Entity
|
||||
@export var interactingArea:EntityInteractingArea
|
||||
# @export var rotate:Node3D
|
||||
@export var walkSpeed:float = WALK_SPEED_DEFAULT
|
||||
# @export var runSpeed:float = RUN_SPEED_DEFAULT
|
||||
|
||||
#
|
||||
# Private Methods
|
||||
#
|
||||
func _applyGravity() -> void:
|
||||
if !entity.is_on_floor():
|
||||
entity.velocity += PHYSICS.GRAVITY * get_process_delta_time()
|
||||
|
||||
func _applyPlayerMovement(_delta:float):
|
||||
if Input.is_action_just_pressed("interact") && interactingArea && interactingArea.hasInteraction():
|
||||
interactingArea.interact()
|
||||
return
|
||||
|
||||
var inputDir:Vector2 = Input.get_vector("move_left", "move_right", "move_back", "move_forward").normalized()
|
||||
var cameraCurrent = get_viewport().get_camera_3d()
|
||||
if !cameraCurrent:
|
||||
return
|
||||
|
||||
# Use camera orientation for movement direction
|
||||
var camBasis = cameraCurrent.global_transform.basis
|
||||
|
||||
# Forward and right vectors, ignore vertical component
|
||||
var forward = -camBasis.z
|
||||
forward.y = 0
|
||||
forward = forward.normalized()
|
||||
var right = camBasis.x
|
||||
right.y = 0
|
||||
right = right.normalized()
|
||||
|
||||
var directionAdjusted = (forward * inputDir.y + right * inputDir.x).normalized()
|
||||
if directionAdjusted.length() <= 0.01:
|
||||
return
|
||||
|
||||
var speed = walkSpeed
|
||||
entity.velocity.x = directionAdjusted.x * speed
|
||||
entity.velocity.z = directionAdjusted.z * speed
|
||||
|
||||
func _applyMovement(delta:float) -> void:
|
||||
if !_canMove():
|
||||
return
|
||||
|
||||
if entity.movementType == Entity.MovementType.PLAYER:
|
||||
_applyPlayerMovement(delta)
|
||||
|
||||
func _applyFriction(delta:float) -> void:
|
||||
entity.velocity.x *= delta * FRICTION
|
||||
entity.velocity.z *= delta * FRICTION
|
||||
|
||||
func _canMove() -> bool:
|
||||
return true
|
||||
|
||||
#
|
||||
# Callbacks
|
||||
#
|
||||
func _enter_tree() -> void:
|
||||
pass
|
||||
|
||||
func _physics_process(delta:float) -> void:
|
||||
# Entity required to move
|
||||
if !entity || entity.movementType == Entity.MovementType.DISABLED || !entity.visible:
|
||||
return
|
||||
|
||||
_applyGravity()
|
||||
_applyFriction(delta)
|
||||
_applyMovement(delta)
|
||||
entity.move_and_slide()
|
||||
1
overworld/entity/EntityMovement.gd.uid
Normal file
1
overworld/entity/EntityMovement.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cj122th32iabx
|
||||
1
overworld/map/TestMap.gd
Normal file
1
overworld/map/TestMap.gd
Normal file
@@ -0,0 +1 @@
|
||||
extends Node3D
|
||||
1
overworld/map/TestMap.gd.uid
Normal file
1
overworld/map/TestMap.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://xe6pcuq741xi
|
||||
20
overworld/map/TestMap.tscn
Normal file
20
overworld/map/TestMap.tscn
Normal file
@@ -0,0 +1,20 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d0ywgijpuqy0r"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://xe6pcuq741xi" path="res://overworld/map/TestMap.gd" id="1_6ms5s"]
|
||||
[ext_resource type="PackedScene" uid="uid://cluuhtfjeodwb" path="res://overworld/map/TestMapBase.tscn" id="1_ox0si"]
|
||||
[ext_resource type="PackedScene" uid="uid://by4a0r2hp0w6s" path="res://overworld/entity/Entity.tscn" id="2_jmygs"]
|
||||
|
||||
[node name="TestMap" type="Node3D"]
|
||||
script = ExtResource("1_6ms5s")
|
||||
|
||||
[node name="NotPlayer" parent="." instance=ExtResource("2_jmygs")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00883961, 1.11219, 0.0142021)
|
||||
|
||||
[node name="TestMapBase" parent="." instance=ExtResource("1_ox0si")]
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("2_jmygs")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.1915, 1.05, 0.125589)
|
||||
movementType = 2
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(-0.0384888, -0.605488, 0.794923, -0.0292824, 0.795854, 0.60478, -0.99883, 0, -0.0483617, 5.96324, 4.42257, 0)
|
||||
25
overworld/map/TestMapBase.tscn
Normal file
25
overworld/map/TestMapBase.tscn
Normal file
@@ -0,0 +1,25 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://cluuhtfjeodwb"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cu1hvpqmqn31n" path="res://icon.svg" id="1_x4ibw"]
|
||||
|
||||
[sub_resource type="PlaneMesh" id="PlaneMesh_owt5q"]
|
||||
size = Vector2(200, 200)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_52cv7"]
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_x4ibw")
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_x4ibw"]
|
||||
size = Vector3(200, 0.1, 200)
|
||||
|
||||
[node name="TestMapBase" type="Node3D"]
|
||||
|
||||
[node name="Ground" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
|
||||
mesh = SubResource("PlaneMesh_owt5q")
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_52cv7")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
|
||||
shape = SubResource("BoxShape3D_x4ibw")
|
||||
Reference in New Issue
Block a user