Отработано удаление структур
This commit is contained in:
parent
0e4e854cc1
commit
77973c54c6
19
tile_map.gd
19
tile_map.gd
@ -12,7 +12,7 @@ enum StructType {
|
|||||||
MEDICAL_ROOM, # 8. Медицинский Модуль
|
MEDICAL_ROOM, # 8. Медицинский Модуль
|
||||||
GEOLOGICAL_ROOM, # 9. Геологический Модуль
|
GEOLOGICAL_ROOM, # 9. Геологический Модуль
|
||||||
RESOURCE_EXTRACTION_ROOM, # 10. Модуль Добычи и Переработки Ресурсов
|
RESOURCE_EXTRACTION_ROOM, # 10. Модуль Добычи и Переработки Ресурсов
|
||||||
COMMUNICATIONS_ROOM # 11. Модуль Связи и Навигации
|
COMMUNICATIONS_ROOM # 11. Модуль Связи и Навигации_
|
||||||
}
|
}
|
||||||
|
|
||||||
enum struct_fields {
|
enum struct_fields {
|
||||||
@ -53,8 +53,22 @@ func get_maxZ(tile_pos: Vector2i) -> int:
|
|||||||
return layer.z_index
|
return layer.z_index
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
func remove_struct(pos: Vector2i):
|
||||||
|
for layer in layers:
|
||||||
|
var tiledata: TileData = layer.get_cell_tile_data(pos)
|
||||||
|
if tiledata != null and tiledata.get_custom_data("is_center"):
|
||||||
|
var struct_size = tiledata.get_custom_data("struct_size")
|
||||||
|
var half_size = Vector2i(struct_size.x / 2, struct_size.y / 2)
|
||||||
|
for x in range(struct_size.x):
|
||||||
|
for y in range(struct_size.y):
|
||||||
|
var offset = Vector2i(x, y)
|
||||||
|
var tile_pos = pos+offset-half_size
|
||||||
|
layer.erase_cell(tile_pos)
|
||||||
|
return
|
||||||
|
|
||||||
func place_struct(pos: Vector2i, type: StructType):
|
func place_struct(pos: Vector2i, type: StructType):
|
||||||
#Is place free check
|
if not structs.has(type):
|
||||||
|
return
|
||||||
var struct_size = structs[type][struct_fields.SIZE]
|
var struct_size = structs[type][struct_fields.SIZE]
|
||||||
var layer = structs[type][struct_fields.LAYER]
|
var layer = structs[type][struct_fields.LAYER]
|
||||||
var source_id = structs[type][struct_fields.SOURCE_ID]
|
var source_id = structs[type][struct_fields.SOURCE_ID]
|
||||||
@ -62,6 +76,7 @@ func place_struct(pos: Vector2i, type: StructType):
|
|||||||
|
|
||||||
var half_size = Vector2i(struct_size.x / 2, struct_size.y / 2)
|
var half_size = Vector2i(struct_size.x / 2, struct_size.y / 2)
|
||||||
|
|
||||||
|
#Is place free check
|
||||||
for x in range(struct_size.x):
|
for x in range(struct_size.x):
|
||||||
for y in range(struct_size.y):
|
for y in range(struct_size.y):
|
||||||
var offset = Vector2i(x, y)
|
var offset = Vector2i(x, y)
|
||||||
|
5
world.gd
5
world.gd
@ -4,6 +4,7 @@ extends Node2D
|
|||||||
@onready var buildings: TileMapLayer = $TileMap/buildings/buildings0
|
@onready var buildings: TileMapLayer = $TileMap/buildings/buildings0
|
||||||
@onready var roads: TileMapLayer = $TileMap/roads
|
@onready var roads: TileMapLayer = $TileMap/roads
|
||||||
@onready var ground: TileMapLayer = $TileMap/ground
|
@onready var ground: TileMapLayer = $TileMap/ground
|
||||||
|
@onready var tileMap: Node2D = $TileMap
|
||||||
|
|
||||||
var is_drawing_road: bool = false # Флаг для отслеживания зажатия кнопки мыши
|
var is_drawing_road: bool = false # Флаг для отслеживания зажатия кнопки мыши
|
||||||
var is_drawing_mountian: bool = false # Флаг для отслеживания зажатия кнопки мыши
|
var is_drawing_mountian: bool = false # Флаг для отслеживания зажатия кнопки мыши
|
||||||
@ -15,9 +16,9 @@ func _input(event):
|
|||||||
if event is InputEventMouseButton:
|
if event is InputEventMouseButton:
|
||||||
# Проверяем нажатие или отпускание левой кнопки мыши
|
# Проверяем нажатие или отпускание левой кнопки мыши
|
||||||
if event.button_index == MOUSE_BUTTON_LEFT:
|
if event.button_index == MOUSE_BUTTON_LEFT:
|
||||||
is_drawing_road = event.pressed # Устанавливаем флаг, если кнопка нажата
|
tileMap.place_struct(ground.local_to_map(get_global_mouse_position()-tileMap.global_position), tileMap.StructType.EMPTY_ROOM)
|
||||||
elif event.button_index == MOUSE_BUTTON_RIGHT:
|
elif event.button_index == MOUSE_BUTTON_RIGHT:
|
||||||
$TileMap.place_struct(ground.local_to_map(get_global_mouse_position()-$TileMap.global_position), $TileMap.StructType.EMPTY_ROOM)
|
tileMap.remove_struct(ground.local_to_map(get_global_mouse_position()-tileMap.global_position))
|
||||||
|
|
||||||
if event is InputEventMouseMotion and is_drawing_road:
|
if event is InputEventMouseMotion and is_drawing_road:
|
||||||
# Получаем позицию мыши в мировых координатах
|
# Получаем позицию мыши в мировых координатах
|
||||||
|
18
world.tscn
18
world.tscn
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user