Compare commits
5 Commits
92f660e43e
...
52436feb3d
Author | SHA1 | Date |
---|---|---|
bog | 52436feb3d | |
bog | 93003abb2a | |
bog | 407e12fd38 | |
bog | b913e87654 | |
bog | 751fe607bd |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 172 B After Width: | Height: | Size: 438 B |
|
@ -25,6 +25,9 @@ func to_falling():
|
|||
m_state = preload("res://Actor/Falling.gd").new()
|
||||
m_state.this = self
|
||||
|
||||
func is_dead():
|
||||
return m_state.state_name == 'Dead'
|
||||
|
||||
func to_dead():
|
||||
m_state = preload("res://Actor/Dead.gd").new()
|
||||
m_state.this = self
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="2_itibm"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_e2sef"]
|
||||
radius = 16.0312
|
||||
radius = 6.0
|
||||
|
||||
[node name="Actor" type="CharacterBody2D"]
|
||||
[node name="Actor" type="CharacterBody2D" groups=["actors"]]
|
||||
script = ExtResource("1_0612w")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
|
|
|
@ -1,7 +1,24 @@
|
|||
extends Node2D
|
||||
|
||||
var m_world = null
|
||||
var m_target = null
|
||||
var m_shoot_time = 2.0
|
||||
var m_shoot_timer = 0.0
|
||||
var m_range = 300.0
|
||||
|
||||
func _ready():
|
||||
$Actor/Sprite2D.modulate = Color.RED
|
||||
|
||||
func _process(_delta):
|
||||
pass
|
||||
m_shoot_timer = randf_range(0.0, m_shoot_time)
|
||||
|
||||
func _process(delta):
|
||||
if m_target and $Actor.is_normal() and not m_target.get_node('Actor').is_dead():
|
||||
if m_shoot_timer >= m_shoot_time:
|
||||
var to_target = m_target.get_node('Actor').global_position - $Actor.global_position
|
||||
var dir = to_target.normalized()
|
||||
var dist = to_target.length()
|
||||
if dist < m_range:
|
||||
m_world.throw_bomb($Actor.global_position, dir, dist)
|
||||
m_shoot_timer = 0.0
|
||||
m_shoot_timer += delta
|
||||
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
[ext_resource type="Script" path="res://Bear/bear.gd" id="1_yppa7"]
|
||||
[ext_resource type="PackedScene" uid="uid://c0kqx6dsury58" path="res://Actor/actor.tscn" id="2_6n7sl"]
|
||||
|
||||
[node name="Bear" type="Node2D"]
|
||||
[node name="Bear" type="Node2D" groups=["bears"]]
|
||||
script = ExtResource("1_yppa7")
|
||||
|
||||
[node name="Actor" parent="." instance=ExtResource("2_6n7sl")]
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
extends StaticBody2D
|
||||
|
||||
@export var ID : int = 0
|
||||
var m_state = null
|
||||
var m_open_timer = 0.0
|
||||
var m_open_time = 0.2
|
||||
|
||||
@onready var m_init_y_scale = $Sprite2D.scale.y
|
||||
@onready var m_init_y_pos = $Sprite2D.global_position.y
|
||||
|
||||
func _ready():
|
||||
m_state = self.process_idle
|
||||
|
||||
func open():
|
||||
m_state = self.process_open
|
||||
pass
|
||||
|
||||
func _process(delta):
|
||||
if m_state != null:
|
||||
m_state.call(delta)
|
||||
|
||||
func process_idle(_delta):
|
||||
pass
|
||||
|
||||
func process_open(delta):
|
||||
if m_open_timer >= m_open_time:
|
||||
queue_free()
|
||||
else:
|
||||
var t = min(1.0, m_open_timer / m_open_time)
|
||||
var ratio = (1.0 - t) * m_init_y_scale
|
||||
$Sprite2D.scale.y = ratio
|
||||
|
||||
m_open_timer += delta
|
|
@ -0,0 +1,18 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://d30oryxv0w7pf"]
|
||||
|
||||
[ext_resource type="Script" path="res://Door/door.gd" id="1_62c16"]
|
||||
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="1_urwyt"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2o8ax"]
|
||||
size = Vector2(74, 20)
|
||||
|
||||
[node name="Door" type="StaticBody2D" groups=["doors"]]
|
||||
script = ExtResource("1_62c16")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
modulate = Color(1, 0, 1, 1)
|
||||
scale = Vector2(0.5, 0.25)
|
||||
texture = ExtResource("1_urwyt")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_2o8ax")
|
|
@ -0,0 +1,17 @@
|
|||
extends Area2D
|
||||
|
||||
@export var ID : int = 0
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
func _process(_delta):
|
||||
pass
|
||||
|
||||
func _on_body_entered(body):
|
||||
if body in get_tree().get_nodes_in_group('bombs'):
|
||||
body._explode(0)
|
||||
for door in get_tree().get_nodes_in_group('doors'):
|
||||
if door.ID == self.ID:
|
||||
door.open()
|
||||
queue_free()
|
|
@ -0,0 +1,24 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://c5f7m5oi32kr5"]
|
||||
|
||||
[ext_resource type="Script" path="res://DoorCommand/door_command.gd" id="1_l2uva"]
|
||||
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="1_uchk3"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6j0py"]
|
||||
size = Vector2(36, 60)
|
||||
|
||||
[node name="DoorCommand" type="Area2D"]
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_l2uva")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
modulate = Color(0.329412, 0.329412, 0.329412, 1)
|
||||
position = Vector2(-0.5, -8.5)
|
||||
scale = Vector2(0.179688, 0.382812)
|
||||
texture = ExtResource("1_uchk3")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(3, -10)
|
||||
shape = SubResource("RectangleShape2D_6j0py")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,26 @@
|
|||
[gd_scene format=3 uid="uid://ch3n607i8yqy8"]
|
||||
|
||||
[node name="LoseMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 473.0
|
||||
offset_top = 54.0
|
||||
offset_right = 551.0
|
||||
offset_bottom = 77.0
|
||||
text = "YOU LOSE"
|
|
@ -0,0 +1,15 @@
|
|||
extends Control
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(_delta):
|
||||
pass
|
||||
|
||||
|
||||
func _on_button_pressed():
|
||||
get_tree().change_scene_to_file("res://Levels/level_0.tscn")
|
|
@ -0,0 +1,23 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://sj7j3yxfjkko"]
|
||||
|
||||
[ext_resource type="Script" path="res://MainMenu/main_menu.gd" id="1_ga0yx"]
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_ga0yx")
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 518.0
|
||||
offset_top = 184.0
|
||||
offset_right = 565.0
|
||||
offset_bottom = 215.0
|
||||
text = "PLAY
|
||||
"
|
||||
|
||||
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
|
|
@ -15,11 +15,12 @@ func _ready():
|
|||
func _process(_delta):
|
||||
pass
|
||||
|
||||
func throw_at(pos: Vector2, dir: Vector2):
|
||||
func throw_at(pos: Vector2, dir: Vector2, dist: float):
|
||||
self.position = pos
|
||||
m_origin = pos
|
||||
m_dir = dir
|
||||
m_state = self._moving
|
||||
m_dist = dist
|
||||
|
||||
func _physics_process(delta):
|
||||
if (m_origin - self.position).length_squared() >= m_dist * m_dist:
|
||||
|
@ -29,9 +30,10 @@ func _physics_process(delta):
|
|||
m_state.call(delta)
|
||||
|
||||
func _explode(_delta):
|
||||
emit_signal('on_explode', self)
|
||||
emit_signal('on_explode', self, 1)
|
||||
queue_free()
|
||||
|
||||
func _moving(delta):
|
||||
self.velocity = m_dir * m_speed
|
||||
move_and_collide(self.velocity * delta)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://b212rruvxhwqe"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://b212rruvxhwqe"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="1_ga5l4"]
|
||||
[ext_resource type="Script" path="res://Molotov/molotov.gd" id="1_uepii"]
|
||||
|
@ -6,8 +6,11 @@
|
|||
[sub_resource type="CircleShape2D" id="CircleShape2D_oq4si"]
|
||||
radius = 14.0
|
||||
|
||||
[node name="Molotov" type="CharacterBody2D"]
|
||||
collision_layer = 0
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_v1u5d"]
|
||||
radius = 34.0147
|
||||
|
||||
[node name="Molotov" type="CharacterBody2D" groups=["bombs"]]
|
||||
collision_layer = 2
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_uepii")
|
||||
|
||||
|
@ -18,3 +21,8 @@ texture = ExtResource("1_ga5l4")
|
|||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_oq4si")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("CircleShape2D_v1u5d")
|
||||
|
|
|
@ -1,8 +1,24 @@
|
|||
extends Node2D
|
||||
|
||||
func _physics_process(_dt):
|
||||
var delta = Vector2(0, 0)
|
||||
var m_world = null
|
||||
var m_shoot_time = 0.2
|
||||
var m_shoot_timer = 0.0
|
||||
|
||||
func _physics_process(dt):
|
||||
var delta = Vector2(0, 0)
|
||||
|
||||
if Input.is_action_just_pressed("player_shoot") \
|
||||
and m_shoot_timer >= m_shoot_time \
|
||||
and not $Actor.is_dead():
|
||||
var coord = get_global_mouse_position()
|
||||
var to_mouse = coord - $Actor.global_position
|
||||
var dir = to_mouse.normalized()
|
||||
var dist = to_mouse.length()
|
||||
m_world.throw_bomb($Actor.global_position, dir, dist)
|
||||
m_shoot_timer = 0.0
|
||||
|
||||
m_shoot_timer += dt
|
||||
|
||||
if Input.is_action_pressed("player_up"):
|
||||
delta.y -= 1.0
|
||||
if Input.is_action_pressed("player_down"):
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
[ext_resource type="Script" path="res://Player/player.gd" id="1_2pfvx"]
|
||||
[ext_resource type="PackedScene" uid="uid://c0kqx6dsury58" path="res://Actor/actor.tscn" id="2_s40rr"]
|
||||
|
||||
[node name="Player" type="Node2D"]
|
||||
[node name="Player" type="Node2D" groups=["player"]]
|
||||
script = ExtResource("1_2pfvx")
|
||||
|
||||
[node name="Actor" parent="." instance=ExtResource("2_s40rr")]
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
extends Node2D
|
||||
|
||||
|
||||
class Line:
|
||||
var m_time: float = 0.0
|
||||
var m_source: Vector2 = Vector2(0.0, 0.0)
|
||||
var m_position: Vector2 = Vector2(0.0, 0.0)
|
||||
var m_color : Color = Color.RED
|
||||
var m_timer : float = 0.0
|
||||
|
||||
func _init(t, src, pos, col):
|
||||
m_time = t
|
||||
m_source = src
|
||||
m_position = pos
|
||||
m_color = col
|
||||
|
||||
var m_lines = []
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
for line in m_lines:
|
||||
line.m_timer += delta
|
||||
var t = min(1.0, line.m_timer / line.m_time)
|
||||
line.m_color = Color(1, 0, 0, 1.0 - t)
|
||||
|
||||
m_lines = m_lines.filter(func (x): return x.m_timer < x.m_time)
|
||||
queue_redraw()
|
||||
|
||||
func add_line(pos: Vector2, duration: float):
|
||||
var src = Vector2(randf_range(0, 800), 0)
|
||||
m_lines.push_back(Line.new(duration, src, pos, Color.RED))
|
||||
|
||||
func _draw():
|
||||
for line in m_lines:
|
||||
draw_line(line.m_source, line.m_position, line.m_color, 3)
|
||||
|
||||
|
||||
|
|
@ -1,37 +1,106 @@
|
|||
extends Node2D
|
||||
|
||||
var m_broken_timer = 0.0
|
||||
var m_broken_time = 0.2
|
||||
var process_state = null
|
||||
var m_death_timer = 0.0
|
||||
var m_death_time = 2.0
|
||||
|
||||
var m_strike_time = 1.0
|
||||
var m_strike_timer = 0.0
|
||||
var m_strikes = []
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
for bear in get_tree().get_nodes_in_group('bears'):
|
||||
bear.m_target = $Player
|
||||
bear.m_world = self
|
||||
$Player.m_world = self
|
||||
self.process_state = self.process
|
||||
|
||||
func _process(_delta):
|
||||
if Input.is_action_just_pressed("ui_accept"):
|
||||
throw_bomb(Vector2(512, 256), Vector2(0, 1))
|
||||
func _process(delta):
|
||||
if self.process_state:
|
||||
self.process_state.call(delta)
|
||||
|
||||
if is_outside($Player/Actor) and $Player/Actor.is_normal():
|
||||
$Player/Actor.to_falling()
|
||||
func process(delta):
|
||||
for actor in get_tree().get_nodes_in_group('actors'):
|
||||
if is_outside(actor) and actor.is_normal():
|
||||
actor.to_falling()
|
||||
|
||||
if is_outside($Bear/Actor) and $Bear/Actor.is_normal():
|
||||
$Bear/Actor.to_falling()
|
||||
if m_strike_timer >= m_strike_time:
|
||||
var all = $TileMap.get_used_cells(0)
|
||||
all.shuffle()
|
||||
var ground = null
|
||||
for t in all:
|
||||
var data = $TileMap.get_cell_tile_data(0, t)
|
||||
if data.get_custom_data('type') == 'ground':
|
||||
ground = t
|
||||
break
|
||||
self.add_broken_ground(ground, 1, 0.8)
|
||||
$Strikes.add_line(to_global($TileMap.map_to_local(ground)), 0.15)
|
||||
m_strike_timer = 0.0
|
||||
m_strike_time = randf() * 5.0
|
||||
|
||||
m_strike_timer += delta
|
||||
if m_broken_timer >= m_broken_time:
|
||||
var k = 0
|
||||
var N = 2
|
||||
var all_cell = $TileMap.get_used_cells(0)
|
||||
all_cell.shuffle()
|
||||
|
||||
for t in all_cell:
|
||||
var data = $TileMap.get_cell_tile_data(0, t)
|
||||
var type = data.get_custom_data('type')
|
||||
if type == 'broken' and k < N:
|
||||
$TileMap.set_cell(0, t, 0, Vector2i(1, 0))
|
||||
add_broken_ground(t, 1, 0.4)
|
||||
k += 1
|
||||
m_broken_timer = 0.0
|
||||
|
||||
m_broken_timer += delta
|
||||
|
||||
if $Player/Actor.is_dead():
|
||||
self.process_state = self.process_death
|
||||
m_death_timer = 0.0
|
||||
|
||||
func process_death(delta):
|
||||
var f = m_death_timer/m_death_time
|
||||
$CanvasLayer/ColorRect.modulate = Color(0, 0, 0, f)
|
||||
if m_death_timer >= m_death_time:
|
||||
get_tree().change_scene_to_file("res://LoseMenu/lose_menu.tscn")
|
||||
|
||||
m_death_timer += delta
|
||||
|
||||
func is_outside(actor):
|
||||
var coord = $TileMap.local_to_map(actor.global_position)
|
||||
var tile : TileData = $TileMap.get_cell_tile_data(0, coord)
|
||||
return tile.get_custom_data('is_void')
|
||||
if tile:
|
||||
return tile.get_custom_data('type') == 'void'
|
||||
|
||||
|
||||
func throw_bomb(from: Vector2, dir: Vector2):
|
||||
|
||||
func throw_bomb(from: Vector2, dir: Vector2, dist: float):
|
||||
var bomb = preload("res://Molotov/molotov.tscn").instantiate()
|
||||
bomb.on_explode.connect(_on_bomb_explode)
|
||||
bomb.throw_at(from, dir)
|
||||
bomb.throw_at(from, dir, dist)
|
||||
add_child(bomb)
|
||||
|
||||
func _on_bomb_explode(bomb):
|
||||
func _on_bomb_explode(bomb, _level):
|
||||
var tilemap: TileMap = $TileMap
|
||||
var pos = tilemap.local_to_map(bomb.position)
|
||||
|
||||
var rad = bomb.m_explosion_radius
|
||||
|
||||
var extra = 2
|
||||
var proba = 0.6
|
||||
add_broken_ground(pos, extra, proba)
|
||||
|
||||
for i in range(pos.y - rad, pos.y + rad ):
|
||||
for j in range(pos.x - rad, pos.x + rad ):
|
||||
tilemap.set_cell(0, Vector2i(j, i), 0, Vector2i(1, 0))
|
||||
|
||||
func add_broken_ground(pos: Vector2i, rad, proba):
|
||||
for i in range(pos.y - rad , pos.y + rad):
|
||||
for j in range(pos.x - rad, pos.x + rad):
|
||||
if randf() <= proba:
|
||||
var data = $TileMap.get_cell_tile_data(0, Vector2i(j, i))
|
||||
if data and data.get_custom_data('type') == 'ground':
|
||||
$TileMap.set_cell(0, Vector2i(j, i), 0, Vector2i(2, 0))
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,16 +8,21 @@ texture_region_size = Vector2i(32, 32)
|
|||
0:0/0 = 0
|
||||
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||
0:0/0/physics_layer_0/angular_velocity = 0.0
|
||||
0:0/0/custom_data_0 = "ground"
|
||||
1:0/0 = 0
|
||||
1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||
1:0/0/physics_layer_0/angular_velocity = 0.0
|
||||
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
|
||||
1:0/0/custom_data_0 = true
|
||||
1:0/0/custom_data_0 = "void"
|
||||
2:0/0 = 0
|
||||
2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
|
||||
2:0/0/physics_layer_0/angular_velocity = 0.0
|
||||
2:0/0/custom_data_0 = "broken"
|
||||
|
||||
[resource]
|
||||
tile_size = Vector2i(32, 32)
|
||||
physics_layer_0/collision_layer = 0
|
||||
physics_layer_0/collision_mask = 0
|
||||
custom_data_layer_0/name = "is_void"
|
||||
custom_data_layer_0/type = 1
|
||||
custom_data_layer_0/name = "type"
|
||||
custom_data_layer_0/type = 4
|
||||
sources/0 = SubResource("TileSetAtlasSource_0k0yx")
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 172 B After Width: | Height: | Size: 438 B |
|
@ -11,7 +11,7 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="Ludum Dare 54"
|
||||
run/main_scene="res://Sandbox/sandbox.tscn"
|
||||
run/main_scene="res://MainMenu/main_menu.tscn"
|
||||
config/features=PackedStringArray("4.2", "GL Compatibility")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
|
@ -37,6 +37,11 @@ player_right={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
player_shoot={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
|
|
Loading…
Reference in New Issue