Files

70 lines
2.1 KiB
GDScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()