feat: thwomp improvements
This commit is contained in:
parent
fab18d3a98
commit
c02296721a
BIN
assets/Main Ship - Base - Very damaged.png
Normal file
BIN
assets/Main Ship - Base - Very damaged.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 989 B |
35
assets/Main Ship - Base - Very damaged.png.import
Normal file
35
assets/Main Ship - Base - Very damaged.png.import
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/Main Ship - Base - Very damaged.png-926168939abe4d38178928ec91f12a7c.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/Main Ship - Base - Very damaged.png"
|
||||||
|
dest_files=[ "res://.import/Main Ship - Base - Very damaged.png-926168939abe4d38178928ec91f12a7c.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=0
|
||||||
|
flags/filter=false
|
||||||
|
flags/mipmaps=false
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=2
|
||||||
|
process/fix_alpha_border=false
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
||||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
assets/contraption/PixelPortal.aseprite
Normal file
BIN
assets/contraption/PixelPortal.aseprite
Normal file
Binary file not shown.
BIN
assets/contraption/PixelPortal.png
Normal file
BIN
assets/contraption/PixelPortal.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 938 B |
35
assets/contraption/PixelPortal.png.import
Normal file
35
assets/contraption/PixelPortal.png.import
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/PixelPortal.png-6516e8317c3e4aff451056cc71fdb2fa.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/contraption/PixelPortal.png"
|
||||||
|
dest_files=[ "res://.import/PixelPortal.png-6516e8317c3e4aff451056cc71fdb2fa.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=0
|
||||||
|
flags/filter=false
|
||||||
|
flags/mipmaps=false
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=2
|
||||||
|
process/fix_alpha_border=false
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
||||||
BIN
assets/environment/background/asset-test-background.png
Normal file
BIN
assets/environment/background/asset-test-background.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.1 KiB |
@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/asset-test-background.png-bd588dd8a6fda7f7a728a8204d88f193.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/environment/background/asset-test-background.png"
|
||||||
|
dest_files=[ "res://.import/asset-test-background.png-bd588dd8a6fda7f7a728a8204d88f193.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=0
|
||||||
|
flags/filter=false
|
||||||
|
flags/mipmaps=false
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=2
|
||||||
|
process/fix_alpha_border=false
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
||||||
@ -30,7 +30,7 @@ var max_velocity := {
|
|||||||
"duck_walk": 165
|
"duck_walk": 165
|
||||||
}
|
}
|
||||||
# x is applied directly to velocity and y is multiplied with acceleration
|
# x is applied directly to velocity and y is multiplied with acceleration
|
||||||
var duck_boost = Vector2(2.5, 0.75)
|
var duck_boost = Vector2(2, 0.75)
|
||||||
var velocity_jump_boost_ratio := 10
|
var velocity_jump_boost_ratio := 10
|
||||||
# This is added to the acceleration force initially
|
# This is added to the acceleration force initially
|
||||||
var init_acceleration_force := {"": 0, "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000}
|
var init_acceleration_force := {"": 0, "idle_walk": 4181, "idle_run": 5765, "walk_run": 1000}
|
||||||
|
|||||||
@ -4343,6 +4343,7 @@ __meta__ = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[node name="StateLabel" type="Label" parent="."]
|
[node name="StateLabel" type="Label" parent="."]
|
||||||
|
visible = false
|
||||||
show_behind_parent = true
|
show_behind_parent = true
|
||||||
margin_left = -37.0
|
margin_left = -37.0
|
||||||
margin_top = -44.0
|
margin_top = -44.0
|
||||||
|
|||||||
@ -484,7 +484,6 @@ position = Vector2( 0, -7 )
|
|||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
hframes = 2
|
hframes = 2
|
||||||
vframes = 4
|
vframes = 4
|
||||||
frame = 1
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="FrogSprite"]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="FrogSprite"]
|
||||||
anims/RESET = SubResource( 5 )
|
anims/RESET = SubResource( 5 )
|
||||||
|
|||||||
@ -6,8 +6,10 @@ func play_scene_independent(sound_name: String, bus: String = "Master", attenuat
|
|||||||
singleton = false, start_time = 0.0, random_pitch = false, pitch = 1.0) -> void:
|
singleton = false, start_time = 0.0, random_pitch = false, pitch = 1.0) -> void:
|
||||||
if singleton && players.has(sound_name):
|
if singleton && players.has(sound_name):
|
||||||
return
|
return
|
||||||
var disposable_player = AudioStreamPlayer.new()
|
var disposable_player
|
||||||
|
disposable_player = AudioStreamPlayer.new()
|
||||||
add_child(disposable_player)
|
add_child(disposable_player)
|
||||||
|
disposable_player.connect("finished", self, "dispose_player", [weakref(disposable_player)])
|
||||||
var stream = GlobalState.sound_library[sound_name]
|
var stream = GlobalState.sound_library[sound_name]
|
||||||
if random_pitch:
|
if random_pitch:
|
||||||
stream = AudioStreamRandomPitch.new()
|
stream = AudioStreamRandomPitch.new()
|
||||||
@ -17,12 +19,19 @@ func play_scene_independent(sound_name: String, bus: String = "Master", attenuat
|
|||||||
disposable_player.bus = bus
|
disposable_player.bus = bus
|
||||||
disposable_player.pitch_scale = pitch
|
disposable_player.pitch_scale = pitch
|
||||||
disposable_player.play(start_time)
|
disposable_player.play(start_time)
|
||||||
disposable_player.connect("finished", self, "dispose_player", [weakref(disposable_player)])
|
|
||||||
players[sound_name] = weakref(disposable_player)
|
players[sound_name] = weakref(disposable_player)
|
||||||
|
|
||||||
func dispose_player(player: WeakRef) -> void:
|
func dispose_player(player: WeakRef) -> void:
|
||||||
if !player.get_ref(): return
|
if !player.get_ref(): return
|
||||||
player.get_ref().queue_free()
|
var p = player.get_ref()
|
||||||
|
var sound_name
|
||||||
|
if("audio_stream" in p.stream):
|
||||||
|
sound_name = p.stream.audio_stream.resource_path
|
||||||
|
else:
|
||||||
|
sound_name = p.stream.resource_path
|
||||||
|
if players.has(sound_name):
|
||||||
|
players.erase(sound_name)
|
||||||
|
p.queue_free()
|
||||||
|
|
||||||
func pause_scene_independent(sound_name: String):
|
func pause_scene_independent(sound_name: String):
|
||||||
if players.has(sound_name) && players[sound_name].get_ref():
|
if players.has(sound_name) && players[sound_name].get_ref():
|
||||||
|
|||||||
@ -7,7 +7,14 @@ onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalMana
|
|||||||
onready var levelName := get_tree().get_current_scene().get_name()
|
onready var levelName := get_tree().get_current_scene().get_name()
|
||||||
|
|
||||||
export(String, FILE, "*.tscn") var next_scene
|
export(String, FILE, "*.tscn") var next_scene
|
||||||
|
export(bool) var is_active
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if(!is_active):
|
||||||
|
monitoring = false
|
||||||
|
signal_manager.connect("terminal_activated", self, "activate_portal")
|
||||||
|
else:
|
||||||
|
$portal.frame = 0
|
||||||
|
|
||||||
func _get_configuration_warning() -> String:
|
func _get_configuration_warning() -> String:
|
||||||
return "The next scene property can't be empty" if not next_scene else ""
|
return "The next scene property can't be empty" if not next_scene else ""
|
||||||
@ -15,7 +22,10 @@ func _get_configuration_warning() -> String:
|
|||||||
func level_completion() -> void:
|
func level_completion() -> void:
|
||||||
GlobalState.remove_savepoint(levelName)
|
GlobalState.remove_savepoint(levelName)
|
||||||
signal_manager.emit_signal("level_completed")
|
signal_manager.emit_signal("level_completed")
|
||||||
|
|
||||||
|
func activate_portal(_time: float) -> void:
|
||||||
|
$AnimationPlayer.play("activatePortal")
|
||||||
|
monitoring = true
|
||||||
|
|
||||||
func teleport() -> void:
|
func teleport() -> void:
|
||||||
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_stereo.wav", "Music", -15)
|
GlobalAudio.play_scene_independent("res://assets/sounds/MAGIC_SPELL_Morphing_Synth_Harp_Scales_stereo.wav", "Music", -15)
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
[gd_scene load_steps=7 format=2]
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/contraption/portal.png" type="Texture" id=1]
|
[ext_resource path="res://assets/contraption/PixelPortal.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Contraptions/Portal/Portal.gd" type="Script" id=2]
|
[ext_resource path="res://src/Contraptions/Portal/Portal.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://src/UserInterface/Screens/InGameMenu/LevelEndScreen.tscn" type="PackedScene" id=3]
|
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id=1]
|
[sub_resource type="CapsuleShape2D" id=1]
|
||||||
radius = 22.1169
|
radius = 40.0
|
||||||
height = 22.4675
|
height = 22.4675
|
||||||
|
|
||||||
[sub_resource type="Animation" id=2]
|
[sub_resource type="Animation" id=2]
|
||||||
@ -35,6 +34,22 @@ tracks/1/keys = {
|
|||||||
"values": [ false ]
|
"values": [ false ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=4]
|
||||||
|
resource_name = "activatePortal"
|
||||||
|
length = 2.0
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath("portal:frame")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PoolRealArray( 0, 0.7, 1.3, 1.8 ),
|
||||||
|
"transitions": PoolRealArray( 1, 1, 1, 1 ),
|
||||||
|
"update": 1,
|
||||||
|
"values": [ 3, 2, 1, 0 ]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="Animation" id=3]
|
[sub_resource type="Animation" id=3]
|
||||||
resource_name = "fade_in"
|
resource_name = "fade_in"
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
@ -64,15 +79,18 @@ tracks/1/keys = {
|
|||||||
|
|
||||||
[node name="Portal" type="Area2D"]
|
[node name="Portal" type="Area2D"]
|
||||||
pause_mode = 2
|
pause_mode = 2
|
||||||
|
z_index = -1
|
||||||
|
z_as_relative = false
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
monitorable = false
|
monitorable = false
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
next_scene = ExtResource( 3 )
|
next_scene = "res://src/Levels/Level 1.tscn"
|
||||||
|
|
||||||
[node name="portal" type="Sprite" parent="."]
|
[node name="portal" type="Sprite" parent="."]
|
||||||
scale = Vector2( 0.1, 0.1 )
|
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
hframes = 2
|
hframes = 2
|
||||||
|
vframes = 2
|
||||||
|
frame = 3
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
scale = Vector2( 0.3, 0.3 )
|
scale = Vector2( 0.3, 0.3 )
|
||||||
@ -86,13 +104,11 @@ visible = false
|
|||||||
margin_right = 1024.0
|
margin_right = 1024.0
|
||||||
margin_bottom = 600.0
|
margin_bottom = 600.0
|
||||||
color = Color( 0, 0, 0, 0 )
|
color = Color( 0, 0, 0, 0 )
|
||||||
__meta__ = {
|
|
||||||
"_edit_use_anchors_": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
autoplay = "Start"
|
autoplay = "Start"
|
||||||
anims/Start = SubResource( 2 )
|
anims/Start = SubResource( 2 )
|
||||||
|
anims/activatePortal = SubResource( 4 )
|
||||||
anims/fade_in = SubResource( 3 )
|
anims/fade_in = SubResource( 3 )
|
||||||
|
|
||||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
||||||
|
|||||||
@ -13,8 +13,6 @@ var activatable = false
|
|||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
get_back_timer.wait_time = elevator_time
|
get_back_timer.wait_time = elevator_time
|
||||||
elevator.get_node("./portal").frame = 1
|
|
||||||
elevator.monitoring = false
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if activatable && Input.is_action_just_released("interact"):
|
if activatable && Input.is_action_just_released("interact"):
|
||||||
@ -26,8 +24,6 @@ func _input(event: InputEvent) -> void:
|
|||||||
func selfActivate():
|
func selfActivate():
|
||||||
indicatorPlayer.play("onning")
|
indicatorPlayer.play("onning")
|
||||||
buttonPlayer.play("pushing")
|
buttonPlayer.play("pushing")
|
||||||
elevator.get_node("./portal").frame = 0
|
|
||||||
elevator.monitoring = true
|
|
||||||
#TODO dis importante
|
#TODO dis importante
|
||||||
activatorArea.set_deferred("monitoring", false)
|
activatorArea.set_deferred("monitoring", false)
|
||||||
$GetBackMusic.play()
|
$GetBackMusic.play()
|
||||||
|
|||||||
@ -19,6 +19,9 @@ var is_idle_swinging
|
|||||||
var start_swing_time := 0.0
|
var start_swing_time := 0.0
|
||||||
var begin_idle
|
var begin_idle
|
||||||
var time_since_last_exec := 0.0
|
var time_since_last_exec := 0.0
|
||||||
|
|
||||||
|
var grass_sounds := ["res://assets/sounds/grass swish 1.ogg","res://assets/sounds/grass swish 2.ogg",
|
||||||
|
"res://assets/sounds/grass swish 3.ogg","res://assets/sounds/grass swish 4.ogg"]
|
||||||
# var thread : Thread
|
# var thread : Thread
|
||||||
|
|
||||||
var saved_coeff:= 0.0
|
var saved_coeff:= 0.0
|
||||||
@ -107,4 +110,8 @@ func grass_wave_update(delta: float) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_Area2D_body_entered(body: Node) -> void:
|
func _on_Area2D_body_entered(body: Node) -> void:
|
||||||
$AudioStreamPlayer2D.play()
|
var sound_index = round(rand_range(0,grass_sounds.size())) - 1
|
||||||
|
if(body.is_in_group("player")):
|
||||||
|
GlobalAudio.play_scene_independent(grass_sounds[sound_index], "Effects", -22, true, 0, true, 1)
|
||||||
|
else:
|
||||||
|
$AudioStreamPlayer2D.play()
|
||||||
|
|||||||
@ -78,6 +78,7 @@ uv = PoolVector2Array( 4.9375, 11.875, 5, 8.8125, 2.8125, 7, -0.375, 4.0625, 2.2
|
|||||||
polygons = [ PoolIntArray( 0, 6, 7 ), PoolIntArray( 0, 1, 6 ), PoolIntArray( 1, 5, 6 ), PoolIntArray( 1, 2, 5 ), PoolIntArray( 2, 4, 5 ), PoolIntArray( 2, 3, 4 ) ]
|
polygons = [ PoolIntArray( 0, 6, 7 ), PoolIntArray( 0, 1, 6 ), PoolIntArray( 1, 5, 6 ), PoolIntArray( 1, 2, 5 ), PoolIntArray( 2, 4, 5 ), PoolIntArray( 2, 3, 4 ) ]
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
|
visible = false
|
||||||
position = Vector2( 5.00909, 19.9567 )
|
position = Vector2( 5.00909, 19.9567 )
|
||||||
z_index = -1
|
z_index = -1
|
||||||
texture = ExtResource( 10 )
|
texture = ExtResource( 10 )
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1150,6 +1150,9 @@ unique_name_in_owner = true
|
|||||||
position = Vector2( -156, -51 )
|
position = Vector2( -156, -51 )
|
||||||
scale = Vector2( 0.878906, 0.936025 )
|
scale = Vector2( 0.878906, 0.936025 )
|
||||||
|
|
||||||
|
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||||
|
frame = 6
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 6 )
|
parameters/playback = SubResource( 6 )
|
||||||
parameters/jumpStretching/blend_position = 1
|
parameters/jumpStretching/blend_position = 1
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -4,20 +4,23 @@ extends Node2D
|
|||||||
# Declare member variables here. Examples:
|
# Declare member variables here. Examples:
|
||||||
# var a: int = 2
|
# var a: int = 2
|
||||||
# var b: String = "text"
|
# var b: String = "text"
|
||||||
export var is_locked = true
|
export var is_armed = false
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$Area2D.remove_from_group("harmful")
|
if(!is_armed):
|
||||||
$Sprite/AnimationPlayer.play("unarmed")
|
$Area2D.remove_from_group("harmful")
|
||||||
|
$Sprite/AnimationPlayer.play("unarmed")
|
||||||
|
else:
|
||||||
|
$Area2D.add_to_group("harmful")
|
||||||
|
$Sprite/AnimationPlayer.play("armed")
|
||||||
|
|
||||||
func _on_Area2D_area_exited(area: Area2D) -> void:
|
func _on_Area2D_area_exited(area: Area2D) -> void:
|
||||||
$Timer.start()
|
$Timer.start()
|
||||||
|
|
||||||
|
|
||||||
func _on_Timer_timeout() -> void:
|
func _on_Timer_timeout() -> void:
|
||||||
is_locked = true
|
is_armed = true
|
||||||
$Area2D.add_to_group("harmful")
|
$Area2D.add_to_group("harmful")
|
||||||
$Sprite/AnimationPlayer.play("arming")
|
$Sprite/AnimationPlayer.play("arming")
|
||||||
|
|
||||||
|
|||||||
@ -10,10 +10,13 @@ onready var slide_friction = 1.5
|
|||||||
|
|
||||||
var flyoff_triggered = false
|
var flyoff_triggered = false
|
||||||
var has_hit_player = false
|
var has_hit_player = false
|
||||||
var velocity = 1
|
var halted = false
|
||||||
var max_velocity = 200
|
export(float) var velocity = 1
|
||||||
var acceleration_force = 1200
|
export(float) var max_velocity = 200
|
||||||
var mass = 10
|
export(float) var acceleration_force = 1200
|
||||||
|
export(float) var mass = 10
|
||||||
|
export(bool) var avoid_crushing = false
|
||||||
|
export(bool) var fast_retrigger = false
|
||||||
|
|
||||||
# TODO Returing Laser cutter has broken collision and infinite inertia
|
# TODO Returing Laser cutter has broken collision and infinite inertia
|
||||||
# Maybe keep returning paths free and crush player when in the way
|
# Maybe keep returning paths free and crush player when in the way
|
||||||
@ -23,18 +26,21 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
|
|
||||||
if !flyoff_triggered:
|
if !flyoff_triggered:
|
||||||
for ray in trigger_rays:
|
for ray in trigger_rays:
|
||||||
# When player has been hit on the way
|
# When player has been hit on the way
|
||||||
if (has_hit_player && body.position.x > 0):
|
if (has_hit_player && body.position.x > 0):
|
||||||
break
|
break
|
||||||
if ray.is_colliding():
|
if ray.is_colliding() && (body.position.x < 1 || fast_retrigger):
|
||||||
var collider = ray.get_collider()
|
var collider = ray.get_collider()
|
||||||
if collider.is_in_group("player"):
|
if collider.is_in_group("player"):
|
||||||
flyoff_triggered = true
|
flyoff_triggered = true
|
||||||
body.set("motion/sync_to_physics", false)
|
body.set("motion/sync_to_physics", false)
|
||||||
break
|
break
|
||||||
if body.position.x > 0:
|
if body.position.x > 0:
|
||||||
|
if halted && avoid_crushing:
|
||||||
|
return
|
||||||
velocity=1
|
velocity=1
|
||||||
body.position.x += (max_velocity/3)*-1*delta
|
body.position.x += (max_velocity/3)*-1*delta
|
||||||
elif body.position.x == 0:
|
elif body.position.x == 0:
|
||||||
@ -51,3 +57,13 @@ func _physics_process(delta: float) -> void:
|
|||||||
else:
|
else:
|
||||||
has_hit_player = true
|
has_hit_player = true
|
||||||
flyoff_triggered = false
|
flyoff_triggered = false
|
||||||
|
|
||||||
|
|
||||||
|
func _on_BackArea_body_entered(body: Node) -> void:
|
||||||
|
if(body.is_in_group("player")):
|
||||||
|
halted = true
|
||||||
|
|
||||||
|
|
||||||
|
func _on_BackArea_body_exited(body: Node) -> void:
|
||||||
|
if(body.is_in_group("player")):
|
||||||
|
halted = false
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=6 format=2]
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/contraption/FlyingLaserCutterShaded.png" type="Texture" id=1]
|
[ext_resource path="res://assets/contraption/FlyingLaserCutterShaded.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Platforms/FlyingLaserCutter.gd" type="Script" id=2]
|
[ext_resource path="res://src/Platforms/FlyingLaserCutter.gd" type="Script" id=2]
|
||||||
@ -25,6 +25,9 @@ extents = Vector2( 11.4921, 11.9129 )
|
|||||||
[sub_resource type="RectangleShape2D" id=4]
|
[sub_resource type="RectangleShape2D" id=4]
|
||||||
extents = Vector2( 3.067, 10 )
|
extents = Vector2( 3.067, 10 )
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=5]
|
||||||
|
extents = Vector2( 0.5, 11 )
|
||||||
|
|
||||||
[node name="FlyingLaserCutter" type="Node2D"]
|
[node name="FlyingLaserCutter" type="Node2D"]
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
@ -32,6 +35,7 @@ script = ExtResource( 2 )
|
|||||||
collision_layer = 32
|
collision_layer = 32
|
||||||
collision_mask = 57
|
collision_mask = 57
|
||||||
collision/safe_margin = 0.001
|
collision/safe_margin = 0.001
|
||||||
|
motion/sync_to_physics = true
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="FlyingLaserCutterBody"]
|
[node name="Sprite" type="Sprite" parent="FlyingLaserCutterBody"]
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
@ -51,14 +55,25 @@ shape = SubResource( 3 )
|
|||||||
|
|
||||||
[node name="LaserArea" type="Area2D" parent="FlyingLaserCutterBody" groups=["harmful"]]
|
[node name="LaserArea" type="Area2D" parent="FlyingLaserCutterBody" groups=["harmful"]]
|
||||||
process_priority = -1
|
process_priority = -1
|
||||||
|
position = Vector2( 10, 0 )
|
||||||
collision_layer = 32
|
collision_layer = 32
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
|
|
||||||
[node name="PainZone" type="CollisionShape2D" parent="FlyingLaserCutterBody/LaserArea" groups=["harmful"]]
|
[node name="PainZone" type="CollisionShape2D" parent="FlyingLaserCutterBody/LaserArea" groups=["harmful"]]
|
||||||
process_priority = -1
|
process_priority = -1
|
||||||
position = Vector2( 9.647, 0 )
|
position = Vector2( -9.53674e-07, 0 )
|
||||||
shape = SubResource( 4 )
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="BackArea" type="Area2D" parent="FlyingLaserCutterBody"]
|
||||||
|
position = Vector2( -11.5, 0 )
|
||||||
|
collision_layer = 16
|
||||||
|
collision_mask = 3
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="FlyingLaserCutterBody/BackArea"]
|
||||||
|
position = Vector2( -1, 0 )
|
||||||
|
shape = SubResource( 5 )
|
||||||
|
|
||||||
[node name="Triggers" type="Node2D" parent="FlyingLaserCutterBody"]
|
[node name="Triggers" type="Node2D" parent="FlyingLaserCutterBody"]
|
||||||
visible = false
|
visible = false
|
||||||
position = Vector2( 0, 0.0077219 )
|
position = Vector2( 0, 0.0077219 )
|
||||||
@ -78,3 +93,6 @@ scale = Vector2( 1, 1000 )
|
|||||||
enabled = true
|
enabled = true
|
||||||
cast_to = Vector2( 0, 1 )
|
cast_to = Vector2( 0, 1 )
|
||||||
collision_mask = 9
|
collision_mask = 9
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="FlyingLaserCutterBody/BackArea" to="." method="_on_BackArea_body_entered"]
|
||||||
|
[connection signal="body_exited" from="FlyingLaserCutterBody/BackArea" to="." method="_on_BackArea_body_exited"]
|
||||||
|
|||||||
@ -41,12 +41,12 @@ resource_name = "LowPassFilter"
|
|||||||
cutoff_hz = 3000.0
|
cutoff_hz = 3000.0
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
bus/0/volume_db = inf_neg
|
bus/0/volume_db = -6.0206
|
||||||
bus/1/name = "Music"
|
bus/1/name = "Music"
|
||||||
bus/1/solo = false
|
bus/1/solo = false
|
||||||
bus/1/mute = false
|
bus/1/mute = false
|
||||||
bus/1/bypass_fx = false
|
bus/1/bypass_fx = false
|
||||||
bus/1/volume_db = 0.0
|
bus/1/volume_db = -6.0206
|
||||||
bus/1/send = "Master"
|
bus/1/send = "Master"
|
||||||
bus/1/effect/0/effect = SubResource( 1 )
|
bus/1/effect/0/effect = SubResource( 1 )
|
||||||
bus/1/effect/0/enabled = false
|
bus/1/effect/0/enabled = false
|
||||||
|
|||||||
4
src/ThirdParty/Demo/meshinstance.gd
vendored
4
src/ThirdParty/Demo/meshinstance.gd
vendored
@ -2,5 +2,5 @@ extends MeshInstance
|
|||||||
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if(get_parent().visible):
|
if(get_parent().visible):
|
||||||
rotate_y(PI / 4.0 * delta)
|
rotate_y(PI / 4.0 * delta)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user