feat: first full movement and enemy prototype
This commit is contained in:
parent
d72a037d5a
commit
eb8dba058d
42 changed files with 3844 additions and 0 deletions
45
project/objects/player.tscn
Normal file
45
project/objects/player.tscn
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dcgsrdacswacl"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cl7a4q5m73vlw" path="res://models/player/character.blend" id="1_eqqp1"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"]
|
||||
radius = 0.339355
|
||||
height = 2.15448
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_eqqp1"]
|
||||
script/source = "extends Camera3D
|
||||
@export var dist : float = 2.0
|
||||
@export var pivot_height : float = 3.0
|
||||
@export var look_target_height : float = 1.0
|
||||
|
||||
func _ready():
|
||||
self.top_level = true
|
||||
|
||||
func _process(_delta):
|
||||
var target : Vector3 = get_parent().global_position + Vector3(0.0, pivot_height, 0.0)
|
||||
var diff := self.global_position - target
|
||||
self.look_at_from_position(target + diff.normalized() * dist, get_parent().global_position + Vector3(0.0, look_target_height, 0.0))
|
||||
"
|
||||
|
||||
[node name="Player" type="PlayerBody"]
|
||||
wall_min_slide_angle = 0.0
|
||||
floor_max_angle = 0.523599
|
||||
|
||||
[node name="PlayerStateMachine" type="PlayerStateMachine" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.05124, 0)
|
||||
shape = SubResource("CapsuleShape3D_bxedw")
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(-1, -6.18173e-08, -6.18173e-08, -6.71313e-08, 0.99594, 0.0900246, 5.60012e-08, 0.0900246, -0.99594, 3.76484e-07, 1.43409, -2.96511)
|
||||
fov = 100.0
|
||||
script = SubResource("GDScript_eqqp1")
|
||||
dist = 1.5
|
||||
pivot_height = 2.5
|
||||
look_target_height = 1.5
|
||||
|
||||
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[editable path="character"]
|
||||
7
project/objects/tre.tscn
Normal file
7
project/objects/tre.tscn
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dqjurq1nq1fle"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dgsd4ysdm0754" path="res://models/props/tree.blend" id="1_n3f34"]
|
||||
|
||||
[node name="Node3D" type="Node3D"]
|
||||
|
||||
[node name="tree" parent="." instance=ExtResource("1_n3f34")]
|
||||
87
project/objects/wall_enemy.tscn
Normal file
87
project/objects/wall_enemy.tscn
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://cdmksnsttot3j"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_j6w7d"]
|
||||
script/source = "extends CharacterBody3D
|
||||
|
||||
@export var speed : float = 10.0
|
||||
@export var target_distance : float = 5.0
|
||||
@export var detect_distance : float = 100.0
|
||||
@export var max_home_distance : float = 50.0
|
||||
@onready var player := $\"../Player\"
|
||||
@onready var last_velocity : Vector3 = player.velocity
|
||||
@onready var direction := 1.0 if randi() % 2 == 0 else -1.0
|
||||
@onready var home := global_position
|
||||
var homing : bool = true
|
||||
|
||||
func _process(_delta : float):
|
||||
if homing || global_position.distance_squared_to(home) > max_home_distance * max_home_distance:
|
||||
self.homing = true
|
||||
self.process_homing()
|
||||
elif player.global_position.distance_squared_to(global_position) > detect_distance * detect_distance:
|
||||
self.homing = true
|
||||
elif player.velocity.normalized().dot(global_position - player.global_position) > -10.0:
|
||||
self.process_ahead()
|
||||
else:
|
||||
self.process_behind()
|
||||
|
||||
func process_homing():
|
||||
if player.global_position.distance_squared_to(global_position) < detect_distance * detect_distance:
|
||||
self.homing = false
|
||||
else:
|
||||
self.velocity = (Vector3(home.x, global_position.y, home.z) - global_position).normalized() * speed
|
||||
|
||||
func process_ahead():
|
||||
var target : Vector3 = player.global_position + last_velocity
|
||||
target.y = self.global_position.y
|
||||
var forward : Vector3 = player.velocity.normalized()
|
||||
if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) < 0.25:
|
||||
self.velocity = Vector3()
|
||||
return
|
||||
if !forward.is_zero_approx():
|
||||
last_velocity = player.velocity
|
||||
forward.y = 0.0
|
||||
forward = forward.normalized()
|
||||
self.global_basis = Basis(Vector3.UP.cross(forward), Vector3.UP, forward)
|
||||
self.velocity = (target - self.global_position).normalized() * speed
|
||||
|
||||
func process_behind():
|
||||
var diff : Vector3 = player.global_position - global_position
|
||||
var forward := diff.normalized()
|
||||
var left := Vector3.UP.cross(forward)
|
||||
self.velocity = forward + left * direction * min(10.0, diff.length())
|
||||
self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z))
|
||||
|
||||
func _physics_process(_delta : float):
|
||||
self.velocity += Vector3(0, -0.25, 0)
|
||||
self.move_and_slide()
|
||||
"
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_j6w7d"]
|
||||
size = Vector3(4.29, 3.77, 2.705)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_j6w7d"]
|
||||
radius = 1.83616
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_j6w7d"]
|
||||
size = Vector3(4.29688, 3.86325, 2.76758)
|
||||
|
||||
[node name="WallEnemy" type="CharacterBody3D"]
|
||||
collision_layer = 2
|
||||
script = SubResource("GDScript_j6w7d")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.302, 0)
|
||||
mesh = SubResource("BoxMesh_j6w7d")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.83717, 0)
|
||||
shape = SubResource("SphereShape3D_j6w7d")
|
||||
|
||||
[node name="AnimatableBody3D" type="AnimatableBody3D" parent="."]
|
||||
collision_layer = 2
|
||||
collision_mask = 0
|
||||
sync_to_physics = false
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="AnimatableBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.29157, 0)
|
||||
shape = SubResource("BoxShape3D_j6w7d")
|
||||
Loading…
Add table
Add a link
Reference in a new issue