Basic launch

This commit is contained in:
Victor Turgeon 2022-10-11 19:11:46 -04:00
parent 463f1c5cda
commit 82774ae786
8 changed files with 213 additions and 22 deletions

View File

@ -10,7 +10,8 @@ export var jump = 30
export var slapkill = 0.8 export var slapkill = 0.8
var slap = 0.0 var slap = 0.0
var chargeSlap = false var chargeSlap = false
var isSlap = false; var isSlap = false
var can_slap = true
export var mouse_sensitivity = 0.03 export var mouse_sensitivity = 0.03
@ -23,12 +24,16 @@ var movement = Vector3()
var gravity_vec = Vector3() var gravity_vec = Vector3()
onready var head = $Head onready var head = $Head
onready var camera = $Head/Camera
onready var point_to = $Head/Camera/PointTo
onready var ground_check = $GroundCheck onready var ground_check = $GroundCheck
onready var slap_gauge = $HUD/PlayerLayer/ActualHUD/SlapGauge onready var slap_gauge = $HUD/PlayerLayer/ActualHUD/SlapGauge
onready var slap_animator = $HandMovement onready var slap_animator = $HandMovement
onready var Menu = $HUD/MenuLayer/Start onready var Menu = $HUD/MenuLayer/Start
onready var AudioSlap = $AudioSlap onready var AudioSlap = $AudioSlap
onready var AudioMegaSlap = $AudioMegaSlap onready var AudioMegaSlap = $AudioMegaSlap
onready var hitbox = $Head/Camera/HitBox
onready var slap_cooldown = $SlapCooldown
func _ready(): func _ready():
slap_animator.current_animation = "basic_slap" slap_animator.current_animation = "basic_slap"
@ -68,6 +73,11 @@ func _physics_process(delta):
if Input.is_action_just_pressed("jump") and (is_on_floor() or ground_check.is_colliding()): if Input.is_action_just_pressed("jump") and (is_on_floor() or ground_check.is_colliding()):
gravity_vec = Vector3.UP * jump 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"): if Input.is_action_pressed("move_forward"):
direction -= transform.basis.z direction -= transform.basis.z
elif Input.is_action_pressed("move_backward"): elif Input.is_action_pressed("move_backward"):
@ -78,6 +88,7 @@ func _physics_process(delta):
direction += transform.basis.x direction += transform.basis.x
# Slappening # Slappening
if can_slap:
if Input.is_action_pressed("slap"): if Input.is_action_pressed("slap"):
if slap < 0.01: if slap < 0.01:
chargeSlap = true; chargeSlap = true;
@ -85,6 +96,8 @@ func _physics_process(delta):
if chargeSlap: if chargeSlap:
isSlap = true; isSlap = true;
chargeSlap = false; chargeSlap = false;
can_slap = false
slap_cooldown.start(0.25)
else: else:
isSlap = false; isSlap = false;
@ -93,6 +106,9 @@ func _physics_process(delta):
AudioMegaSlap.play() AudioMegaSlap.play()
else: else:
AudioSlap.play() 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): if (chargeSlap):
slap += delta * 1.5; slap += delta * 1.5;
@ -116,3 +132,9 @@ func _physics_process(delta):
# warning-ignore:return_value_discarded # warning-ignore:return_value_discarded
move_and_slide(movement, Vector3.UP) move_and_slide(movement, Vector3.UP)
func _on_SlapCooldown_timeout():
can_slap = true
slap_cooldown.stop()
hitbox.monitorable = false

View File

@ -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://Player.gd" type="Script" id=1]
[ext_resource path="res://BlenderStuff/Hand/protohand.obj" type="ArrayMesh" id=2] [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://HUD.tscn" type="PackedScene" id=4]
[ext_resource path="res://Audio/80-s-clap.wav" type="AudioStream" id=5] [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://Audio/MegaSlap.wav" type="AudioStream" id=6]
[ext_resource path="res://Scripts/HitBox.gd" type="Script" id=7]
[sub_resource type="CapsuleShape" id=2] [sub_resource type="CapsuleShape" id=2]
height = 3.0 height = 3.0
[sub_resource type="CylinderShape" id=3] [sub_resource type="CylinderShape" id=3]
[sub_resource type="BoxShape" id=7]
extents = Vector3( 0.797679, 1, 1 )
[sub_resource type="SpatialMaterial" id=4] [sub_resource type="SpatialMaterial" id=4]
flags_no_depth_test = true flags_no_depth_test = true
albedo_texture = ExtResource( 3 ) 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 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0154071, 0.355, -0.246618 )
fov = 80.0 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"] [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 ) 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="."] [node name="Music" type="AudioStreamPlayer" parent="."]
volume_db = 13.983 volume_db = 13.983
autoplay = true autoplay = true
[node name="SlapCooldown" type="Timer" parent="."]
wait_time = 0.5
[connection signal="timeout" from="SlapCooldown" to="." method="_on_SlapCooldown_timeout"]

25
Scenes/Enemy.gd Normal file
View File

@ -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

View File

@ -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://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=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"] [node name="Enemy" type="KinematicBody"]
script = ExtResource( 2 )
[node name="MeshInstance" type="MeshInstance" parent="."] [node name="MeshInstance" type="MeshInstance" parent="."]
transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0, 0 ) transform = Transform( 0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0, 0 )
mesh = ExtResource( 1 ) mesh = ExtResource( 1 )
[node name="BodyCollision" type="CollisionShape" parent="."] [node name="Head" type="Area" parent="."]
transform = Transform( 0.914478, 0, 0, 0, 1.50713, 0, 0, 0, 0.383312, 0, -0.479353, 0 ) 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 ) shape = SubResource( 1 )
[node name="Head" type="CollisionShape" parent="."] [node name="EnemyCollision" type="CollisionShape" parent="."]
transform = Transform( 0.528959, 0, 0, 0, 0.728767, 0, 0, 0, 0.528959, 0, 1.87623, 0 ) transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.094023, 0 )
shape = SubResource( 2 ) 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 )

16
Scripts/HitBox.gd Normal file
View File

@ -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

20
Scripts/HurtBox.gd Normal file
View File

@ -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()

View File

@ -69,3 +69,12 @@ shadow_enabled = true
[node name="Enemy" parent="." instance=ExtResource( 5 )] [node name="Enemy" parent="." instance=ExtResource( 5 )]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.367474, 2.61222, -26.0531 ) 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 )

View File

@ -8,6 +8,22 @@
config_version=4 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] [application]
config/name="Slap" 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) "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] [physics]