isometric cam
This commit is contained in:
+3
-16
@@ -1,12 +1,9 @@
|
|||||||
[gd_scene format=3 uid="uid://crtm0xtiql3r8"]
|
[gd_scene format=3 uid="uid://crtm0xtiql3r8"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bn777gguclud5" path="res://player.gd" id="1_xhfnw"]
|
[ext_resource type="Script" uid="uid://bn777gguclud5" path="res://player.gd" id="1_xhfnw"]
|
||||||
[ext_resource type="Script" uid="uid://b4td4k8yo5y78" path="res://camera_spring_arm.gd" id="2_kpjcp"]
|
[ext_resource type="Script" path="res://camera_iso.gd" id="2_camera_iso"]
|
||||||
[ext_resource type="PackedScene" uid="uid://qy6qrxdfgx2g" path="res://Assets/bull_v10.fbx" id="4_e80uo"]
|
[ext_resource type="PackedScene" uid="uid://qy6qrxdfgx2g" path="res://Assets/bull_v10.fbx" id="4_e80uo"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_kne1u"]
|
|
||||||
radius = 0.5
|
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_chest"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_chest"]
|
||||||
radius = 0.35
|
radius = 0.35
|
||||||
|
|
||||||
@@ -32,18 +29,8 @@ shape = SubResource("SphereShape3D_belly")
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505, 0.4)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.505, 0.4)
|
||||||
shape = SubResource("SphereShape3D_hips")
|
shape = SubResource("SphereShape3D_hips")
|
||||||
|
|
||||||
[node name="SpringArmPivot" type="Node3D" parent="." unique_id=1671817680]
|
[node name="Camera3D" type="Camera3D" parent="." unique_id=1120161087]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.22, 0)
|
script = ExtResource("2_camera_iso")
|
||||||
script = ExtResource("2_kpjcp")
|
|
||||||
|
|
||||||
[node name="SpringArm3D" type="SpringArm3D" parent="SpringArmPivot" unique_id=141439848]
|
|
||||||
collision_mask = 3
|
|
||||||
shape = SubResource("SphereShape3D_kne1u")
|
|
||||||
spring_length = 7.0
|
|
||||||
margin = 0.5
|
|
||||||
|
|
||||||
[node name="Camera3D" type="Camera3D" parent="SpringArmPivot/SpringArm3D" unique_id=1120161087]
|
|
||||||
keep_aspect = 0
|
|
||||||
|
|
||||||
[node name="bull_v10" parent="." unique_id=1386495166 instance=ExtResource("4_e80uo")]
|
[node name="bull_v10" parent="." unique_id=1386495166 instance=ExtResource("4_e80uo")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.655, 0.23)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.655, 0.23)
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
extends Camera3D
|
||||||
|
|
||||||
|
@export var height: float = 18.0
|
||||||
|
@export var horizontal_distance: float = 18.0
|
||||||
|
@export var horizontal_angle_deg: float = 45.0
|
||||||
|
@export var ortho_size: float = 15.0
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
set_as_top_level(true)
|
||||||
|
projection = PROJECTION_ORTHOGONAL
|
||||||
|
size = ortho_size
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
var angle_rad := deg_to_rad(horizontal_angle_deg)
|
||||||
|
var offset := Vector3(
|
||||||
|
sin(angle_rad) * horizontal_distance,
|
||||||
|
height,
|
||||||
|
cos(angle_rad) * horizontal_distance,
|
||||||
|
)
|
||||||
|
var target := get_parent() as Node3D
|
||||||
|
global_position = target.global_position + offset
|
||||||
|
look_at(target.global_position, Vector3.UP)
|
||||||
@@ -8,7 +8,7 @@ const HOOF_OFFSETS: Array = [
|
|||||||
Vector3( 0.30, -0.25, 0.60),
|
Vector3( 0.30, -0.25, 0.60),
|
||||||
]
|
]
|
||||||
|
|
||||||
@onready var camera_pivot: Node3D = $SpringArmPivot
|
@onready var camera_pivot: Node3D = $Camera3D
|
||||||
@onready var cube_guy: Node3D = $bull_v10
|
@onready var cube_guy: Node3D = $bull_v10
|
||||||
|
|
||||||
var _hoof_emitters: Array[CPUParticles3D] = []
|
var _hoof_emitters: Array[CPUParticles3D] = []
|
||||||
@@ -177,18 +177,17 @@ func _physics_process(delta: float) -> void:
|
|||||||
var charging := Input.is_action_pressed(&"charge")
|
var charging := Input.is_action_pressed(&"charge")
|
||||||
var on_floor := is_on_floor()
|
var on_floor := is_on_floor()
|
||||||
|
|
||||||
# ── Left / right click thrust (only when mouse is captured) ─────────────
|
# ── Left / right click thrust ─────────────────────────────────────────────
|
||||||
# Left click → thrust NE (forward-right diagonal)
|
# Left click → thrust NE (forward-right diagonal)
|
||||||
# Right click → thrust NW (forward-left diagonal)
|
# Right click → thrust NW (forward-left diagonal)
|
||||||
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
if Input.is_action_just_pressed(&"thrust_left") or Input.is_action_just_pressed(&"thrust_right"):
|
||||||
if Input.is_action_just_pressed(&"thrust_left") or Input.is_action_just_pressed(&"thrust_right"):
|
var raw := cube_guy.global_transform.basis.z
|
||||||
var raw := cube_guy.global_transform.basis.z
|
var bull_fwd := Vector3(raw.x, 0.0, raw.z).normalized()
|
||||||
var bull_fwd := Vector3(raw.x, 0.0, raw.z).normalized()
|
var bull_right := bull_fwd.cross(Vector3.UP)
|
||||||
var bull_right := bull_fwd.cross(Vector3.UP)
|
if Input.is_action_just_pressed(&"thrust_left"):
|
||||||
if Input.is_action_just_pressed(&"thrust_left"):
|
_apply_thrust((bull_fwd + bull_right).normalized())
|
||||||
_apply_thrust((bull_fwd + bull_right).normalized())
|
else:
|
||||||
else:
|
_apply_thrust((bull_fwd - bull_right).normalized())
|
||||||
_apply_thrust((bull_fwd - bull_right).normalized())
|
|
||||||
|
|
||||||
# Reset kick timer on landing so the first kick after a bounce is immediate
|
# Reset kick timer on landing so the first kick after a bounce is immediate
|
||||||
if on_floor and not _was_on_floor and direction:
|
if on_floor and not _was_on_floor and direction:
|
||||||
|
|||||||
Reference in New Issue
Block a user