ADD: actors that can fall.

main
bog 2023-09-30 12:24:51 +02:00
parent fac0db1fe0
commit 92f660e43e
24 changed files with 358 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.import

BIN
assets/tileset.ase Normal file

Binary file not shown.

BIN
assets/tileset.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

2
src/.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

2
src/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
# Godot 4+ specific ignores
.godot/

11
src/Actor/Dead.gd Normal file
View File

@ -0,0 +1,11 @@
extends Node
var state_name = 'Dead'
var this = null
func _ready():
pass
func _state_process(_delta):
pass

21
src/Actor/Falling.gd Normal file
View File

@ -0,0 +1,21 @@
extends Node
var this = null
var state_name = 'Falling'
var timer = 0.0
var time = 1.0
func _ready():
pass
func _state_process(delta):
var sprite : Sprite2D = this.get_node('Sprite2D')
var ratio = 0.3
sprite.scale.x = max(0, sprite.scale.x - ratio * delta)
sprite.scale.y = max(0, sprite.scale.y - ratio * delta)
if timer >= time:
this.to_dead()
timer += delta

10
src/Actor/Normal.gd Normal file
View File

@ -0,0 +1,10 @@
extends Node
var state_name = 'Normal'
var this = null
func _ready():
pass
func _state_process(_delta):
pass

30
src/Actor/actor.gd Normal file
View File

@ -0,0 +1,30 @@
extends CharacterBody2D
var m_dir = Vector2(0, 0)
var m_speed = 256
var m_state = null
func _ready():
self.to_normal()
func _process(delta):
if m_state:
m_state._state_process(delta)
func is_normal():
return m_state.state_name == 'Normal'
func to_normal():
m_state = preload("res://Actor/Normal.gd").new()
m_state.this = self
func is_falling():
return m_state.state_name == 'Falling'
func to_falling():
m_state = preload("res://Actor/Falling.gd").new()
m_state.this = self
func to_dead():
m_state = preload("res://Actor/Dead.gd").new()
m_state.this = self

17
src/Actor/actor.tscn Normal file
View File

@ -0,0 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://c0kqx6dsury58"]
[ext_resource type="Script" path="res://Actor/actor.gd" id="1_0612w"]
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="2_itibm"]
[sub_resource type="CircleShape2D" id="CircleShape2D_e2sef"]
radius = 16.0312
[node name="Actor" type="CharacterBody2D"]
script = ExtResource("1_0612w")
[node name="Sprite2D" type="Sprite2D" parent="."]
scale = Vector2(0.25, 0.25)
texture = ExtResource("2_itibm")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_e2sef")

7
src/Bear/bear.gd Normal file
View File

@ -0,0 +1,7 @@
extends Node2D
func _ready():
$Actor/Sprite2D.modulate = Color.RED
func _process(_delta):
pass

9
src/Bear/bear.tscn Normal file
View File

@ -0,0 +1,9 @@
[gd_scene load_steps=3 format=3 uid="uid://dc0s54l2iwr0c"]
[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"]
script = ExtResource("1_yppa7")
[node name="Actor" parent="." instance=ExtResource("2_6n7sl")]

37
src/Molotov/molotov.gd Normal file
View File

@ -0,0 +1,37 @@
extends CharacterBody2D
var m_origin = Vector2(0.0, 0.0)
var m_speed = 256.0
var m_dist = 200.0
var m_dir = Vector2(0.0, 1.0)
var m_state = null
var m_explosion_radius = 1
signal on_explode
func _ready():
m_origin = self.position
func _process(_delta):
pass
func throw_at(pos: Vector2, dir: Vector2):
self.position = pos
m_origin = pos
m_dir = dir
m_state = self._moving
func _physics_process(delta):
if (m_origin - self.position).length_squared() >= m_dist * m_dist:
m_state = self._explode
if m_state != null:
m_state.call(delta)
func _explode(_delta):
emit_signal('on_explode', self)
queue_free()
func _moving(delta):
self.velocity = m_dir * m_speed
move_and_collide(self.velocity * delta)

20
src/Molotov/molotov.tscn Normal file
View File

@ -0,0 +1,20 @@
[gd_scene load_steps=4 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"]
[sub_resource type="CircleShape2D" id="CircleShape2D_oq4si"]
radius = 14.0
[node name="Molotov" type="CharacterBody2D"]
collision_layer = 0
collision_mask = 0
script = ExtResource("1_uepii")
[node name="Sprite2D" type="Sprite2D" parent="."]
modulate = Color(0.956863, 0.956863, 0, 1)
scale = Vector2(0.25, 0.25)
texture = ExtResource("1_ga5l4")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_oq4si")

22
src/Player/player.gd Normal file
View File

@ -0,0 +1,22 @@
extends Node2D
func _physics_process(_dt):
var delta = Vector2(0, 0)
if Input.is_action_pressed("player_up"):
delta.y -= 1.0
if Input.is_action_pressed("player_down"):
delta.y += 1.0
if Input.is_action_pressed("player_left"):
delta.x -= 1.0
if Input.is_action_pressed("player_right"):
delta.x += 1.0
if delta.length_squared() > 0:
delta = delta.normalized()
$Actor.m_dir = delta
if $Actor.is_normal():
$Actor.velocity = delta * $Actor.m_speed
$Actor.move_and_slide()

12
src/Player/player.tscn Normal file
View File

@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://dhjnilcj5mvou"]
[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"]
script = ExtResource("1_2pfvx")
[node name="Actor" parent="." instance=ExtResource("2_s40rr")]
[node name="Camera2D" type="Camera2D" parent="Actor"]
zoom = Vector2(1.5, 1.5)

37
src/Sandbox/sandbox.gd Normal file
View File

@ -0,0 +1,37 @@
extends Node2D
func _ready():
pass
func _process(_delta):
if Input.is_action_just_pressed("ui_accept"):
throw_bomb(Vector2(512, 256), Vector2(0, 1))
if is_outside($Player/Actor) and $Player/Actor.is_normal():
$Player/Actor.to_falling()
if is_outside($Bear/Actor) and $Bear/Actor.is_normal():
$Bear/Actor.to_falling()
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')
func throw_bomb(from: Vector2, dir: Vector2):
var bomb = preload("res://Molotov/molotov.tscn").instantiate()
bomb.on_explode.connect(_on_bomb_explode)
bomb.throw_at(from, dir)
add_child(bomb)
func _on_bomb_explode(bomb):
var tilemap: TileMap = $TileMap
var pos = tilemap.local_to_map(bomb.position)
var rad = bomb.m_explosion_radius
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))

24
src/Sandbox/sandbox.tscn Normal file

File diff suppressed because one or more lines are too long

23
src/Sandbox/tile_set.tres Normal file
View File

@ -0,0 +1,23 @@
[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://c7xunhoxuo3ha"]
[ext_resource type="Texture2D" uid="uid://b25vxq6cfx0i0" path="res://Sandbox/tileset.png" id="1_0ncmx"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0k0yx"]
texture = ExtResource("1_0ncmx")
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
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
[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
sources/0 = SubResource("TileSetAtlasSource_0k0yx")

BIN
src/Sandbox/tileset.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

10
src/Turkey/turkey.gd Normal file
View File

@ -0,0 +1,10 @@
extends CharacterBody2D
func _ready():
pass
func _process(_delta):
pass
func _physics_process(_delta):
pass

18
src/Turkey/turkey.tscn Normal file
View File

@ -0,0 +1,18 @@
[gd_scene load_steps=4 format=3 uid="uid://xqcydpvayehp"]
[ext_resource type="Script" path="res://Turkey/turkey.gd" id="1_v5li6"]
[ext_resource type="Texture2D" uid="uid://blr8qcmuqs5vl" path="res://icon.svg" id="1_wfxoc"]
[sub_resource type="CircleShape2D" id="CircleShape2D_v2xgi"]
radius = 17.0
[node name="Turkey" type="CharacterBody2D"]
script = ExtResource("1_v5li6")
[node name="Sprite2D" type="Sprite2D" parent="."]
modulate = Color(0, 0.698039, 0.45098, 1)
scale = Vector2(0.25, 0.25)
texture = ExtResource("1_wfxoc")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_v2xgi")

1
src/icon.svg Normal file
View File

@ -0,0 +1 @@
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="2" width="124" height="124" rx="14" fill="#363d52" stroke="#212532" stroke-width="4"/><g transform="scale(.101) translate(122 122)"><g fill="#fff"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 813 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H447l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c3 34 55 34 58 0v-86c-3-34-55-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></g></svg>

After

Width:  |  Height:  |  Size: 950 B

44
src/project.godot Normal file
View File

@ -0,0 +1,44 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Ludum Dare 54"
run/main_scene="res://Sandbox/sandbox.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/icon="res://icon.svg"
[input]
player_up={
"deadzone": 0.5,
"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":87,"key_label":0,"unicode":122,"echo":false,"script":null)
]
}
player_down={
"deadzone": 0.5,
"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":83,"key_label":0,"unicode":115,"echo":false,"script":null)
]
}
player_left={
"deadzone": 0.5,
"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":65,"key_label":0,"unicode":113,"echo":false,"script":null)
]
}
player_right={
"deadzone": 0.5,
"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)
]
}
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"