diff --git a/models/stalagmite.gltf.import b/models/stalagmite.gltf.import index 1e3d221..6eb2b03 100644 --- a/models/stalagmite.gltf.import +++ b/models/stalagmite.gltf.import @@ -47,7 +47,9 @@ _subresources={ }, "nodes": { "PATH:mesh": { -"generate/physics": true +"generate/physics": true, +"physics/layer": 255, +"physics/mask": 255 } } } diff --git a/scenes/enemies/slime.tscn b/scenes/enemies/slime.tscn new file mode 100644 index 0000000..730f5dc --- /dev/null +++ b/scenes/enemies/slime.tscn @@ -0,0 +1,175 @@ +[gd_scene format=3 uid="uid://dkiydumtthgk7"] + +[ext_resource type="Script" uid="uid://c7gns73bldktx" path="res://scripts/slime.gd" id="1_4h4y0"] +[ext_resource type="Texture2D" uid="uid://b6krbvbco0jt6" path="res://textures/shadow.png" id="2_b58ev"] +[ext_resource type="Texture2D" uid="uid://b8sc3vq5pmwil" path="res://textures/slime.png" id="3_ankfk"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0tnpc"] +radius = 0.25 +height = 0.5 + +[sub_resource type="Animation" id="Animation_0tnpc"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Body:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Body:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_vtaks"] +resource_name = "idle" +length = 2.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Body:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(1, 0.8, 1), Vector3(1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Body:position") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, -0.03, 0), Vector3(0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_kvpfn"] +resource_name = "jump" +length = 0.6 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Body:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(1, 1, 1), Vector3(1.4, 0.6, 1), Vector3(0.7, 1.3, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Body:position") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5, 0.6), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, -0.09, 0), Vector3(0, 0.05, 0)] +} + +[sub_resource type="Animation" id="Animation_dinhu"] +resource_name = "leap" +length = 0.3 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Body:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = false +tracks/0/keys = { +"times": PackedFloat32Array(0.03333336, 0.15, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0.7, 1.3, 1), Vector3(0.65, 1.35, 1), Vector3(0.7, 1.3, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Body:position") +tracks/1/interp = 2 +tracks/1/loop_wrap = false +tracks/1/keys = { +"times": PackedFloat32Array(0.03333336), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0.05, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kvuet"] +_data = { +&"RESET": SubResource("Animation_0tnpc"), +&"idle": SubResource("Animation_vtaks"), +&"jump": SubResource("Animation_kvpfn"), +&"leap": SubResource("Animation_dinhu") +} + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vtaks"] +radius = 0.2 +height = 0.4 + +[node name="Slime" type="CharacterBody3D" unique_id=393738189] +collision_layer = 2 +collision_mask = 2 +script = ExtResource("1_4h4y0") + +[node name="Shadow" type="Sprite3D" parent="." unique_id=538719324] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) +modulate = Color(1, 1, 1, 0.5764706) +pixel_size = 0.03 +axis = 1 +texture_filter = 0 +texture = ExtResource("2_b58ev") + +[node name="Collision" type="CollisionShape3D" parent="." unique_id=1791576244] +shape = SubResource("CapsuleShape3D_0tnpc") + +[node name="Floorcast" type="RayCast3D" parent="." unique_id=216872080] +target_position = Vector3(0, -16, 0) + +[node name="HealthLabel" type="Label3D" parent="." unique_id=933867608] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8399999, 0) +pixel_size = 0.01 +billboard = 1 +text = "hello!" + +[node name="Body" type="Sprite3D" parent="." unique_id=1136011871] +transform = Transform3D(0.7, 0, 0, 0, 1.3, 0, 0, 0, 1, 0, 0.05, 0) +pixel_size = 0.03 +texture_filter = 0 +texture = ExtResource("3_ankfk") + +[node name="Animator" type="AnimationPlayer" parent="Body" unique_id=823259126] +root_node = NodePath("../..") +libraries/ = SubResource("AnimationLibrary_kvuet") + +[node name="HitCollision" type="Area3D" parent="." unique_id=897519833] + +[node name="Collision" type="CollisionShape3D" parent="HitCollision" unique_id=66683269] +shape = SubResource("CapsuleShape3D_vtaks") +debug_color = Color(0.9020641, 0, 0.13776582, 0.41960785) diff --git a/scenes/game.tscn b/scenes/game.tscn index 460afa8..f7f8d3b 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -6,9 +6,7 @@ [ext_resource type="Texture2D" uid="uid://b6krbvbco0jt6" path="res://textures/shadow.png" id="4_lbhrr"] [ext_resource type="PackedScene" uid="uid://cnii80nh1mxr2" path="res://scenes/assets/dreamer_body.tscn" id="4_p57ef"] [ext_resource type="PackedScene" uid="uid://b0kty7juk7rfo" path="res://models/stalagmite.gltf" id="5_iywne"] -[ext_resource type="Script" uid="uid://ddhrcj4ljm446" path="res://scripts/test_enemy.gd" id="6_u5sy4"] -[ext_resource type="Script" uid="uid://c7gns73bldktx" path="res://scripts/slime.gd" id="7_0tnpc"] -[ext_resource type="Texture2D" uid="uid://b8sc3vq5pmwil" path="res://textures/slime.png" id="8_vtaks"] +[ext_resource type="PackedScene" path="res://scenes/enemies/slime.tscn" id="6_u5sy4"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lbhrr"] albedo_color = Color(0.61, 0.28791997, 0.17079999, 1) @@ -24,145 +22,19 @@ size = Vector3(1.2, 1, 1.3) radius = 0.15 height = 1.0 -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0tnpc"] -radius = 0.25 -height = 0.5 - -[sub_resource type="Animation" id="Animation_0tnpc"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Body:scale") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(1, 1, 1)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Body:position") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(0, 0, 0)] -} - -[sub_resource type="Animation" id="Animation_vtaks"] -resource_name = "idle" -length = 2.0 -loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Body:scale") -tracks/0/interp = 2 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 1, 2), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector3(1, 1, 1), Vector3(1, 0.8, 1), Vector3(1, 1, 1)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Body:position") -tracks/1/interp = 2 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 1, 2), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector3(0, 0, 0), Vector3(0, -0.03, 0), Vector3(0, 0, 0)] -} - -[sub_resource type="Animation" id="Animation_kvpfn"] -resource_name = "jump" -length = 0.6 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Body:scale") -tracks/0/interp = 2 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.5, 0.6), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector3(1, 1, 1), Vector3(1.4, 0.6, 1), Vector3(0.7, 1.3, 1)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Body:position") -tracks/1/interp = 2 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 0.5, 0.6), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector3(0, 0, 0), Vector3(0, -0.09, 0), Vector3(0, 0.05, 0)] -} - -[sub_resource type="Animation" id="Animation_dinhu"] -resource_name = "leap" -length = 0.3 -loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Body:scale") -tracks/0/interp = 2 -tracks/0/loop_wrap = false -tracks/0/keys = { -"times": PackedFloat32Array(0.03333336, 0.15, 0.3), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector3(0.7, 1.3, 1), Vector3(0.65, 1.35, 1), Vector3(0.7, 1.3, 1)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Body:position") -tracks/1/interp = 2 -tracks/1/loop_wrap = false -tracks/1/keys = { -"times": PackedFloat32Array(0.03333336), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(0, 0.05, 0)] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_kvuet"] -_data = { -&"RESET": SubResource("Animation_0tnpc"), -&"idle": SubResource("Animation_vtaks"), -&"jump": SubResource("Animation_kvpfn"), -&"leap": SubResource("Animation_dinhu") -} - -[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vtaks"] -radius = 0.3 -height = 0.6 - [node name="Game" type="Node3D" unique_id=1358608749] script = ExtResource("1_gee14") [node name="CSGBox3D" type="CSGBox3D" parent="." unique_id=1781956012] +layers = 1023 use_collision = true +collision_layer = 255 +collision_mask = 255 size = Vector3(16, 1, 16) material = SubResource("StandardMaterial3D_lbhrr") [node name="PlayerCamera" type="Camera3D" parent="." unique_id=1101523944] -transform = Transform3D(0.7071067, -0.49999994, 0.49999994, 0, 0.7071067, 0.7071067, -0.7071067, -0.49999994, 0.49999994, 4, 8.5, 4) +transform = Transform3D(0.7071067, -0.40557978, 0.5792279, 0, 0.819152, 0.5735764, -0.7071067, -0.40557978, 0.5792279, 4, 6.5, 4) environment = SubResource("Environment_uwrxv") attributes = SubResource("CameraAttributesPractical_yqjtg") fov = 65.0 @@ -174,8 +46,10 @@ script = ExtResource("1_yqjtg") [node name="HitCollision" type="Area3D" parent="Player" unique_id=1708789602] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1500001, 0) +collision_layer = 0 +collision_mask = 2 -[node name="CollisionShape3D" type="CollisionShape3D" parent="Player/HitCollision" unique_id=653786925] +[node name="Shape" type="CollisionShape3D" parent="Player/HitCollision" unique_id=653786925] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0, 0) shape = SubResource("BoxShape3D_0tnpc") @@ -195,74 +69,12 @@ shape = SubResource("CapsuleShape3D_yqjtg") [node name="Floorcast" type="RayCast3D" parent="Player" unique_id=991770843] target_position = Vector3(0, -16, 0) -[node name="EnemyTest" type="CharacterBody3D" parent="." unique_id=109591127] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, 0) -script = ExtResource("6_u5sy4") - -[node name="DreamerBody" parent="EnemyTest" unique_id=780505789 instance=ExtResource("4_p57ef")] - -[node name="Shadow" type="Sprite3D" parent="EnemyTest" unique_id=521501658] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) -modulate = Color(1, 1, 1, 0.5764706) -pixel_size = 0.03 -axis = 1 -texture_filter = 0 -texture = ExtResource("4_lbhrr") - -[node name="Collision" type="CollisionShape3D" parent="EnemyTest" unique_id=1794588893] -shape = SubResource("CapsuleShape3D_yqjtg") - -[node name="Floorcast" type="RayCast3D" parent="EnemyTest" unique_id=1411083951] -target_position = Vector3(0, -16, 0) - -[node name="HealthLabel" type="Label3D" parent="EnemyTest" unique_id=1869384013] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8399999, 0) -pixel_size = 0.01 -billboard = 1 -text = "hello!" - -[node name="Slime" type="CharacterBody3D" parent="." unique_id=1509486839] +[node name="Slime" parent="." unique_id=393738189 instance=ExtResource("6_u5sy4")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, -3.81) -script = ExtResource("7_0tnpc") - -[node name="Shadow" type="Sprite3D" parent="Slime" unique_id=45998645] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) -modulate = Color(1, 1, 1, 0.5764706) -pixel_size = 0.03 -axis = 1 -texture_filter = 0 -texture = ExtResource("4_lbhrr") - -[node name="Collision" type="CollisionShape3D" parent="Slime" unique_id=225714626] -shape = SubResource("CapsuleShape3D_0tnpc") - -[node name="Floorcast" type="RayCast3D" parent="Slime" unique_id=1647004546] -target_position = Vector3(0, -16, 0) - -[node name="HealthLabel" type="Label3D" parent="Slime" unique_id=771436172] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.8399999, 0) -pixel_size = 0.01 -billboard = 1 -text = "hello!" - -[node name="Body" type="Sprite3D" parent="Slime" unique_id=212174649] -pixel_size = 0.03 -texture_filter = 0 -texture = ExtResource("8_vtaks") - -[node name="Animator" type="AnimationPlayer" parent="Slime/Body" unique_id=93116103] -root_node = NodePath("../..") -libraries/ = SubResource("AnimationLibrary_kvuet") - -[node name="HitCollision" type="Area3D" parent="Slime" unique_id=1071990193] - -[node name="Collision" type="CollisionShape3D" parent="Slime/HitCollision" unique_id=502790258] -shape = SubResource("CapsuleShape3D_vtaks") -debug_color = Color(0.9020641, 0, 0.13776582, 0.41960785) [node name="Sun" type="DirectionalLight3D" parent="." unique_id=1000747668] transform = Transform3D(5.337265e-08, 0.90171933, -0.4323222, -0.3453802, 0.40571806, 0.8462301, 0.93846303, 0.14931537, 0.31143594, 0, 0, 0) shadow_enabled = true -[node name="blockbench_export" parent="." unique_id=1479648799 instance=ExtResource("5_iywne")] +[node name="Stalagmite" parent="." unique_id=39322424 instance=ExtResource("5_iywne")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48141205, 3) diff --git a/scripts/player.gd b/scripts/player.gd index f1372d5..15eceaf 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -1,7 +1,7 @@ extends CharacterBody3D const SPEED = 3.5 -const JUMP_VELOCITY = 4.5 +const JUMP_VELOCITY = 3.5 var walk_animation_time = 0 var face_rotation = null @@ -57,12 +57,17 @@ func _physics_process(delta: float) -> void: else: $DreamerBody.rotation.y = face_rotation - if combatable: - $DreamerBody/Body/ArmPivot.rotation.z = player_position.angle_to_point(get_viewport().get_mouse_position()) - $HitCollision.rotation.y = -$DreamerBody/Body/ArmPivot.rotation.z + face_rotation + var mouse_point_angle = player_position.angle_to_point(get_viewport().get_mouse_position()) + $DreamerBody/Body/ArmPivot.rotation.z = mouse_point_angle + $HitCollision.rotation.y = -mouse_point_angle + face_rotation - if ($DreamerBody/Body/ArmPivot.rotation_degrees.z < -90) or ($DreamerBody/Body/ArmPivot.rotation_degrees.z > 90): + if abs(rad_to_deg(mouse_point_angle) - (-90)) < 50: + $HitCollision/Shape.shape.size.x = 1.5 + else: + $HitCollision/Shape.shape.size.x = 1.2 + + if (rad_to_deg(mouse_point_angle) < -90) or (rad_to_deg(mouse_point_angle) > 90): face_left = true $DreamerBody/Body/ArmPivot.scale.y = -1 $DreamerBody/Body/ArmPivot.scale.x = -1 diff --git a/scripts/slime.gd b/scripts/slime.gd index 2a44c44..82890b9 100644 --- a/scripts/slime.gd +++ b/scripts/slime.gd @@ -40,6 +40,10 @@ func _ready() -> void: $Body/Animator.play("idle") func _physics_process(delta: float) -> void: + if health <= 0: + queue_free() + return + state_timer -= delta if state_timer < 0: @@ -62,7 +66,7 @@ func _physics_process(delta: float) -> void: $Body/Animator.play("idle") elif (state == STATE_HIT) and is_on_floor(): state = STATE_IDLE - state_timer = 0 + state_timer = 0.5 $Body/Animator.play("idle") diff --git a/textures/test-sword.png b/textures/test-sword.png new file mode 100644 index 0000000..eda81be Binary files /dev/null and b/textures/test-sword.png differ diff --git a/textures/test-sword.png.import b/textures/test-sword.png.import new file mode 100644 index 0000000..8e371f4 --- /dev/null +++ b/textures/test-sword.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cvtipichutylm" +path="res://.godot/imported/test-sword.png-66731188822b2310b04dd803d25c4b2d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://textures/test-sword.png" +dest_files=["res://.godot/imported/test-sword.png-66731188822b2310b04dd803d25c4b2d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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