ADD: actors that can fall.
parent
fac0db1fe0
commit
92f660e43e
|
@ -0,0 +1 @@
|
||||||
|
*.import
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 172 B |
|
@ -0,0 +1,2 @@
|
||||||
|
# Normalize EOL for all files that Git considers text files.
|
||||||
|
* text=auto eol=lf
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Godot 4+ specific ignores
|
||||||
|
.godot/
|
|
@ -0,0 +1,11 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var state_name = 'Dead'
|
||||||
|
|
||||||
|
var this = null
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _state_process(_delta):
|
||||||
|
pass
|
|
@ -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
|
|
@ -0,0 +1,10 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var state_name = 'Normal'
|
||||||
|
var this = null
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _state_process(_delta):
|
||||||
|
pass
|
|
@ -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
|
|
@ -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")
|
|
@ -0,0 +1,7 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
$Actor/Sprite2D.modulate = Color.RED
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
pass
|
|
@ -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")]
|
|
@ -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)
|
|
@ -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")
|
|
@ -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()
|
|
@ -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)
|
|
@ -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))
|
File diff suppressed because one or more lines are too long
|
@ -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")
|
Binary file not shown.
After Width: | Height: | Size: 172 B |
|
@ -0,0 +1,10 @@
|
||||||
|
extends CharacterBody2D
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(_delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _physics_process(_delta):
|
||||||
|
pass
|
|
@ -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")
|
|
@ -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 |
|
@ -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"
|
Loading…
Reference in New Issue