From 82774ae786d439ff038513e5babe5317d410d6d5 Mon Sep 17 00:00:00 2001 From: Victor Turgeon Date: Tue, 11 Oct 2022 19:11:46 -0400 Subject: [PATCH] Basic launch --- Player.gd | 52 +++++++++++++++++++++++++++------------ Player.tscn | 24 +++++++++++++++++- Scenes/Enemy.gd | 25 +++++++++++++++++++ Scenes/Enemy.tscn | 61 +++++++++++++++++++++++++++++++++++++++++----- Scripts/HitBox.gd | 16 ++++++++++++ Scripts/HurtBox.gd | 20 +++++++++++++++ Test_Scene.tscn | 9 +++++++ project.godot | 28 +++++++++++++++++++++ 8 files changed, 213 insertions(+), 22 deletions(-) create mode 100644 Scenes/Enemy.gd create mode 100644 Scripts/HitBox.gd create mode 100644 Scripts/HurtBox.gd diff --git a/Player.gd b/Player.gd index 3ab61a5..b55c7ac 100644 --- a/Player.gd +++ b/Player.gd @@ -10,7 +10,8 @@ export var jump = 30 export var slapkill = 0.8 var slap = 0.0 var chargeSlap = false -var isSlap = false; +var isSlap = false +var can_slap = true export var mouse_sensitivity = 0.03 @@ -23,12 +24,16 @@ var movement = Vector3() var gravity_vec = Vector3() onready var head = $Head +onready var camera = $Head/Camera +onready var point_to = $Head/Camera/PointTo onready var ground_check = $GroundCheck onready var slap_gauge = $HUD/PlayerLayer/ActualHUD/SlapGauge onready var slap_animator = $HandMovement onready var Menu = $HUD/MenuLayer/Start onready var AudioSlap = $AudioSlap onready var AudioMegaSlap = $AudioMegaSlap +onready var hitbox = $Head/Camera/HitBox +onready var slap_cooldown = $SlapCooldown func _ready(): slap_animator.current_animation = "basic_slap" @@ -67,6 +72,11 @@ func _physics_process(delta): if Input.is_action_just_pressed("jump") and (is_on_floor() or ground_check.is_colliding()): gravity_vec = Vector3.UP * jump + + if Input.is_action_just_pressed("crouch"): + head.translate(Vector3.DOWN) + if Input.is_action_just_released("crouch"): + head.translate(Vector3.UP) if Input.is_action_pressed("move_forward"): direction -= transform.basis.z @@ -78,22 +88,28 @@ func _physics_process(delta): direction += transform.basis.x # Slappening - if Input.is_action_pressed("slap"): - if slap < 0.01: - chargeSlap = true; - elif Input.is_action_just_released("slap"): - if chargeSlap: - isSlap = true; - chargeSlap = false; - else: - isSlap = false; - - if isSlap: - if slap >= slapkill: - AudioMegaSlap.play() + if can_slap: + if Input.is_action_pressed("slap"): + if slap < 0.01: + chargeSlap = true; + elif Input.is_action_just_released("slap"): + if chargeSlap: + isSlap = true; + chargeSlap = false; + can_slap = false + slap_cooldown.start(0.25) else: - AudioSlap.play() + isSlap = false; + if isSlap: + if slap >= slapkill: + AudioMegaSlap.play() + else: + AudioSlap.play() + hitbox.monitorable = true + hitbox.slap_level = slap + hitbox.slap_vector = point_to.get_global_transform().origin - camera.get_global_transform().origin + if (chargeSlap): slap += delta * 1.5; else: @@ -116,3 +132,9 @@ func _physics_process(delta): # warning-ignore:return_value_discarded move_and_slide(movement, Vector3.UP) + + +func _on_SlapCooldown_timeout(): + can_slap = true + slap_cooldown.stop() + hitbox.monitorable = false diff --git a/Player.tscn b/Player.tscn index c753af9..006e8cd 100644 --- a/Player.tscn +++ b/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=14 format=2] [ext_resource path="res://Player.gd" type="Script" id=1] [ext_resource path="res://BlenderStuff/Hand/protohand.obj" type="ArrayMesh" id=2] @@ -6,12 +6,16 @@ [ext_resource path="res://HUD.tscn" type="PackedScene" id=4] [ext_resource path="res://Audio/80-s-clap.wav" type="AudioStream" id=5] [ext_resource path="res://Audio/MegaSlap.wav" type="AudioStream" id=6] +[ext_resource path="res://Scripts/HitBox.gd" type="Script" id=7] [sub_resource type="CapsuleShape" id=2] height = 3.0 [sub_resource type="CylinderShape" id=3] +[sub_resource type="BoxShape" id=7] +extents = Vector3( 0.797679, 1, 1 ) + [sub_resource type="SpatialMaterial" id=4] flags_no_depth_test = true albedo_texture = ExtResource( 3 ) @@ -101,6 +105,19 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.84218, 0 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0154071, 0.355, -0.246618 ) fov = 80.0 +[node name="HitBox" type="Area" parent="Head/Camera"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0154071, -0.355, 0.246618 ) +monitorable = false +script = ExtResource( 7 ) +hitbox_type = 1 + +[node name="CollisionShape" type="CollisionShape" parent="Head/Camera/HitBox"] +transform = Transform( 1, 0, 0, 0, 0.3, 0, 0, 0, 0.8, 0, 0.414722, -1.5988 ) +shape = SubResource( 7 ) + +[node name="PointTo" type="Spatial" parent="Head/Camera"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1 ) + [node name="HandParent" type="Spatial" parent="Head"] transform = Transform( 0.0807126, 0.49343, -0.00351894, 0.445393, -0.0713166, 0.215728, 0.212391, -0.0379586, -0.451053, 0.736, -0.075, -1.998 ) @@ -133,3 +150,8 @@ doppler_tracking = 2 [node name="Music" type="AudioStreamPlayer" parent="."] volume_db = 13.983 autoplay = true + +[node name="SlapCooldown" type="Timer" parent="."] +wait_time = 0.5 + +[connection signal="timeout" from="SlapCooldown" to="." method="_on_SlapCooldown_timeout"] diff --git a/Scenes/Enemy.gd b/Scenes/Enemy.gd new file mode 100644 index 0000000..b4e9543 --- /dev/null +++ b/Scenes/Enemy.gd @@ -0,0 +1,25 @@ +extends KinematicBody + +onready var animation_player = $AnimationPlayer + +var hit_acceleration = 10 +var hit_speed = 100 + +var velocity = Vector3() +var movement = Vector3() +var direction = Vector3() +var gravity_vec = Vector3() + +func _physics_process(delta): + + velocity = velocity.linear_interpolate(direction * hit_speed, hit_acceleration * delta) + + movement.x = velocity.x + movement.y = velocity.y + movement.z = velocity.z + + move_and_slide(movement, Vector3.UP) + +func get_slapped(slap_level, slap_vector): + animation_player.play("head_wobble") + direction = slap_vector diff --git a/Scenes/Enemy.tscn b/Scenes/Enemy.tscn index 686c358..d59223b 100644 --- a/Scenes/Enemy.tscn +++ b/Scenes/Enemy.tscn @@ -1,21 +1,70 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://BlenderStuff/protoenemy.obj" type="ArrayMesh" id=1] +[ext_resource path="res://Scenes/Enemy.gd" type="Script" id=2] +[ext_resource path="res://Scripts/HurtBox.gd" type="Script" id=3] [sub_resource type="BoxShape" id=1] -[sub_resource type="BoxShape" id=2] +[sub_resource type="CapsuleShape" id=2] +height = 2.5 + +[sub_resource type="CylinderShape" id=3] + +[sub_resource type="Animation" id=4] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("MeshInstance:rotation_degrees") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector3( 0, 0, -15 ) ] +} + +[sub_resource type="Animation" id=5] +resource_name = "head_wobble" +length = 0.5 +tracks/0/type = "value" +tracks/0/path = NodePath("MeshInstance:rotation_degrees") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.3, 0.5 ), +"transitions": PoolRealArray( 1, 2.07053, 1, 0.482968 ), +"update": 0, +"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 0, -15 ), Vector3( 0, 0, 15 ), Vector3( 0, 0, 0 ) ] +} [node name="Enemy" type="KinematicBody"] +script = ExtResource( 2 ) [node name="MeshInstance" type="MeshInstance" parent="."] transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0, 0 ) mesh = ExtResource( 1 ) -[node name="BodyCollision" type="CollisionShape" parent="."] -transform = Transform( 0.914478, 0, 0, 0, 1.50713, 0, 0, 0, 0.383312, 0, -0.479353, 0 ) +[node name="Head" type="Area" parent="."] +script = ExtResource( 3 ) + +[node name="HeadCollision" type="CollisionShape" parent="Head"] +transform = Transform( 0.432688, 0, 0, 0, 2.49394, 0, 0, 0, 0.432688, 0, -0.0876949, 0 ) shape = SubResource( 1 ) -[node name="Head" type="CollisionShape" parent="."] -transform = Transform( 0.528959, 0, 0, 0, 0.728767, 0, 0, 0, 0.528959, 0, 1.87623, 0 ) +[node name="EnemyCollision" type="CollisionShape" parent="."] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.094023, 0 ) shape = SubResource( 2 ) + +[node name="EnemyFeet" type="CollisionShape" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.59606, 0 ) +shape = SubResource( 3 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +reset_on_save = false +anims/RESET = SubResource( 4 ) +anims/head_wobble = SubResource( 5 ) diff --git a/Scripts/HitBox.gd b/Scripts/HitBox.gd new file mode 100644 index 0000000..944a619 --- /dev/null +++ b/Scripts/HitBox.gd @@ -0,0 +1,16 @@ +class_name HitBox +extends Area + +enum HitboxType{ + Unassigned, + Slap, + Projectile, +} + +export var hitbox_type = HitboxType.Unassigned +var slap_level = 0 +var slap_vector = Vector3() + +func _init(): + collision_layer = 2 + collision_mask = 0 diff --git a/Scripts/HurtBox.gd b/Scripts/HurtBox.gd new file mode 100644 index 0000000..863afdd --- /dev/null +++ b/Scripts/HurtBox.gd @@ -0,0 +1,20 @@ +class_name HurtBox +extends Area + +func _init(): + collision_layer = 0 + collision_mask = 2 + +func _ready(): + connect("area_entered",self,"_on_area_entered") + +func _on_area_entered(hitbox: HitBox): + if hitbox == null: + return + if hitbox.hitbox_type == hitbox.HitboxType.Unassigned: + return + + if hitbox.hitbox_type == hitbox.HitboxType.Slap and owner.has_method("get_slapped"): + owner.get_slapped(hitbox.slap_level, hitbox.slap_vector) + elif hitbox.hitbox_type == hitbox.HitboxType.Projectile and owner.has_method("get_shot"): + owner.get_shot() diff --git a/Test_Scene.tscn b/Test_Scene.tscn index c21408c..cfe1aa7 100644 --- a/Test_Scene.tscn +++ b/Test_Scene.tscn @@ -69,3 +69,12 @@ shadow_enabled = true [node name="Enemy" parent="." instance=ExtResource( 5 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.367474, 2.61222, -26.0531 ) + +[node name="Enemy2" parent="." instance=ExtResource( 5 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -7.44657, 2.62177, -26.1041 ) + +[node name="Enemy3" parent="." instance=ExtResource( 5 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -16.3837, 2.53916, -26.4067 ) + +[node name="Enemy4" parent="." instance=ExtResource( 5 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5.17381, 2.57569, -26.2299 ) diff --git a/project.godot b/project.godot index 2648ef6..ce1f13a 100644 --- a/project.godot +++ b/project.godot @@ -8,6 +8,22 @@ config_version=4 +_global_script_classes=[ { +"base": "Area", +"class": "HitBox", +"language": "GDScript", +"path": "res://Scripts/HitBox.gd" +}, { +"base": "Area", +"class": "HurtBox", +"language": "GDScript", +"path": "res://Scripts/HurtBox.gd" +} ] +_global_script_class_icons={ +"HitBox": "", +"HurtBox": "" +} + [application] config/name="Slap" @@ -74,6 +90,18 @@ escape={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } +crouch={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777238,"physical_scancode":0,"unicode":0,"echo":false,"script":null) + ] +} + +[layer_names] + +3d_render/layer_1="world" +3d_render/layer_2="hitboxes" +3d_physics/layer_1="world" +3d_physics/layer_2="hitboxes" [physics]