Compare commits
5 Commits
a32e99cf42
...
a12e4e4c0b
| Author | SHA1 | Date | |
|---|---|---|---|
| a12e4e4c0b | |||
| bbbd36d91b | |||
| 44b6cbf379 | |||
| bf802571a2 | |||
| 1c5caa5d29 |
BIN
icon.ico
BIN
icon.ico
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 351 KiB |
@ -59,6 +59,11 @@ _global_script_classes=[ {
|
||||
"language": "GDScript",
|
||||
"path": "res://addons/controller_icons/objects/TextureRect.gd"
|
||||
}, {
|
||||
"base": "SceneTree",
|
||||
"class": "CreateIcon",
|
||||
"language": "GDScript",
|
||||
"path": "res://Neuer Ordner/CreateIcon.gd"
|
||||
}, {
|
||||
"base": "Actor",
|
||||
"class": "Enemy",
|
||||
"language": "GDScript",
|
||||
@ -84,6 +89,11 @@ _global_script_classes=[ {
|
||||
"language": "GDScript",
|
||||
"path": "res://src/RayCasters/RayCaster.gd"
|
||||
}, {
|
||||
"base": "Reference",
|
||||
"class": "ReplaceIcon",
|
||||
"language": "GDScript",
|
||||
"path": "res://Neuer Ordner/ReplaceIcon.gd"
|
||||
}, {
|
||||
"base": "Button",
|
||||
"class": "SoundButton",
|
||||
"language": "GDScript",
|
||||
@ -105,11 +115,13 @@ _global_script_class_icons={
|
||||
"ControllerSprite": "",
|
||||
"ControllerSprite3D": "",
|
||||
"ControllerTextureRect": "",
|
||||
"CreateIcon": "",
|
||||
"Enemy": "",
|
||||
"GlobalStateResource": "",
|
||||
"LevelTemplate": "",
|
||||
"RayCastDebugLines": "",
|
||||
"RayCaster": "",
|
||||
"ReplaceIcon": "",
|
||||
"SoundButton": "",
|
||||
"StateMachine": ""
|
||||
}
|
||||
@ -118,8 +130,8 @@ _global_script_class_icons={
|
||||
|
||||
config/name="Blobby"
|
||||
run/main_scene="res://src/UserInterface/Screens/MainMenu/MainScreen.tscn"
|
||||
run/low_processor_mode=true
|
||||
config/icon="res://icon.png"
|
||||
config/windows_native_icon="res://icon.ico"
|
||||
|
||||
[audio]
|
||||
|
||||
@ -239,34 +251,34 @@ ui_end={
|
||||
}
|
||||
up={
|
||||
"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":0,"physical_scancode":87,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777232,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
duck={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777234,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"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":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777231,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"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":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777233,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
@ -275,16 +287,16 @@ jump={
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
boost_move={
|
||||
run={
|
||||
"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":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
interact={
|
||||
"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":0,"physical_scancode":69,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
pause={
|
||||
@ -316,7 +328,6 @@ ui_click={
|
||||
|
||||
common/physics_fps=120
|
||||
2d/thread_model=0
|
||||
2d/use_bvh=false
|
||||
2d/cell_size=100
|
||||
common/physics_interpolation=true
|
||||
common/enable_object_picking=false
|
||||
@ -326,17 +337,11 @@ common/enable_object_picking=false
|
||||
2d/options/use_nvidia_rect_flicker_workaround=true
|
||||
quality/intended_usage/framebuffer_allocation=0
|
||||
quality/intended_usage/framebuffer_allocation.mobile=0
|
||||
2d/snapping/use_gpu_pixel_snap=true
|
||||
threads/thread_model=2
|
||||
quality/reflections/texture_array_reflections=false
|
||||
quality/reflections/high_quality_ggx=false
|
||||
2d/options/use_software_skinning=false
|
||||
gles3/shaders/shader_compilation_mode=2
|
||||
gles3/shaders/shader_compilation_mode.mobile=2
|
||||
gles3/shaders/shader_compilation_mode.web=2
|
||||
gles3/shaders/max_simultaneous_compiles.web=2
|
||||
gles3/shaders/shader_cache_size_mb.mobile=256
|
||||
gles3/shaders/shader_cache_size_mb.web=256
|
||||
2d/options/culling_mode=0
|
||||
quality/depth/hdr=false
|
||||
environment/default_environment="res://default_env.tres"
|
||||
environment/2d/use_nvidia_rect_flicker_workaround=true
|
||||
|
||||
@ -80,29 +80,25 @@ cast_to = Vector2( 3, 0 )
|
||||
collision_mask = 8
|
||||
|
||||
[node name="StompDetector" type="Area2D" parent="." groups=["weakpoint"]]
|
||||
visible = false
|
||||
modulate = Color( 0, 0.0392157, 1, 1 )
|
||||
light_mask = 0
|
||||
position = Vector2( 0, -6.44095 )
|
||||
position = Vector2( 0, 5.23628 )
|
||||
collision_layer = 2
|
||||
input_pickable = false
|
||||
monitorable = false
|
||||
priority = 1.0
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"]
|
||||
visible = false
|
||||
position = Vector2( 0, -2.28618 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="EnemySkin" type="Area2D" parent="."]
|
||||
process_priority = -1
|
||||
visible = false
|
||||
collision_layer = 2
|
||||
collision_mask = 127
|
||||
input_pickable = false
|
||||
|
||||
[node name="CollisionPolygon2D" type="CollisionShape2D" parent="EnemySkin"]
|
||||
visible = false
|
||||
position = Vector2( 0, 3.49085 )
|
||||
shape = SubResource( 3 )
|
||||
|
||||
|
||||
@ -257,7 +257,7 @@ cast_to = Vector2( 0, -1 )
|
||||
collision_mask = 56
|
||||
collide_with_areas = true
|
||||
|
||||
[node name="EnemyBody" type="CollisionShape2D" parent="." groups=["harmful"]]
|
||||
[node name="EnemyBody" type="CollisionShape2D" parent="." groups=["frogfood", "harmful"]]
|
||||
position = Vector2( 0, -0.5 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ func _ready() -> void:
|
||||
|
||||
|
||||
# TODO Only moves when on screen
|
||||
func _physics_process(delta: float) -> void:
|
||||
func execute_movement(delta: float) -> void:
|
||||
velocity.y += _gravity * delta
|
||||
var player_direction := player_on_floor_direction()
|
||||
if(player_direction != 0):
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
[gd_scene load_steps=6 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://assets/enemy/VacuumRobot.png" type="Texture" id=1]
|
||||
[ext_resource path="res://src/Actors/Enemies/Vacuum.gd" type="Script" id=2]
|
||||
[ext_resource path="res://src/StateMachines/VacuumStateMachine.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 14, 7 )
|
||||
@ -14,8 +15,9 @@ extents = Vector2( 15, 6.5 )
|
||||
|
||||
[node name="Vacuum" type="KinematicBody2D" groups=["harmful"]]
|
||||
collision_layer = 2
|
||||
collision_mask = 9
|
||||
collision_mask = 11
|
||||
script = ExtResource( 2 )
|
||||
mass = 1.0
|
||||
speed = 180
|
||||
acceleration = 100
|
||||
|
||||
@ -70,6 +72,9 @@ collision_mask = 127
|
||||
position = Vector2( 0, 5.5 )
|
||||
shape = SubResource( 3 )
|
||||
|
||||
[node name="StateMachine" type="Node" parent="."]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[connection signal="body_entered" from="StompDetector" to="." method="_on_StompDetector_body_entered"]
|
||||
[connection signal="area_entered" from="EnemySkin" to="." method="_on_EnemySkin_area_entered"]
|
||||
[connection signal="body_entered" from="EnemySkin" to="." method="_on_EnemySkin_body_entered"]
|
||||
|
||||
@ -517,6 +517,7 @@ func is_jump_path_safe(v: Vector2, pos: Vector2) -> bool:
|
||||
abs(node_pos.x - pos.x) > abs(jump_distance) * 3
|
||||
|| abs(node_pos.y - pos.y) > block_size * 4
|
||||
|| abs(node_pos.x - pos.x) < 1
|
||||
|| node.is_in_group("frogfood")
|
||||
):
|
||||
continue
|
||||
var node_y = node_pos.y - block_size / 2.0
|
||||
|
||||
@ -112,6 +112,18 @@ func get_savepoint(levelName: String) -> Vector2:
|
||||
else:
|
||||
return Vector2()
|
||||
|
||||
func was_level_touched(levelName: String) -> bool:
|
||||
if OS.is_debug_build():
|
||||
return true
|
||||
if !gsr.progress_dict.has(levelName) || !gsr.progress_dict[levelName].has("touched"):
|
||||
return false
|
||||
return gsr.progress_dict[levelName]["touched"]
|
||||
|
||||
func touch_level(levelName: String) -> void:
|
||||
if !gsr.progress_dict.has(levelName):
|
||||
gsr.progress_dict[levelName] = {}
|
||||
gsr.progress_dict[levelName]["touched"] = true
|
||||
|
||||
|
||||
# TODO This is permanent immediatly
|
||||
func set_wallet(value) -> void:
|
||||
|
||||
@ -3,18 +3,18 @@ extends Node
|
||||
export var save_location: String = "res://savefile.tres"
|
||||
|
||||
func _ready() -> void:
|
||||
load_initial_save()
|
||||
|
||||
load_initial_save()
|
||||
|
||||
func load_initial_save() -> void:
|
||||
var initial_state = load(save_location)
|
||||
if !initial_state:
|
||||
initial_state = GlobalStateResource.new()
|
||||
GlobalState.gsr = initial_state
|
||||
GlobalState.reinstate()
|
||||
|
||||
var initial_state = load(save_location)
|
||||
if !initial_state:
|
||||
initial_state = GlobalStateResource.new()
|
||||
GlobalState.gsr = initial_state
|
||||
GlobalState.reinstate()
|
||||
|
||||
func save_default() -> void:
|
||||
var signal_manager = get_tree().root.get_child(4).get_node("%SignalManager")
|
||||
for action in InputMap.get_actions():
|
||||
GlobalState.gsr.input_map[action] = InputMap.get_action_list(action)
|
||||
ResourceSaver.save(save_location, GlobalState.gsr)
|
||||
signal_manager.emit_signal("savemanager_saved")
|
||||
var signal_manager = get_tree().root.get_child(4).get_node("%SignalManager")
|
||||
for action in InputMap.get_actions():
|
||||
GlobalState.gsr.input_map[action] = InputMap.get_action_list(action)
|
||||
ResourceSaver.save(save_location, GlobalState.gsr)
|
||||
signal_manager.emit_signal("savemanager_saved")
|
||||
|
||||
@ -85,7 +85,7 @@ valign = 1
|
||||
unique_name_in_owner = true
|
||||
position = Vector2( 0, -6 )
|
||||
scale = Vector2( 0.5, 0.5 )
|
||||
collision_layer = 24
|
||||
collision_layer = 0
|
||||
monitorable = false
|
||||
|
||||
[node name="ActivatorAreaShape" type="CollisionShape2D" parent="ActivatorArea"]
|
||||
|
||||
@ -93,6 +93,7 @@ volume_db = -22.0
|
||||
bus = "Effects"
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
visible = false
|
||||
collision_layer = 0
|
||||
collision_mask = 3
|
||||
monitorable = false
|
||||
|
||||
@ -17,6 +17,7 @@ uniform int n_light_bands : hint_range(1, 13) = 7;
|
||||
uniform bool will_smooth_shade = false;
|
||||
uniform float band_decay_rate : hint_range(0.0, 1.0, 0.05) = 0.5;
|
||||
uniform float light_strength_modifier : hint_range(0.0, 1.0) = 1.0;
|
||||
uniform float bits = 1.;
|
||||
|
||||
varying vec2 world_position;
|
||||
|
||||
@ -25,7 +26,7 @@ void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec4 col = texture(TEXTURE, UV);
|
||||
vec4 col = texture(TEXTURE, UV);
|
||||
if (col.a <= 0.0){
|
||||
COLOR = col;
|
||||
}
|
||||
@ -39,7 +40,11 @@ void fragment() {
|
||||
// Get the data for this light source as passed in via texture
|
||||
vec4 texel = texelFetch(light_data, ivec2(i, 0), 0);
|
||||
vec2 texel_pos = (viewport_transform * (global_transform * vec4(texel.xy, 0.0, 1.0))).xy;
|
||||
vec2 texel_pos2 = texel.xy;
|
||||
float x_bits = bits / TEXTURE_PIXEL_SIZE.x;
|
||||
float y_bits = bits / TEXTURE_PIXEL_SIZE.y;
|
||||
float pixelized_x = floor(texel_pos.x * x_bits)/x_bits + 0.5/x_bits;
|
||||
float pixelized_y = floor(texel_pos.y * y_bits)/y_bits + 0.5/y_bits;
|
||||
texel_pos = vec2(pixelized_x, pixelized_y);
|
||||
|
||||
// How far the light source extends
|
||||
float radius = texel.a;
|
||||
@ -92,6 +97,7 @@ shader_param/default_light_color = null
|
||||
shader_param/light_level = 0.0
|
||||
shader_param/offset_modifier = 1.0
|
||||
shader_param/n_light_bands = 7
|
||||
shader_param/will_smooth_shade = false
|
||||
shader_param/will_smooth_shade = true
|
||||
shader_param/band_decay_rate = 0.5
|
||||
shader_param/light_strength_modifier = 1.0
|
||||
shader_param/bits = 1.0
|
||||
|
||||
@ -1226,7 +1226,7 @@ visible = false
|
||||
position = Vector2( -154, 14 )
|
||||
texture = ExtResource( 36 )
|
||||
script = ExtResource( 9 )
|
||||
color = Color( 1, 0, 0, 0.615686 )
|
||||
color = Color( 1, 0, 0, 0.321569 )
|
||||
|
||||
[node name="Emitter4" type="Sprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer4" groups=["light"]]
|
||||
visible = false
|
||||
|
||||
@ -1172,9 +1172,6 @@ jump_buffer_filled = null
|
||||
death_sound_1 = null
|
||||
death_sound_2 = null
|
||||
|
||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||
frame = 10
|
||||
|
||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||
parameters/playback = SubResource( 6 )
|
||||
parameters/jumpStretching/blend_position = 1
|
||||
@ -1259,7 +1256,7 @@ position = Vector2( 6, -6 )
|
||||
[node name="TutorialComboThingy" parent="." instance=ExtResource( 13 )]
|
||||
visible = false
|
||||
position = Vector2( 1115, 4 )
|
||||
action1 = "boost_move"
|
||||
action1 = "run"
|
||||
action2 = "move_right"
|
||||
press_limit = 2
|
||||
|
||||
|
||||
@ -236,9 +236,6 @@ unique_name_in_owner = true
|
||||
position = Vector2( -180, 113 )
|
||||
scale = Vector2( 0.878906, 0.936025 )
|
||||
|
||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||
frame = 7
|
||||
|
||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||
parameters/playback = SubResource( 6 )
|
||||
|
||||
@ -280,7 +277,7 @@ position = Vector2( 369, -300 )
|
||||
elevator_time = 10
|
||||
|
||||
[node name="Portal" parent="." instance=ExtResource( 9 )]
|
||||
position = Vector2( 716, 48 )
|
||||
position = Vector2( 712, 48 )
|
||||
next_scene = "res://src/Levels/Level 0.4.tscn"
|
||||
|
||||
[node name="FlyingPlatform2" parent="." instance=ExtResource( 15 )]
|
||||
@ -302,7 +299,7 @@ y_target = 112
|
||||
[node name="TutorialComboThingy" parent="." instance=ExtResource( 6 )]
|
||||
visible = false
|
||||
position = Vector2( 276, -35 )
|
||||
action1 = "boost_move"
|
||||
action1 = "run"
|
||||
action2 = "jump"
|
||||
goal_state = "runToJump"
|
||||
tutorial_text = "Move and press to runjump:"
|
||||
@ -320,7 +317,7 @@ position = Vector2( -10, 75 )
|
||||
[node name="TutorialComboThingy2" parent="." instance=ExtResource( 6 )]
|
||||
visible = false
|
||||
position = Vector2( 381, -230 )
|
||||
action1 = "boost_move"
|
||||
action1 = "run"
|
||||
action2 = "jump"
|
||||
goal_state = "runToJump"
|
||||
tutorial_text = "Move and press to runjump:"
|
||||
@ -343,6 +340,7 @@ position = Vector2( -61, 100 )
|
||||
|
||||
[node name="ShaderGrass7" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( -55, 98 )
|
||||
z_index = -1
|
||||
|
||||
[node name="ShaderGrass9" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( -41, 100 )
|
||||
@ -420,6 +418,7 @@ position = Vector2( 511, 100 )
|
||||
|
||||
[node name="ShaderGrass5" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 517, 97 )
|
||||
z_index = -1
|
||||
|
||||
[node name="ShaderGrass6" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 503, 100 )
|
||||
@ -629,6 +628,7 @@ position = Vector2( 556, 100 )
|
||||
|
||||
[node name="ShaderGrass99" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 554, 97 )
|
||||
z_index = -1
|
||||
|
||||
[node name="ShaderGrass100" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 589, 100 )
|
||||
@ -660,6 +660,7 @@ position = Vector2( 614, 100 )
|
||||
|
||||
[node name="ShaderGrass109" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 612, 97 )
|
||||
z_index = -1
|
||||
|
||||
[node name="ShaderGrass110" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 647, 100 )
|
||||
@ -681,6 +682,7 @@ position = Vector2( 57, 100 )
|
||||
|
||||
[node name="ShaderGrass23" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 63, 98 )
|
||||
z_index = -1
|
||||
|
||||
[node name="ShaderGrass24" parent="Decor" instance=ExtResource( 4 )]
|
||||
position = Vector2( 77, 100 )
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=10]
|
||||
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=11]
|
||||
[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=12]
|
||||
[ext_resource path="res://src/Actors/Enemies/SimpleEnemy.tscn" type="PackedScene" id=13]
|
||||
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=13]
|
||||
[ext_resource path="res://src/Platforms/FlyingPlatform.tscn" type="PackedScene" id=14]
|
||||
[ext_resource path="res://src/Actors/Enemies/Flyer.tscn" type="PackedScene" id=15]
|
||||
[ext_resource path="res://src/Actors/Friendlies/BoundFrog.tscn" type="PackedScene" id=16]
|
||||
@ -128,11 +128,11 @@ drag_margin_bottom = 0.3
|
||||
|
||||
[node name="Blobby" parent="." instance=ExtResource( 11 )]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2( -64, -1.90735e-06 )
|
||||
position = Vector2( -32, 0 )
|
||||
scale = Vector2( 0.878906, 0.936025 )
|
||||
|
||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||
frame = 7
|
||||
frame = 9
|
||||
|
||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||
parameters/playback = SubResource( 6 )
|
||||
@ -198,12 +198,6 @@ next_scene = "res://src/Levels/Level 3.tscn"
|
||||
position = Vector2( 1248, 16 )
|
||||
rotation = 1.57079
|
||||
|
||||
[node name="SimpleEnemy" parent="." instance=ExtResource( 13 )]
|
||||
position = Vector2( 16, -207 )
|
||||
|
||||
[node name="SimpleEnemy2" parent="." instance=ExtResource( 13 )]
|
||||
position = Vector2( 336, -206 )
|
||||
|
||||
[node name="Spikes" parent="." instance=ExtResource( 20 )]
|
||||
position = Vector2( 447, 176 )
|
||||
|
||||
@ -297,6 +291,14 @@ position = Vector2( 857, -272 )
|
||||
[node name="Coin3" parent="." instance=ExtResource( 21 )]
|
||||
position = Vector2( 216, -272 )
|
||||
|
||||
[node name="Vacuum" parent="." instance=ExtResource( 13 )]
|
||||
position = Vector2( 413, -204 )
|
||||
killable = false
|
||||
|
||||
[node name="Vacuum2" parent="." instance=ExtResource( 13 )]
|
||||
position = Vector2( 44, -204 )
|
||||
killable = false
|
||||
|
||||
[connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"]
|
||||
[connection signal="button_pushed" from="FrogFreeButton" to="BoundFrog" method="_on_FrogFreeButton_pushed"]
|
||||
|
||||
|
||||
@ -1011,7 +1011,7 @@ position = Vector2( -88, 96 )
|
||||
scale = Vector2( 0.878906, 0.936025 )
|
||||
|
||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||
frame = 7
|
||||
frame = 5
|
||||
|
||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||
parameters/playback = SubResource( 6 )
|
||||
@ -1234,6 +1234,7 @@ next_scene = "res://src/Levels/Level 4.tscn"
|
||||
|
||||
[node name="BoundFrog" parent="." instance=ExtResource( 56 )]
|
||||
position = Vector2( 203, -45 )
|
||||
movement_radius = 9
|
||||
|
||||
[node name="FrogFreeButton" parent="." instance=ExtResource( 59 )]
|
||||
position = Vector2( 408, -272 )
|
||||
@ -1274,3 +1275,5 @@ format = 1
|
||||
[editable path="UserInterface"]
|
||||
[editable path="UserInterface/HUD"]
|
||||
[editable path="Blobby"]
|
||||
[editable path="BoundFrog"]
|
||||
[editable path="BoundFrog/RopeAnchor"]
|
||||
|
||||
@ -6,25 +6,37 @@ extends Node2D
|
||||
# var b: String = "text"
|
||||
export var is_armed = false
|
||||
|
||||
var trigger_zone_entered: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if(!is_armed):
|
||||
$Area2D.remove_from_group("harmful")
|
||||
if($HarmfulArea.is_in_group("harmful")):
|
||||
$HarmfulArea.remove_from_group("harmful")
|
||||
$Sprite/AnimationPlayer.play("unarmed")
|
||||
else:
|
||||
$Area2D.add_to_group("harmful")
|
||||
$HarmfulArea.add_to_group("harmful")
|
||||
$Sprite/AnimationPlayer.play("armed")
|
||||
|
||||
func _on_Area2D_area_exited(area: Area2D) -> void:
|
||||
if(area.is_in_group("player")):
|
||||
$Timer.start()
|
||||
|
||||
func _on_Timer_timeout() -> void:
|
||||
is_armed = true
|
||||
$Area2D.add_to_group("harmful")
|
||||
$HarmfulArea.add_to_group("harmful")
|
||||
$Sprite/AnimationPlayer.play("arming")
|
||||
|
||||
|
||||
func _on_AnimationPlayer_animation_finished(anim_name: String) -> void:
|
||||
if(anim_name == "arming"):
|
||||
$Sprite/AnimationPlayer.play("armed")
|
||||
|
||||
|
||||
func _on_DetectionArea_area_exited(area: Area2D) -> void:
|
||||
if(area.is_in_group("player") && !$HarmfulArea.is_in_group("harmful")
|
||||
&& trigger_zone_entered):
|
||||
$Timer.start()
|
||||
trigger_zone_entered = false
|
||||
|
||||
|
||||
func _on_HarmfulArea_area_entered(area: Area2D) -> void:
|
||||
if(area.is_in_group("player")):
|
||||
trigger_zone_entered = true
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=8 format=2]
|
||||
[gd_scene load_steps=9 format=2]
|
||||
|
||||
[ext_resource path="res://assets/obstacle object/SpikyMinePlant.png" type="Texture" id=1]
|
||||
[ext_resource path="res://src/ObstacleObjects/Mine.gd" type="Script" id=2]
|
||||
@ -17,18 +17,6 @@ tracks/0/keys = {
|
||||
"update": 0,
|
||||
"values": [ 0 ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("../Area2D/CollisionShape2D:shape:radius")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 4.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=8]
|
||||
resource_name = "armed"
|
||||
@ -46,18 +34,6 @@ tracks/0/keys = {
|
||||
"update": 1,
|
||||
"values": [ 22, 23, 24, 25, 26, 27, 28, 29 ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("../Area2D/CollisionShape2D:shape:radius")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 1,
|
||||
"values": [ 7.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=6]
|
||||
resource_name = "arming"
|
||||
@ -74,18 +50,6 @@ tracks/0/keys = {
|
||||
"update": 1,
|
||||
"values": [ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("../Area2D/CollisionShape2D:shape:radius")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0.00519588, 0.698901 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 1,
|
||||
"values": [ 4.0, 7.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id=3]
|
||||
resource_name = "unarmed"
|
||||
@ -103,22 +67,14 @@ tracks/0/keys = {
|
||||
"update": 1,
|
||||
"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("../Area2D/CollisionShape2D:shape:radius")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/keys = {
|
||||
"times": PoolRealArray( 0 ),
|
||||
"transitions": PoolRealArray( 1 ),
|
||||
"update": 0,
|
||||
"values": [ 4.0 ]
|
||||
}
|
||||
|
||||
[sub_resource type="CircleShape2D" id=7]
|
||||
[sub_resource type="CircleShape2D" id=12]
|
||||
resource_local_to_scene = true
|
||||
radius = 4.0
|
||||
radius = 6.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id=9]
|
||||
resource_local_to_scene = true
|
||||
radius = 9.0
|
||||
|
||||
[node name="Mine" type="Node2D"]
|
||||
script = ExtResource( 2 )
|
||||
@ -135,16 +91,23 @@ anims/armed = SubResource( 8 )
|
||||
anims/arming = SubResource( 6 )
|
||||
anims/unarmed = SubResource( 3 )
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
[node name="HarmfulArea" type="Area2D" parent="."]
|
||||
collision_layer = 64
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource( 7 )
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="HarmfulArea"]
|
||||
shape = SubResource( 12 )
|
||||
|
||||
[node name="DetectionArea" type="Area2D" parent="."]
|
||||
collision_layer = 64
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="DetectionArea"]
|
||||
shape = SubResource( 9 )
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 0.1
|
||||
one_shot = true
|
||||
|
||||
[connection signal="animation_finished" from="Sprite/AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]
|
||||
[connection signal="area_exited" from="Area2D" to="." method="_on_Area2D_area_exited"]
|
||||
[connection signal="area_entered" from="HarmfulArea" to="." method="_on_HarmfulArea_area_entered"]
|
||||
[connection signal="area_exited" from="DetectionArea" to="." method="_on_DetectionArea_area_exited"]
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
||||
|
||||
@ -189,7 +189,7 @@ func _get_transition(_delta):
|
||||
|
||||
elif abs(parent.velocity.x) > 5:
|
||||
was_coyote_hanging = false
|
||||
if Input.is_action_pressed("boost_move"):
|
||||
if Input.is_action_pressed("run"):
|
||||
new_state = states.run
|
||||
# TODO Walking when stopping and not pressing anything?
|
||||
else:
|
||||
|
||||
32
src/StateMachines/VacuumStateMachine.gd
Normal file
32
src/StateMachines/VacuumStateMachine.gd
Normal file
@ -0,0 +1,32 @@
|
||||
extends StateMachine
|
||||
|
||||
func _ready() -> void:
|
||||
add_state("darting")
|
||||
state = states.darting
|
||||
set_state(states.darting)
|
||||
for state in states:
|
||||
if state_matching_method_exists(state):
|
||||
continue
|
||||
else:
|
||||
printerr("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
push_error("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
# _animation_logic()
|
||||
|
||||
|
||||
# Game logic consequences of state
|
||||
func _state_logic(delta):
|
||||
#var state_action_ref = funcref(parent, self.state)
|
||||
#parent.velocity = state_action_ref.call_func()
|
||||
parent.execute_movement(delta)
|
||||
|
||||
|
||||
func _get_transition(_delta):
|
||||
return null
|
||||
|
||||
|
||||
func _enter_state(_new_state, _previous_state):
|
||||
pass
|
||||
|
||||
|
||||
func _exit_state(_previous_state, _new_state):
|
||||
pass
|
||||
@ -1,6 +1,6 @@
|
||||
extends AudibleButton
|
||||
|
||||
export(String, FILE) var next_scene_path: String = ""
|
||||
export(String, FILE) var next_scene_path: String = "res://src/Levels/Level 0.1.tscn"
|
||||
onready var selected_level_base_path: String = "res://src/Levels/"
|
||||
|
||||
func _on_button_up() -> void:
|
||||
|
||||
@ -38,6 +38,8 @@ func _fill_level_list():
|
||||
func _spawn_level_options(levels: Array):
|
||||
var first = true
|
||||
for level in levels:
|
||||
if !GlobalState.was_level_touched(LEVELS_PATH + level) && !first:
|
||||
continue
|
||||
var level_check_box = LEVEL_CHECK_BOX.instance()
|
||||
vbox.add_child(level_check_box)
|
||||
level_check_box.initialize_with_progress(LEVELS_PATH + level)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
extends Node2D
|
||||
export var action1 = "move_right"
|
||||
export var action2 = "boost_move"
|
||||
export var action2 = "run"
|
||||
export var goal_state = ""
|
||||
export var tutorial_text = ""
|
||||
export var velocity = Vector2(0.309,0.309)
|
||||
|
||||
@ -13,6 +13,7 @@ var is_dead := false setget set_dead
|
||||
var level_time := 0.0
|
||||
|
||||
func _ready() -> void:
|
||||
GlobalState.touch_level(levelName)
|
||||
GlobalState.gsr.last_played_level = levelName
|
||||
SaveManager.save_default()
|
||||
signal_manager.connect("level_completed", self, "_on_level_completed")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user