Add LogEntity

This commit is contained in:
Alice Gaudon 2020-08-19 11:56:10 +02:00
parent 370b2e5925
commit f2918cab11
15 changed files with 303 additions and 7 deletions

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 0, 320, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 32, 320, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 64, 319, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 96, 320, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 0, 352, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 32, 352, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 64, 352, 32, 32 )

View File

@ -0,0 +1,7 @@
[gd_resource type="AtlasTexture" load_steps=2 format=2]
[ext_resource path="res://images/game1/game1_tileset.png" type="Texture" id=1]
[resource]
atlas = ExtResource( 1 )
region = Rect2( 96, 352, 32, 32 )

View File

@ -28,12 +28,18 @@ _global_script_classes=[ {
"class": "IntroScript",
"language": "GDScript",
"path": "res://scripts/scenes/IntroScript.gd"
}, {
"base": "Sprite",
"class": "LogEntity",
"language": "GDScript",
"path": "res://scripts/game1/LogEntity.gd"
} ]
_global_script_class_icons={
"DialogueAction": "",
"DialogueBox": "",
"Flatfish": "",
"IntroScript": ""
"IntroScript": "",
"LogEntity": ""
}
[application]

View File

@ -46,6 +46,8 @@ shader_param/particles_anim_v_frames = 11
shader_param/particles_anim_loop = true
[sub_resource type="ParticlesMaterial" id=6]
emission_shape = 2
emission_box_extents = Vector3( 10, 10, 1 )
flag_disable_z = true
direction = Vector3( -1, 0, 0 )
spread = 5.0

View File

@ -14,6 +14,8 @@ offset = Vector2( 8, 0 )
[node name="Right" type="Area2D" parent="Sensors"]
position = Vector2( 16, 0 )
collision_layer = 0
collision_mask = 3
[node name="CollisionShape2D" type="CollisionShape2D" parent="Sensors/Right"]
scale = Vector2( 0.5, 0.5 )
@ -21,6 +23,8 @@ shape = SubResource( 1 )
[node name="Left" type="Area2D" parent="Sensors"]
position = Vector2( -16, 0 )
collision_layer = 0
collision_mask = 3
[node name="CollisionShape2D" type="CollisionShape2D" parent="Sensors/Left"]
scale = Vector2( 0.5, 0.5 )

View File

@ -0,0 +1,54 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://images/game1/tileset.tres" type="TileSet" id=1]
[node name="TestLogEntity" type="Node2D"]
[node name="Background" type="TileMap" parent="."]
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 )
format = 1
tile_data = PoolIntArray( -131079, 0, 0, -131078, 0, 0, -131077, 0, 0, -131076, 0, 0, -131075, 536870912, 0, -131074, 0, 0, -131073, 0, 0, -196608, 0, 0, -196607, 0, 0, -196606, 0, 0, -196605, 0, 0, -196604, 0, 0, -196603, 0, 0, -196602, 0, 0, -196601, 0, 0, -196600, 0, 0, -196599, 0, 0, -196598, 0, 0, -196597, 0, 0, -196596, 0, 0, -196595, 0, 0, -196594, 0, 0, -196593, 0, 0, -196592, 0, 0, -196591, 0, 0, -196590, 0, 0, -196589, 0, 0, -196588, 0, 0, -196587, 0, 0, -196586, 0, 0, -196585, 0, 0, -65543, 0, 0, -65542, 0, 0, -65541, 0, 0, -65540, 0, 0, -65539, 536870912, 0, -65538, 0, 0, -65537, 0, 0, -131072, 0, 0, -131071, 0, 0, -131070, 0, 0, -131069, 0, 0, -131068, 0, 0, -131067, 0, 0, -131066, 0, 0, -131065, 0, 0, -131064, 0, 0, -131063, 0, 0, -131062, 0, 0, -131061, 0, 0, -131060, 0, 0, -131059, 0, 0, -131058, 0, 0, -131057, 0, 0, -131056, 0, 0, -131055, 0, 0, -131054, 0, 0, -131053, 0, 0, -131052, 0, 0, -131051, 0, 0, -131050, 0, 0, -131049, 0, 0, -7, 0, 0, -6, 0, 0, -5, 0, 0, -4, 536870912, 0, -3, 536870912, 0, -2, 0, 0, -1, 0, 0, -65536, 0, 0, -65535, 0, 0, -65534, 0, 0, -65533, 0, 0, -65532, 0, 0, -65531, 0, 0, -65530, 0, 0, -65529, 0, 0, -65528, 0, 0, -65527, 0, 0, -65526, 0, 0, -65525, 0, 0, -65524, 0, 0, -65523, 0, 0, -65522, 0, 0, -65521, 0, 0, -65520, 0, 0, -65519, 0, 0, -65518, 0, 0, -65517, 0, 0, -65516, 0, 0, -65515, 0, 0, -65514, 0, 0, -65513, 0, 0, 65529, 0, 0, 65530, 0, 0, 65531, 0, 0, 65532, 0, 0, 65533, 0, 0, 65534, 0, 0, 65535, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 16, 0, 0, 17, 0, 0, 18, 0, 0, 19, 0, 0, 20, 0, 0, 21, 0, 0, 22, 0, 0, 23, 0, 0, 131065, 0, 0, 131066, 0, 0, 131067, 0, 0, 131068, 0, 0, 131069, 0, 0, 131070, 0, 0, 131071, 0, 0, 65536, 0, 0, 65537, 0, 0, 65538, 0, 0, 65539, 0, 0, 65540, 0, 0, 65541, 0, 0, 65542, 0, 0, 65543, 0, 0, 65544, 0, 0, 65545, 0, 0, 65546, 0, 0, 65547, 0, 0, 65548, 0, 0, 65549, 0, 0, 65550, 0, 0, 65551, 0, 0, 65552, 0, 0, 65553, 0, 0, 65554, 0, 0, 65555, 0, 0, 65556, 0, 0, 65557, 0, 0, 65558, 0, 0, 65559, 0, 0, 196601, 0, 0, 196602, 0, 0, 196603, 0, 0, 196604, 0, 0, 196605, 0, 0, 196606, 0, 0, 196607, 0, 0, 131072, 0, 0, 131073, 0, 0, 131074, 0, 0, 131075, 0, 0, 131076, 0, 0, 131077, 0, 0, 131078, 0, 0, 131079, 0, 0, 131080, 0, 0, 131081, 0, 0, 131082, 0, 0, 131083, 0, 0, 131084, 0, 0, 131085, 0, 0, 131086, 0, 0, 131087, 0, 0, 131088, 0, 0, 131089, 0, 0, 131090, 0, 0, 131091, 0, 0, 131092, 0, 0, 131093, 0, 0, 131094, 0, 0, 131095, 0, 0, 262137, 0, 0, 262138, 0, 0, 262139, 0, 0, 262140, 0, 0, 262141, 0, 0, 262142, 0, 0, 262143, 0, 0, 196608, 0, 0, 196609, 0, 0, 196610, 0, 0, 196611, 0, 0, 196612, 0, 0, 196613, 0, 0, 196614, 0, 0, 196615, 0, 0, 196616, 0, 0, 196617, 0, 0, 196618, 0, 0, 196619, 0, 0, 196620, 0, 0, 196621, 0, 0, 196622, 0, 0, 196623, 0, 0, 196624, 0, 0, 196625, 0, 0, 196626, 0, 0, 196627, 0, 0, 196628, 0, 0, 196629, 0, 0, 196630, 0, 0, 196631, 0, 0, 327673, 0, 0, 327674, 0, 0, 327675, 0, 0, 327676, 0, 0, 327677, 0, 0, 327678, 0, 0, 327679, 0, 0, 262144, 0, 0, 262145, 0, 0, 262146, 0, 0, 262147, 0, 0, 262148, 0, 0, 262149, 0, 0, 262150, 0, 0, 262151, 0, 0, 262152, 0, 0, 262153, 0, 0, 262154, 0, 0, 262155, 0, 0, 262156, 0, 0, 262157, 0, 0, 262158, 0, 0, 262159, 0, 0, 262160, 0, 0, 262161, 0, 0, 262162, 0, 0, 262163, 0, 0, 262164, 0, 0, 262165, 0, 0, 262166, 0, 0, 262167, 0, 0, 393209, 0, 0, 393210, 0, 0, 393211, 0, 0, 393212, 0, 0, 393213, 0, 0, 393214, 0, 0, 393215, 0, 0, 327680, 0, 0, 327681, 0, 0, 327682, 0, 0, 327683, 0, 0, 327684, 0, 0, 327685, 0, 0, 327686, 0, 0, 327687, 0, 0, 327688, 0, 0, 327689, 0, 0, 327690, 0, 0, 327691, 0, 0, 327692, 0, 0, 327693, 0, 0, 327694, 0, 0, 327695, 0, 0, 327696, 0, 0, 327697, 0, 0, 327698, 0, 0, 327699, 0, 0, 327700, 0, 0, 327701, 0, 0, 327702, 0, 0, 327703, 0, 0, 458745, 0, 0, 458746, 0, 0, 458747, 0, 0, 458748, 0, 0, 458749, 0, 0, 458750, 0, 0, 458751, 0, 0, 393216, 0, 0, 393217, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 0, 0, 393222, 0, 0, 393223, 0, 0, 393224, 0, 0, 393225, 0, 0, 393226, 0, 0, 393227, 0, 0, 393228, 0, 0, 393229, 0, 0, 393230, 0, 0, 393231, 0, 0, 393232, 0, 0, 393233, 0, 0, 393234, 0, 0, 393235, 0, 0, 393236, 0, 0, 393237, 0, 0, 393238, 0, 0, 393239, 0, 0 )
[node name="Ground" type="TileMap" parent="."]
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 )
format = 1
tile_data = PoolIntArray( -262141, 57, 0, -131078, 49, 2, -196605, 49, 65554, -196597, 49, 15, -196596, 49, 65554, -196593, 49, 11, -196592, 49, 65542, -196591, 49, 65545, -196590, 49, 4, -196587, 49, 15, -131069, 49, 65537, -131068, 49, 65550, -131056, 49, 65540, -131052, 49, 13, -131051, 49, 65549, -1, 49, 65551, -65531, 49, 4, -65524, 59, 0, -65516, 49, 17, 2, 49, 65549, 19, 49, 65538, 20, 49, 13, 23, 49, 65546, 65542, 49, 65542, 65543, 49, 5, 65548, 59, 0, 65551, 49, 65546, 65555, 49, 6, 65558, 49, 65551, 65559, 49, 17, 196605, 49, 65554, 196606, 49, 65537, 196607, 49, 12, 131075, 49, 65555, 131078, 49, 13, 131081, 49, 15, 131092, 49, 65542, 131093, 49, 65537, 131094, 49, 65545, 196610, 49, 65543, 196620, 58, 0, 196630, 49, 16, 262146, 49, 65549, 262147, 59, 0, 262148, 49, 16, 262156, 49, 10, 262157, 49, 4, 262161, 49, 2, 262165, 49, 10, 262166, 49, 14, 262167, 49, 14, 393210, 49, 65548, 393212, 49, 65544, 327691, 49, 65553, 327692, 58, 0, 327695, 49, 65548, 327696, 49, 10, 327703, 49, 5, 458746, 49, 14, 458747, 49, 65544, 458749, 49, 65548, 393219, 55, 0, 393227, 49, 65539, 393231, 49, 9, 393237, 49, 65547, 393238, 49, 14 )
[node name="LogHoles" type="TileMap" parent="."]
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
collision_layer = 2
collision_mask = 0
format = 1
tile_data = PoolIntArray( -720893, 68, 0, -65528, -1073741756, 0, 196603, 26, 0, 196604, 26, 0, 327675, -1073741758, 0, 458750, 55, 0, 524286, 55, 0, 786435, 67, 0 )
[node name="Special" type="TileMap" parent="."]
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 )
format = 1
tile_data = PoolIntArray( -327670, 55, 0, -327668, 55, 0, -327666, 57, 0, -327664, 57, 0, -196598, 5, 0, -196597, 5, 0, -196596, 5, 0, -196595, 5, 0, -196594, 5, 0, -196593, 5, 0, -196592, 5, 0, -196591, 5, 0, -196590, 5, 0, -2, 5, 0, -65532, 5, 0, -65526, 5, 0, 65534, 5, 0, 0, 71, 0, 10, 5, 0, 131070, 5, 0, 65546, 5, 0, 196606, 5, 0, 131076, 5, 0, 131082, 5, 0, 262142, 5, 0, 196618, 5, 0, 196627, 72, 0, 327678, 5, 0, 262154, 5, 0, 393214, 5, 0, 327684, 5, 0, 327690, 5, 0 )
[node name="Props" type="TileMap" parent="."]
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 )
format = 1
tile_data = PoolIntArray( -458736, 50, 0, -393204, 50, 0, -393202, 50, 0, -327670, 50, 0, -65535, 26, 0, -65523, 50, 0, 65550, 50, 0, 196622, 50, 0, 262163, 14, 0, 327687, 40, 0, 327695, 50, 0, 327697, 40, 0, 393224, 41, 0, 393227, 18, 0, 393229, 42, 0, 393232, 39, 0 )
[node name="Air" type="TileMap" parent="."]
z_index = 1
tile_set = ExtResource( 1 )
cell_size = Vector2( 16, 16 )
cell_quadrant_size = 8
cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 )
format = 1
tile_data = PoolIntArray( 18, 8, 0, 65551, 32, 0 )

View File

@ -4,7 +4,7 @@
[ext_resource path="res://scripts/game1/PlayerController.gd" type="Script" id=2]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 10, 4.01179 )
extents = Vector2( 10, 4.5 )
[node name="Player" type="RigidBody2D"]
position = Vector2( 1, -1 )
@ -14,6 +14,7 @@ linear_damp = 25.0
script = ExtResource( 2 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( 0, 0.5 )
shape = SubResource( 1 )
[node name="Sprite" type="AnimatedSprite" parent="."]

View File

@ -8,6 +8,7 @@ var player : AnimatedSprite
var player_camera : Camera2D
onready var levels = [
#'TestLogEntity',
'Level1',
'Level2',
'Level3',
@ -20,6 +21,7 @@ var spawn_pos = Vector2()
var exit_points = []
func _ready():
start_game()
$Opening1.play('default')
yield($Opening1, 'animation_finished')
$Opening1.queue_free()
@ -90,7 +92,15 @@ func spawn_entities(level : Node):
# Exit points
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('finish')):
exit_points.append(cell)
# Logs
for d in ['horizontal', 'vertical']:
for i in [1, 2, 3, 4]:
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('log_' + d + '_' + String(i))):
var log_entity = LogEntity.new(LogEntity.Type.H if d == 'horizontal' else LogEntity.Type.V, i - 1)
log_entity.spawn_at(cell * 16 + Vector2(16, 16))
entities.add_child(log_entity)
tm.set_cell(cell.x, cell.y, -1)
var go_right = false
var go_left = false
@ -131,7 +141,31 @@ func _process(delta):
func can_move_towards(sensorName : String) -> bool:
var sensor = player.get_node("Sensors/" + sensorName) as Area2D
return sensor.get_overlapping_bodies().size() == 0 && sensor.get_overlapping_areas().size() == 0
var bodies = sensor.get_overlapping_bodies()
var areas = sensor.get_overlapping_areas()
# Check for pushables and push
for body in bodies + areas:
var p = body.get_parent()
if p is LogEntity:
var rot = int(floor(player.rotation_degrees / 90.0)) % 4
var dir = 1 if (rot == 0 || rot == 1) && sensorName == 'Right' || (rot == 2 || rot == 3) && sensorName == 'Left' else -1
# Push and fall
if p.push((player.position / 16) - Vector2(0.5, 0.5), dir):
var level = $Game.get_node(levels[current_level])
var pos = (p.position / 16) - Vector2(1, 1)
for layer in level.get_children():
if !(layer is TileMap): continue
var tm = layer as TileMap
var tileset = tm.tile_set
var name = tileset.tile_get_name(tm.get_cellv(pos))
if name != null && name.rfind('hole_') == 0:
tm.set_cellv(pos, tileset.find_tile_by_name("log_in_" + name), tm.is_cell_x_flipped(pos.x, pos.y), tm.is_cell_y_flipped(pos.x, pos.y), tm.is_cell_transposed(pos.x, pos.y))
p.queue_free()
return bodies.size() == 0 && areas.size() == 0
func move_right():
is_camera_moving = true
@ -164,7 +198,7 @@ func check_exit() -> bool:
print(player_pos)
for exit in exit_points:
if player_pos == exit:
print('OK')
print('exit')
next_level()
return true
return false
@ -175,8 +209,6 @@ func offset_player(offset):
elif r == 1: player.position.y += offset
elif r == 2: player.position.x -= offset
elif r == 3: player.position.y -= offset
print((player.position - Vector2(8, 8)) / 16)
const animation_steps = [3, 6, 10, 13]
var is_camera_moving = false

141
scripts/game1/LogEntity.gd Normal file
View File

@ -0,0 +1,141 @@
extends Sprite
class_name LogEntity
const h = [
preload('res://images/game1/log_h_1.tres'),
preload('res://images/game1/log_h_2.tres'),
preload('res://images/game1/log_h_3.tres'),
preload('res://images/game1/log_h_4.tres'),
]
const v = [
preload('res://images/game1/log_v_1.tres'),
preload('res://images/game1/log_v_2.tres'),
preload('res://images/game1/log_v_3.tres'),
preload('res://images/game1/log_v_4.tres'),
]
var type : int
var index : int
var collision_area : Area2D
var back_sensor : Area2D
var front_sensor : Area2D
func _init(_type=Type.H, _rotation=0):
type = _type
index = _rotation
var physics_shape = Vector2(2 if type == Type.H else 1, 2 if type == Type.V else 1)
var box_offset = Vector2(0, 8) if type == Type.H else Vector2(8, 0)
# Collision box
collision_area = Area2D.new()
var shape = CollisionShape2D.new()
shape.shape = RectangleShape2D.new()
shape.shape.extents = Vector2(8, 8) * physics_shape
collision_area.add_child(shape)
collision_area.position = box_offset
add_child(collision_area)
# Sensors
back_sensor = Area2D.new()
shape = CollisionShape2D.new()
shape.shape = RectangleShape2D.new()
shape.shape.extents = Vector2(6, 6) * physics_shape
back_sensor.add_child(shape)
back_sensor.position = box_offset
add_child(back_sensor)
front_sensor = Area2D.new()
shape = CollisionShape2D.new()
shape.shape = RectangleShape2D.new()
shape.shape.extents = Vector2(6, 6) * physics_shape
front_sensor.add_child(shape)
front_sensor.position = box_offset
add_child(front_sensor)
if type == Type.H:
back_sensor.position.y -= 16
front_sensor.position.y += 16
else:
back_sensor.position.x -= 16
front_sensor.position.x += 16
front_sensor.set_collision_layer_bit(0, 0)
front_sensor.set_collision_mask_bit(0, 1)
front_sensor.set_collision_mask_bit(1, 0)
back_sensor.set_collision_layer_bit(0, 0)
back_sensor.set_collision_mask_bit(0, 1)
back_sensor.set_collision_mask_bit(1, 0)
update()
func spawn_at(pos : Vector2):
position = pos
# Offset for special i=2
if index == 2:
if type == Type.H: position.y -= 16
else: position.x -= 16
func update():
var atlas = h
if type == Type.V:
atlas = v
texture = atlas[index]
if type == Type.H:
if index == 2:
offset.y += 16
else:
offset.y = 0
else:
if index == 2:
offset.x += 16
else:
offset.x = 0
func push(from : Vector2, direction=1) -> bool:
var sensor = front_sensor if direction == 1 else back_sensor
if sensor.get_overlapping_bodies().size() > 0 || sensor.get_overlapping_areas().size() > 0:
return false
#Check if push is possible
var authorized_positions = []
var pos = (position / 16) - Vector2(1, 1)
if type == Type.H:
if direction == -1:
pos += Vector2(0, 2)
authorized_positions.append(pos)
authorized_positions.append(pos + Vector2(1, 0))
elif type == Type.V:
if direction == -1:
pos += Vector2(2, 0)
authorized_positions.append(pos)
authorized_positions.append(pos + Vector2(0, 1))
var authorized = false
for p in authorized_positions:
if from == p:
authorized = true
break
if !authorized: return false
index += direction
if index < 0:
index = 3
if index > 3:
index = 0
if type == Type.H:
position.y += 16 * direction
else:
position.x += 16 * direction
#todo: fall in hole
update()
return true
enum Type {H, V}