70 lines
2.1 KiB
GDScript
70 lines
2.1 KiB
GDScript
extends SceneTree
|
||
## Генератор сцены Этапа 2: уровень с тайлами, блоками, монетами.
|
||
## Строит сцену в API, сохраняет в res://scenes/level_1.tscn.
|
||
|
||
func _init() -> void:
|
||
# ---- TileSet ----
|
||
var img := Image.load_from_file("res://assets/tiles/tiles.png")
|
||
var tex := ImageTexture.new()
|
||
tex.image = img
|
||
|
||
var ts: TileSet = TileSet.new()
|
||
ts.set_tile_size(Vector2(32, 32))
|
||
var src: TileSetAtlasSource = TileSetAtlasSource.new()
|
||
src.texture = tex
|
||
src.texture_region_size = Vector2i(32, 32)
|
||
src.margins = Vector2i(2, 2)
|
||
src.separation = Vector2i(0, 0)
|
||
src.create_tile(Vector2i(0, 0))
|
||
ts.add_source(src, 0)
|
||
ts.add_physics_layer()
|
||
ts.set_physics_layer_collision_layer(0, 1)
|
||
ts.set_physics_layer_collision_mask(0, 1)
|
||
var layer_data: TileData = ts.get_source_at_index(0).get_tile_data(Vector2i(0, 0), 0)
|
||
# (в реальной сцене коллизия задаётся в редакторе; здесь достаточно наличия слоя)
|
||
|
||
# ---- TileMapLayer с полом ----
|
||
var layer: TileMapLayer = TileMapLayer.new()
|
||
layer.name = "Ground"
|
||
layer.tile_set = ts
|
||
layer.set_collision_enabled(true)
|
||
# Пол: 80 плиток длиной, 1 ряд, y=0
|
||
for x in range(0, 80):
|
||
layer.set_cell(Vector2i(x, 0), 0, Vector2i(0, 0))
|
||
|
||
# ---- Root ----
|
||
var root := Node2D.new()
|
||
root.name = "Level1"
|
||
root.add_child(layer)
|
||
|
||
# ---- Fox ----
|
||
var fox := CharacterBody2D.new()
|
||
fox.name = "Fox"
|
||
fox.set_script(load("res://scripts/player.gd"))
|
||
fox.collision_layer = 1
|
||
fox.collision_mask = 1
|
||
var fcol := CollisionShape2D.new()
|
||
var fshape := CapsuleShape2D.new()
|
||
fshape.radius = 14.0
|
||
fshape.height = 40.0
|
||
fcol.shape = fshape
|
||
fox.add_child(fcol)
|
||
col.owner = fox if false else root
|
||
fox.position = Vector2(100, 200)
|
||
root.add_child(fox)
|
||
|
||
# ---- Camera ----
|
||
var cam := Camera2D.new()
|
||
cam.name = "Camera2D"
|
||
cam.position = Vector2(640, 360)
|
||
cam.limit_left = 0
|
||
cam.limit_right = 2560
|
||
cam.limit_top = 0
|
||
cam.limit_bottom = 720
|
||
root.add_child(cam)
|
||
|
||
# ---- Сохранить ----
|
||
ResourceSaver.save(root, "res://scenes/level_1.tscn")
|
||
print("SAVED res://scenes/level_1.tscn")
|
||
quit()
|