From a3833e2e471485904751b974e1cdc1d48e0f5e73 Mon Sep 17 00:00:00 2001 From: LaptopmanMann Date: Mon, 15 Sep 2025 18:31:41 +0200 Subject: [PATCH] added camera obejct taking pictures --- AllaroundTheWorld.tscn | 2 +- Florian/AllaroundTheWorld.tscn | 3 + Florian/PlayerRigidbody.tscn | 87 +++++++++++++++++++ Florian/cat.jpg | Bin 0 -> 30924 bytes Florian/cat.jpg.import | 35 ++++++++ Florian/cool_camera.gd | 14 +++ Florian/cool_camera.gd.uid | 1 + Florian/cool_camera.tscn | 22 +++++ Florian/node_3d.tscn | 74 ++++++++++++++++ Florian/playerRigidbody.gd | 150 +++++++++++++++++++++++++++++++++ Florian/playerRigidbody.gd.uid | 1 + Florian/point_thing.gd | 12 +++ Florian/point_thing.gd.uid | 1 + Florian/point_thing.tscn | 13 +++ Florian/sprite_3d.gd | 4 + Florian/sprite_3d.gd.uid | 1 + picture_takeables_array.gd | 8 ++ picture_takeables_array.gd.uid | 1 + project.godot | 38 +++++++++ vehicle_body_3d.tscn | 7 -- 20 files changed, 466 insertions(+), 8 deletions(-) create mode 100644 Florian/AllaroundTheWorld.tscn create mode 100644 Florian/PlayerRigidbody.tscn create mode 100644 Florian/cat.jpg create mode 100644 Florian/cat.jpg.import create mode 100644 Florian/cool_camera.gd create mode 100644 Florian/cool_camera.gd.uid create mode 100644 Florian/cool_camera.tscn create mode 100644 Florian/node_3d.tscn create mode 100644 Florian/playerRigidbody.gd create mode 100644 Florian/playerRigidbody.gd.uid create mode 100644 Florian/point_thing.gd create mode 100644 Florian/point_thing.gd.uid create mode 100644 Florian/point_thing.tscn create mode 100644 Florian/sprite_3d.gd create mode 100644 Florian/sprite_3d.gd.uid create mode 100644 picture_takeables_array.gd create mode 100644 picture_takeables_array.gd.uid delete mode 100644 vehicle_body_3d.tscn diff --git a/AllaroundTheWorld.tscn b/AllaroundTheWorld.tscn index 83352b6..3cd894d 100644 --- a/AllaroundTheWorld.tscn +++ b/AllaroundTheWorld.tscn @@ -1,3 +1,3 @@ -[gd_scene format=3 uid="uid://dc7d5v6quedhk"] +[gd_scene load_steps=0 format=3 uid="uid://bmwgqig47nlbb"] [node name="Node2D" type="Node2D"] diff --git a/Florian/AllaroundTheWorld.tscn b/Florian/AllaroundTheWorld.tscn new file mode 100644 index 0000000..cb5dcb7 --- /dev/null +++ b/Florian/AllaroundTheWorld.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://dkvkfna14kln7"] + +[node name="Node2D" type="Node2D"] diff --git a/Florian/PlayerRigidbody.tscn b/Florian/PlayerRigidbody.tscn new file mode 100644 index 0000000..12c2d63 --- /dev/null +++ b/Florian/PlayerRigidbody.tscn @@ -0,0 +1,87 @@ +[gd_scene load_steps=6 format=3 uid="uid://crrco762ow56c"] + +[ext_resource type="Script" uid="uid://c35h32dniya44" path="res://Florian/playerRigidbody.gd" id="1_7u3v3"] +[ext_resource type="PackedScene" uid="uid://4hac7s0wvoye" path="res://Florian/cool_camera.tscn" id="2_leq5j"] + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_jbuyh"] +friction = 0.0 + +[sub_resource type="CylinderShape3D" id="CylinderShape3D_qqgab"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_n7bvk"] + +[node name="PlayerRigidbody" type="RigidBody3D"] +disable_mode = 2 +axis_lock_angular_x = true +axis_lock_angular_y = true +axis_lock_angular_z = true +mass = 20.0 +physics_material_override = SubResource("PhysicsMaterial_jbuyh") +custom_integrator = true +continuous_cd = true +script = ExtResource("1_7u3v3") + +[node name="BoundingBox" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0509262, 0) +shape = SubResource("CylinderShape3D_qqgab") + +[node name="RotationHelper" type="Node3D" parent="BoundingBox"] + +[node name="Interact" type="Node3D" parent="BoundingBox/RotationHelper"] + +[node name="InteractRay" type="RayCast3D" parent="BoundingBox/RotationHelper/Interact"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +target_position = Vector3(0, 0, -4) +collide_with_areas = true +collide_with_bodies = false +debug_shape_thickness = 1 + +[node name="CoolCamera" parent="BoundingBox/RotationHelper" instance=ExtResource("2_leq5j")] + +[node name="ThirdPerson" type="Node3D" parent="BoundingBox"] +transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 1.94907, 3) + +[node name="FirstPerson" type="Node3D" parent="BoundingBox"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) + +[node name="FloorChecks" type="Node3D" parent="BoundingBox"] + +[node name="Diagonals" type="Node3D" parent="BoundingBox/FloorChecks"] +transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 0, 0, 0) + +[node name="FloorRay" type="RayCast3D" parent="BoundingBox/FloorChecks/Diagonals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.45) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay2" type="RayCast3D" parent="BoundingBox/FloorChecks/Diagonals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.45) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay4" type="RayCast3D" parent="BoundingBox/FloorChecks/Diagonals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.45, 0, 0) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay3" type="RayCast3D" parent="BoundingBox/FloorChecks/Diagonals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.45, 0, 0) +target_position = Vector3(0, -1.1, 0) + +[node name="Cardinals" type="Node3D" parent="BoundingBox/FloorChecks"] + +[node name="FloorRay" type="RayCast3D" parent="BoundingBox/FloorChecks/Cardinals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.45) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay2" type="RayCast3D" parent="BoundingBox/FloorChecks/Cardinals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.45) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay4" type="RayCast3D" parent="BoundingBox/FloorChecks/Cardinals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.45, 0, 0) +target_position = Vector3(0, -1.1, 0) + +[node name="FloorRay3" type="RayCast3D" parent="BoundingBox/FloorChecks/Cardinals"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.45, 0, 0) +target_position = Vector3(0, -1.1, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("CapsuleMesh_n7bvk") diff --git a/Florian/cat.jpg b/Florian/cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bda2316a4a1942d6c41cb86f69065601377f128f GIT binary patch literal 30924 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 literal 0 HcmV?d00001 diff --git a/Florian/cat.jpg.import b/Florian/cat.jpg.import new file mode 100644 index 0000000..9e3c7a0 --- /dev/null +++ b/Florian/cat.jpg.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3y733ngio1nx" +path.s3tc="res://.godot/imported/cat.jpg-63f722852b826a4e9490fdc6ae6fc912.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://Florian/cat.jpg" +dest_files=["res://.godot/imported/cat.jpg-63f722852b826a4e9490fdc6ae6fc912.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/Florian/cool_camera.gd b/Florian/cool_camera.gd new file mode 100644 index 0000000..c283d2e --- /dev/null +++ b/Florian/cool_camera.gd @@ -0,0 +1,14 @@ +extends Node3D +@onready var label: Label = $Control/Label + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("take_picture"): + print("Taking Picture!!!") + var points_string = "" + var total_points = 0 + for takeable in PictureTakeablesArray.picture_takables: + print("Checking takeable") + if takeable.picture_taken(): + points_string += "%s %d\n" % [str(takeable.point_id), int(takeable.points_worth)] + total_points += takeable.points_worth + label.text = "%s\nTotal points: %d" % [points_string, total_points] diff --git a/Florian/cool_camera.gd.uid b/Florian/cool_camera.gd.uid new file mode 100644 index 0000000..c76f118 --- /dev/null +++ b/Florian/cool_camera.gd.uid @@ -0,0 +1 @@ +uid://dff1mtnypemb4 diff --git a/Florian/cool_camera.tscn b/Florian/cool_camera.tscn new file mode 100644 index 0000000..9269a8b --- /dev/null +++ b/Florian/cool_camera.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=2 format=3 uid="uid://4hac7s0wvoye"] + +[ext_resource type="Script" uid="uid://dff1mtnypemb4" path="res://Florian/cool_camera.gd" id="1_87r7f"] + +[node name="CoolCamera" type="Node3D"] +script = ExtResource("1_87r7f") + +[node name="Camera3D" type="Camera3D" parent="."] + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Label" type="Label" parent="Control"] +layout_mode = 0 +offset_right = 559.0 +offset_bottom = 250.0 +text = "Points worth: 0" diff --git a/Florian/node_3d.tscn b/Florian/node_3d.tscn new file mode 100644 index 0000000..8d45389 --- /dev/null +++ b/Florian/node_3d.tscn @@ -0,0 +1,74 @@ +[gd_scene load_steps=9 format=3 uid="uid://d1rip77vefx3i"] + +[ext_resource type="Texture2D" uid="uid://b3y733ngio1nx" path="res://Florian/cat.jpg" id="1_a202f"] +[ext_resource type="Script" uid="uid://bc47hy67mfo7v" path="res://Florian/sprite_3d.gd" id="2_a0tk4"] +[ext_resource type="PackedScene" uid="uid://crrco762ow56c" path="res://Florian/PlayerRigidbody.tscn" id="2_noarx"] +[ext_resource type="PackedScene" uid="uid://c8gnb0kut2n5h" path="res://Florian/point_thing.tscn" id="4_ylvgl"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_eral8"] +albedo_color = Color(0.243542, 0.196121, 0.0639371, 1) + +[sub_resource type="PlaneMesh" id="PlaneMesh_4xowi"] +material = SubResource("StandardMaterial3D_eral8") +size = Vector2(500, 500) + +[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_a202f"] + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_a0tk4"] +friction = 0.0 + +[node name="Node3D" type="Node3D"] + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("PlaneMesh_4xowi") + +[node name="StaticBody3D" type="StaticBody3D" parent="MeshInstance3D"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/StaticBody3D"] +shape = SubResource("WorldBoundaryShape3D_a202f") + +[node name="Sprite3D" type="Sprite3D" parent="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0) +texture = ExtResource("1_a202f") +script = ExtResource("2_a0tk4") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.829857, 0.557977, 0, -0.557977, 0.829857, 0, 0, 0) + +[node name="PlayerRigidbody" parent="." instance=ExtResource("2_noarx")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.187409, 7, 11.0325) +physics_material_override = SubResource("PhysicsMaterial_a0tk4") + +[node name="CSG" type="Node3D" parent="."] + +[node name="House1" type="Node3D" parent="CSG"] + +[node name="CSGCombiner3D" type="CSGCombiner3D" parent="CSG/House1"] +use_collision = true + +[node name="CSGBox3D" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.5, -13) +size = Vector3(22, 6, 1) + +[node name="CSGBox3D4" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.5, -36) +size = Vector3(22, 6, 1) + +[node name="CSGBox3D6" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 5, -24.5) +size = Vector3(22, 1, 24) + +[node name="CSGBox3D5" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 12.5, -4.25, -7.57661) +size = Vector3(4, 37, 1) + +[node name="CSGBox3D2" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 2.5, -24.5) +size = Vector3(1, 6, 24) + +[node name="CSGBox3D3" type="CSGBox3D" parent="CSG/House1/CSGCombiner3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11, 2.5, -24.5) +size = Vector3(1, 6, 24) + +[node name="PointThing" parent="." instance=ExtResource("4_ylvgl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 1, 5) diff --git a/Florian/playerRigidbody.gd b/Florian/playerRigidbody.gd new file mode 100644 index 0000000..0b57477 --- /dev/null +++ b/Florian/playerRigidbody.gd @@ -0,0 +1,150 @@ +class_name PlayerRB +extends RigidBody3D + +@onready var camera = $BoundingBox/RotationHelper/CoolCamera +@onready var rotation_helper = $BoundingBox/RotationHelper +@onready var bounding_box = $BoundingBox + +signal take_picture + +var max_speed = 10 +var acceleration = max_speed * 10 +var max_air_speed = 1 +var air_acceleration = max_speed * 20 + +var friction = 16 + +var jump_velocity = 5 + + +var currentSpeed = 0 +var vel : Vector3 +#var friction : Vector3 + +# Get the gravity from the project settings to be synced with RigidBody nodes. +var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") + +var MOUSE_SENSITIVITY = 0.001 + +func _ready(): + print("READY!") + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + pass + #Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +func _input(event): + if event is InputEventKey: + if event.keycode == KEY_ESCAPE && event.is_pressed(): + if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: + Input.mouse_mode = Input.MOUSE_MODE_VISIBLE + else: + Input.mouse_mode = Input.MOUSE_MODE_CAPTURED + + + if event is InputEventMouseMotion: + + rotation_helper.rotate_x(-deg_to_rad(event.relative.y * MOUSE_SENSITIVITY * 50)) + #print(event.relative.x * MOUSE_SENSITIVITY * -1) + bounding_box.rotate_y(event.relative.x * MOUSE_SENSITIVITY * -1) + #rotation_helper.rotate_y(deg_to_rad(event.relative.x * MOUSE_SENSITIVITY * -1)) + #var camera_rot = rotation_helper.rotation_degrees + #camera_rot.x = clamp(camera_rot.x, -70, 70) + #rotation_helper.rotation_degrees = camera_rot + + if event is InputEventKey: + #print(event.as_text_keycode()) + if event.as_text_keycode() == "T": + camera.transform = $BoundingBox/ThirdPerson.transform + elif event.as_text_keycode() == "F": + camera.transform = $BoundingBox/FirstPerson.transform + + + +func _physics_process(delta): + # Add the gravity. + + # Handle Jump. + if Input.is_action_pressed("jump") and is_on_floor(): + linear_velocity.y = jump_velocity + + var fB = 0 - Input.get_action_strength("forward") + Input.get_action_strength("backward", 1) + var lR = 0 - Input.get_action_strength("left", 1) + Input.get_action_strength("right", 1) + # Get the input direction and handle the movement/deceleration. + # As good practice, you should replace UI actions with custom gameplay actions. + var input_dir : Vector3 = Vector3(lR, 0, fB).rotated(Vector3.UP, bounding_box.rotation.y) + + var wishDir = input_dir.normalized() + + currentSpeed = linear_velocity.dot(wishDir) + #print("Current speed: ", currentSpeed) + #print(currentSpeed) + + if not is_on_floor() or Input.is_action_pressed("jump"): + linear_velocity.y -= gravity * delta #speed in the air + var addSpeed = clamp(max_air_speed - currentSpeed, 0, air_acceleration * delta) + #print(addSpeed) + linear_velocity += wishDir * addSpeed + else: + applyFriction(delta) #speed on floor + var addSpeed = clamp(max_speed - currentSpeed, 0, acceleration * delta) + linear_velocity += wishDir * addSpeed + + + + #print(Vector3(linear_velocity.x, 0, linear_velocity.z).length()) + + +func applyFriction(delta): + + linear_velocity.x = lerp(linear_velocity.x, 0.0, delta * friction) + linear_velocity.z = lerp(linear_velocity.z, 0.0, delta * friction) + return vel + +@onready var floor_checks = $BoundingBox/FloorChecks + + +var slope_limit_degrees = 45.0 +var slope_limit_dot = cos(deg_to_rad(slope_limit_degrees)) + +func is_on_floor() -> bool: + for directions in floor_checks.get_children(): + for floor_ray in directions.get_children(): + if floor_ray.is_colliding(): + var normal = floor_ray.get_collision_normal() + #print(floor_ray.get_collider()) + if(normal.dot(Vector3.UP) >= slope_limit_dot): + return true + continue + return false + +const MAX_STANDABLE_ANGLE = deg_to_rad(45) +const GROUND_CHECK_DISTANCE = 0.1 + +#func _check_on_ground() -> void: + #var space_state = get_world_3d().direct_space_state + # + ## Raycast straight down from the player + #var from = global_transform.origin + #var to = from - Vector3.UP * (GROUND_CHECK_DISTANCE + 2)#get_shape_radius()) + # + #var result = space_state.intersect_ray( + #PhysicsRayQueryParameters3D( + # + #) + #) +# + #if result: + #ground_normal = result.normal + # + ## Check slope angle + #var slope_angle = acos(clamp(ground_normal.dot(Vector3.UP), -1.0, 1.0)) + #var slope_ok = slope_angle <= MAX_STANDABLE_ANGLE +# + ## Check vertical velocity (like TF2: can't be going upward much) + #var vertical_vel_ok = linear_velocity.y <= 0.1 +# + ## Final check + #is_on_ground = slope_ok and vertical_vel_ok + #else: + #is_on_ground = false diff --git a/Florian/playerRigidbody.gd.uid b/Florian/playerRigidbody.gd.uid new file mode 100644 index 0000000..22e7fe7 --- /dev/null +++ b/Florian/playerRigidbody.gd.uid @@ -0,0 +1 @@ +uid://c35h32dniya44 diff --git a/Florian/point_thing.gd b/Florian/point_thing.gd new file mode 100644 index 0000000..d99e64e --- /dev/null +++ b/Florian/point_thing.gd @@ -0,0 +1,12 @@ +class_name PointPicture +extends Node3D +@onready var on_screen: VisibleOnScreenNotifier3D = $VisibleOnScreenNotifier3D +@export var points_worth = 10 +@export var point_id = "Debug Object" + +func _ready() -> void: + PictureTakeablesArray._add_point_picture(self) + +func picture_taken() -> bool: + print(on_screen.is_on_screen()) + return on_screen.is_on_screen() diff --git a/Florian/point_thing.gd.uid b/Florian/point_thing.gd.uid new file mode 100644 index 0000000..cf282db --- /dev/null +++ b/Florian/point_thing.gd.uid @@ -0,0 +1 @@ +uid://cyw0eu5pqd3wm diff --git a/Florian/point_thing.tscn b/Florian/point_thing.tscn new file mode 100644 index 0000000..cbd4b66 --- /dev/null +++ b/Florian/point_thing.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://c8gnb0kut2n5h"] + +[ext_resource type="Script" uid="uid://cyw0eu5pqd3wm" path="res://Florian/point_thing.gd" id="1_hr556"] + +[sub_resource type="BoxMesh" id="BoxMesh_hr556"] + +[node name="PointThing" type="Node3D"] +script = ExtResource("1_hr556") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +mesh = SubResource("BoxMesh_hr556") + +[node name="VisibleOnScreenNotifier3D" type="VisibleOnScreenNotifier3D" parent="."] diff --git a/Florian/sprite_3d.gd b/Florian/sprite_3d.gd new file mode 100644 index 0000000..5f3422b --- /dev/null +++ b/Florian/sprite_3d.gd @@ -0,0 +1,4 @@ +extends Sprite3D + +func _physics_process(delta: float) -> void: + self.position.x += 0.1 diff --git a/Florian/sprite_3d.gd.uid b/Florian/sprite_3d.gd.uid new file mode 100644 index 0000000..6a6725a --- /dev/null +++ b/Florian/sprite_3d.gd.uid @@ -0,0 +1 @@ +uid://bc47hy67mfo7v diff --git a/picture_takeables_array.gd b/picture_takeables_array.gd new file mode 100644 index 0000000..845f56a --- /dev/null +++ b/picture_takeables_array.gd @@ -0,0 +1,8 @@ +extends Node + +var picture_takables : Array[PointPicture] = [] + +func _add_point_picture(point_picture: PointPicture): + print("Adding picture takeable") + picture_takables.append(point_picture) + print(len(picture_takables)) diff --git a/picture_takeables_array.gd.uid b/picture_takeables_array.gd.uid new file mode 100644 index 0000000..67a477e --- /dev/null +++ b/picture_takeables_array.gd.uid @@ -0,0 +1 @@ +uid://baxs3gpdthwf1 diff --git a/project.godot b/project.godot index 35a17ba..db2b010 100644 --- a/project.godot +++ b/project.godot @@ -11,5 +11,43 @@ config_version=5 [application] config/name="AllAroundTheWorld" +run/main_scene="uid://d1rip77vefx3i" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" + +[autoload] + +PictureTakeablesArray="*res://picture_takeables_array.gd" + +[input] + +forward={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +] +} +backward={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +] +} +left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +] +} +right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +take_picture={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} diff --git a/vehicle_body_3d.tscn b/vehicle_body_3d.tscn deleted file mode 100644 index c3b8fc9..0000000 --- a/vehicle_body_3d.tscn +++ /dev/null @@ -1,7 +0,0 @@ -[gd_scene format=3 uid="uid://cb5cav8r8f47b"] - -[node name="VehicleBody3D" type="VehicleBody3D"] - -[node name="CSG" type="Node3D" parent="."] - -[node name="CSGBox3D" type="CSGBox3D" parent="CSG"]