game1: make start and finish work and fix collisions
This commit is contained in:
parent
4493cecedc
commit
3b1af3754d
@ -1,11 +1,10 @@
|
|||||||
[gd_scene load_steps=38 format=2]
|
[gd_scene load_steps=36 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://images/game1/opening.tres" type="SpriteFrames" id=1]
|
[ext_resource path="res://images/game1/opening.tres" type="SpriteFrames" id=1]
|
||||||
[ext_resource path="res://images/game1/opening2bg.tres" type="SpriteFrames" id=2]
|
[ext_resource path="res://images/game1/opening2bg.tres" type="SpriteFrames" id=2]
|
||||||
[ext_resource path="res://scripts/game1/Game1Script.gd" type="Script" id=3]
|
[ext_resource path="res://scripts/game1/Game1Script.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://scenes/game1/opening2_player.tscn" type="PackedScene" id=4]
|
[ext_resource path="res://scenes/game1/opening2_player.tscn" type="PackedScene" id=4]
|
||||||
[ext_resource path="res://scripts/game1/opening2_next_step_trigger.gd" type="Script" id=5]
|
[ext_resource path="res://scripts/game1/opening2_next_step_trigger.gd" type="Script" id=5]
|
||||||
[ext_resource path="res://scenes/game1/Level2.tscn" type="PackedScene" id=6]
|
|
||||||
[ext_resource path="res://images/goo/BigGoo1.png" type="Texture" id=8]
|
[ext_resource path="res://images/goo/BigGoo1.png" type="Texture" id=8]
|
||||||
[ext_resource path="res://images/goo/BigGoo1_Outlines.png" type="Texture" id=9]
|
[ext_resource path="res://images/goo/BigGoo1_Outlines.png" type="Texture" id=9]
|
||||||
[ext_resource path="res://images/goo/BigGoo2_Outlines.png" type="Texture" id=10]
|
[ext_resource path="res://images/goo/BigGoo2_Outlines.png" type="Texture" id=10]
|
||||||
@ -27,7 +26,6 @@
|
|||||||
[ext_resource path="res://images/goo/goo7_Outlines.png" type="Texture" id=26]
|
[ext_resource path="res://images/goo/goo7_Outlines.png" type="Texture" id=26]
|
||||||
[ext_resource path="res://images/goo/goo8.png" type="Texture" id=27]
|
[ext_resource path="res://images/goo/goo8.png" type="Texture" id=27]
|
||||||
[ext_resource path="res://images/goo/goo8_Outlines.png" type="Texture" id=28]
|
[ext_resource path="res://images/goo/goo8_Outlines.png" type="Texture" id=28]
|
||||||
[ext_resource path="res://scenes/game1/Level1.tscn" type="PackedScene" id=29]
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=1]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 114.063, 10 )
|
extents = Vector2( 114.063, 10 )
|
||||||
@ -82,13 +80,7 @@ script = ExtResource( 3 )
|
|||||||
|
|
||||||
[node name="Game" type="Node2D" parent="."]
|
[node name="Game" type="Node2D" parent="."]
|
||||||
|
|
||||||
[node name="Level1" parent="Game" instance=ExtResource( 29 )]
|
|
||||||
|
|
||||||
[node name="Level2" parent="Game" instance=ExtResource( 6 )]
|
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="Opening2" type="Node2D" parent="."]
|
[node name="Opening2" type="Node2D" parent="."]
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="Opening2Bg" type="AnimatedSprite" parent="Opening2"]
|
[node name="Opening2Bg" type="AnimatedSprite" parent="Opening2"]
|
||||||
frames = ExtResource( 2 )
|
frames = ExtResource( 2 )
|
||||||
@ -229,6 +221,5 @@ texture = ExtResource( 27 )
|
|||||||
normal_map = ExtResource( 28 )
|
normal_map = ExtResource( 28 )
|
||||||
|
|
||||||
[node name="Opening1" type="AnimatedSprite" parent="."]
|
[node name="Opening1" type="AnimatedSprite" parent="."]
|
||||||
visible = false
|
|
||||||
frames = ExtResource( 1 )
|
frames = ExtResource( 1 )
|
||||||
centered = false
|
centered = false
|
||||||
|
File diff suppressed because one or more lines are too long
@ -37,7 +37,6 @@ format = 1
|
|||||||
tile_data = PoolIntArray( -786419, 50, 11, -720887, 50, 65536, -655350, 50, 3, -589814, 9, 0, -589811, 22, 0, -524280, 21, 0, -524276, 14, 0, -327681, 49, 65549, -393214, 44, 0, -393210, 10, 0, -393208, 23, 0, -393207, 11, 0, -393204, 15, 0, -393203, 49, 11, -327680, 44, 0, -327677, 44, 0, -327676, 50, 65546, -327675, 22, 0, -327667, 21, 0, -327664, 50, 13, -262142, 44, 0, -262141, 50, 10, -262131, 5, 0, -262130, 11, 0, -262126, 22, 0, -131073, 9, 0, -196607, 44, 0, -196606, 40, 0, -196593, 49, 11, -196592, 29, 0, -65539, 22, 0, -131065, 23, 0, -131061, 56, 0, -1, 49, 65551, -65528, 26, 0, -65522, 50, 13, -65520, 27, 0, 65541, 50, 65544, 65551, 30, 0, 196607, 49, 12, 131075, 20, 0, 131085, 10, 0, 262142, 23, 0, 196608, 14, 0, 196612, 8, 0, 196614, 12, 0, 196617, 13, 0, 196618, 9, 0, 196620, 11, 0, 262145, 50, 1, 262148, 49, 16, 262151, 50, 65542, 262152, 12, 0, 262153, 50, 2, 262155, 50, 13, 262162, 50, 10, 327682, 50, 10, 327687, 21, 0, 327698, 50, 9, 393220, 22, 0, 393231, 12, 0, 393233, 50, 12, 458766, 22, 0 )
|
tile_data = PoolIntArray( -786419, 50, 11, -720887, 50, 65536, -655350, 50, 3, -589814, 9, 0, -589811, 22, 0, -524280, 21, 0, -524276, 14, 0, -327681, 49, 65549, -393214, 44, 0, -393210, 10, 0, -393208, 23, 0, -393207, 11, 0, -393204, 15, 0, -393203, 49, 11, -327680, 44, 0, -327677, 44, 0, -327676, 50, 65546, -327675, 22, 0, -327667, 21, 0, -327664, 50, 13, -262142, 44, 0, -262141, 50, 10, -262131, 5, 0, -262130, 11, 0, -262126, 22, 0, -131073, 9, 0, -196607, 44, 0, -196606, 40, 0, -196593, 49, 11, -196592, 29, 0, -65539, 22, 0, -131065, 23, 0, -131061, 56, 0, -1, 49, 65551, -65528, 26, 0, -65522, 50, 13, -65520, 27, 0, 65541, 50, 65544, 65551, 30, 0, 196607, 49, 12, 131075, 20, 0, 131085, 10, 0, 262142, 23, 0, 196608, 14, 0, 196612, 8, 0, 196614, 12, 0, 196617, 13, 0, 196618, 9, 0, 196620, 11, 0, 262145, 50, 1, 262148, 49, 16, 262151, 50, 65542, 262152, 12, 0, 262153, 50, 2, 262155, 50, 13, 262162, 50, 10, 327682, 50, 10, 327687, 21, 0, 327698, 50, 9, 393220, 22, 0, 393231, 12, 0, 393233, 50, 12, 458766, 22, 0 )
|
||||||
|
|
||||||
[node name="Air" type="TileMap" parent="."]
|
[node name="Air" type="TileMap" parent="."]
|
||||||
position = Vector2( -1, 0 )
|
|
||||||
z_index = 1
|
z_index = 1
|
||||||
tile_set = ExtResource( 1 )
|
tile_set = ExtResource( 1 )
|
||||||
cell_size = Vector2( 16, 16 )
|
cell_size = Vector2( 16, 16 )
|
||||||
|
@ -3,71 +3,93 @@ extends Node
|
|||||||
|
|
||||||
var playing = false
|
var playing = false
|
||||||
|
|
||||||
onready var player = preload('res://scenes/game1/Player.tscn').instance()
|
onready var player_fab = preload('res://scenes/game1/Player.tscn')
|
||||||
onready var player_camera = player.get_node("Camera2D")
|
var player : AnimatedSprite
|
||||||
|
var player_camera : Camera2D
|
||||||
|
|
||||||
onready var levels = [
|
onready var levels = [
|
||||||
$Game/Level1,
|
'Level1',
|
||||||
$Game/Level2,
|
'Level2',
|
||||||
|
'Level3',
|
||||||
|
'Level4',
|
||||||
|
'Level5',
|
||||||
]
|
]
|
||||||
|
|
||||||
var current_level = 0
|
var current_level = -1
|
||||||
|
var spawn_pos = Vector2()
|
||||||
|
var exit_points = []
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
launch_game()
|
|
||||||
$Opening1.play('default')
|
$Opening1.play('default')
|
||||||
yield($Opening1, 'animation_finished')
|
yield($Opening1, 'animation_finished')
|
||||||
$Opening1.hide()
|
$Opening1.queue_free()
|
||||||
|
|
||||||
func launch_game():
|
|
||||||
# Prepare levels
|
|
||||||
spawn_entities()
|
|
||||||
|
|
||||||
|
func start_game():
|
||||||
# Hide opening
|
# Hide opening
|
||||||
$Opening2.hide()
|
$Opening2.queue_free()
|
||||||
|
next_level()
|
||||||
|
|
||||||
|
func next_level():
|
||||||
|
if current_level >= 0:
|
||||||
|
var level = $Game.get_node(levels[current_level])
|
||||||
|
level.queue_free()
|
||||||
|
|
||||||
|
current_level += 1
|
||||||
|
|
||||||
|
# Prepare level
|
||||||
|
var level = load("res://scenes/game1/" + levels[current_level] + ".tscn").instance()
|
||||||
|
$Game.add_child(level)
|
||||||
|
spawn_entities(level)
|
||||||
|
|
||||||
# Prepare player
|
# Prepare player
|
||||||
var level = levels[current_level]
|
player = player_fab.instance()
|
||||||
|
player_camera = player.get_node("Camera2D")
|
||||||
level.add_child_below_node(level.get_node("Entities"), player)
|
level.add_child_below_node(level.get_node("Entities"), player)
|
||||||
playing = true
|
playing = true
|
||||||
player_camera.make_current()
|
player_camera.make_current()
|
||||||
player.connect('frame_changed', self, 'update_camera')
|
player.connect('frame_changed', self, 'update_camera')
|
||||||
|
|
||||||
# Spawn player
|
# Spawn player
|
||||||
var spawn_pos = Vector2()
|
|
||||||
#todo: get spawn pos from map
|
|
||||||
player.position = spawn_pos + Vector2(8, 8)
|
player.position = spawn_pos + Vector2(8, 8)
|
||||||
|
|
||||||
func spawn_entities():
|
func spawn_entities(level : Node):
|
||||||
for node in levels:
|
exit_points = []
|
||||||
var entities = Node2D.new()
|
var entities = Node2D.new()
|
||||||
entities.name = 'Entities'
|
entities.name = 'Entities'
|
||||||
node.add_child_below_node(node.get_node('Props'), entities)
|
level.add_child_below_node(level.get_node('Props'), entities)
|
||||||
|
|
||||||
for layer in node.get_children():
|
for layer in level.get_children():
|
||||||
if !(layer is TileMap): continue
|
if !(layer is TileMap): continue
|
||||||
var tm = layer as TileMap
|
var tm = layer as TileMap
|
||||||
var tileset = tm.tile_set
|
var tileset = tm.tile_set
|
||||||
|
|
||||||
# Flatfish cells
|
# Flatfish
|
||||||
var cells = []
|
var fishes = []
|
||||||
for tile in ['flatfish_s', 'flatfish_s_hidden', 'flatfish_t', 'flatfish_t_hidden']:
|
for tile in ['flatfish_s', 'flatfish_s_hidden', 'flatfish_t', 'flatfish_t_hidden']:
|
||||||
cells += tm.get_used_cells_by_id(tileset.find_tile_by_name(tile))
|
fishes += tm.get_used_cells_by_id(tileset.find_tile_by_name(tile))
|
||||||
|
|
||||||
for cell in cells:
|
for cell in fishes:
|
||||||
var fish = Flatfish.new()
|
var fish = Flatfish.new()
|
||||||
fish.position = cell * 16 + Vector2(8, 8)
|
fish.position = cell * 16 + Vector2(8, 8)
|
||||||
var t = tm.is_cell_transposed(cell.x, cell.y)
|
var t = tm.is_cell_transposed(cell.x, cell.y)
|
||||||
var x = tm.is_cell_x_flipped(cell.x, cell.y)
|
var x = tm.is_cell_x_flipped(cell.x, cell.y)
|
||||||
var y = tm.is_cell_y_flipped(cell.x, cell.y)
|
var y = tm.is_cell_y_flipped(cell.x, cell.y)
|
||||||
if t && x:
|
if t && x:
|
||||||
fish.rotation_degrees = 90
|
fish.rotation_degrees = 90
|
||||||
elif x && y:
|
elif x && y:
|
||||||
fish.rotation_degrees = 180
|
fish.rotation_degrees = 180
|
||||||
elif t && y:
|
elif t && y:
|
||||||
fish.rotation_degrees = 270
|
fish.rotation_degrees = 270
|
||||||
entities.add_child(fish)
|
entities.add_child(fish)
|
||||||
tm.set_cell(cell.x, cell.y, -1)
|
tm.set_cell(cell.x, cell.y, -1)
|
||||||
|
|
||||||
|
# Spawn point
|
||||||
|
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('start')):
|
||||||
|
spawn_pos = cell
|
||||||
|
|
||||||
|
# Exit points
|
||||||
|
for cell in tm.get_used_cells_by_id(tileset.find_tile_by_name('finish')):
|
||||||
|
exit_points.append(cell)
|
||||||
|
|
||||||
|
|
||||||
var go_right = false
|
var go_right = false
|
||||||
@ -122,7 +144,7 @@ func move_right():
|
|||||||
player.frame = 0
|
player.frame = 0
|
||||||
offset_player(16)
|
offset_player(16)
|
||||||
is_camera_moving = false
|
is_camera_moving = false
|
||||||
move()
|
if !check_exit(): move()
|
||||||
|
|
||||||
func move_left():
|
func move_left():
|
||||||
is_camera_moving = true
|
is_camera_moving = true
|
||||||
@ -135,7 +157,17 @@ func move_left():
|
|||||||
player.play('default')
|
player.play('default')
|
||||||
player.frame = 0
|
player.frame = 0
|
||||||
is_camera_moving = false
|
is_camera_moving = false
|
||||||
move()
|
if !check_exit(): move()
|
||||||
|
|
||||||
|
func check_exit() -> bool:
|
||||||
|
var player_pos = (player.position - Vector2(8, 8)) / 16
|
||||||
|
print(player_pos)
|
||||||
|
for exit in exit_points:
|
||||||
|
if player_pos == exit:
|
||||||
|
print('OK')
|
||||||
|
next_level()
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
func offset_player(offset):
|
func offset_player(offset):
|
||||||
var r = int(ceil(player.rotation_degrees / 90.0)) % 4
|
var r = int(ceil(player.rotation_degrees / 90.0)) % 4
|
||||||
@ -159,7 +191,7 @@ func interact():
|
|||||||
if !playing || !do_interact || is_interacting || trying_to_move || is_camera_moving: return
|
if !playing || !do_interact || is_interacting || trying_to_move || is_camera_moving: return
|
||||||
is_interacting = true
|
is_interacting = true
|
||||||
|
|
||||||
var level = levels[current_level]
|
var level = $Game.get_node(levels[current_level])
|
||||||
var entities = level.get_node('Entities').get_children()
|
var entities = level.get_node('Entities').get_children()
|
||||||
|
|
||||||
var fish = null
|
var fish = null
|
||||||
|
@ -9,4 +9,4 @@ func _ready():
|
|||||||
|
|
||||||
func on_body_entered(body : Node):
|
func on_body_entered(body : Node):
|
||||||
if body.name == 'Player':
|
if body.name == 'Player':
|
||||||
root.launch_game()
|
root.start_game()
|
||||||
|
Loading…
Reference in New Issue
Block a user