class_name Minefield extends Node2D static var instance: Minefield @onready var minePrefab: PackedScene = preload("res://scenes/Mine.tscn") @onready var cam: Camera2D = $Camera2D @export var width: int = 10 @export var height: int = 10 @export var mineCount: int = 10 var mines: Array[Mine] var spriteWidth: int = 16 var fieldInitialized: bool = false func _enter_tree() -> void: if (instance == null || is_instance_valid(instance)): instance = self else: queue_free() func _ready() -> void: var scale: float = 1 for x: int in range(width): for y: int in range(height): var mine: Mine = minePrefab.instantiate() mine.coord = Vector2i(x, y) mine.position = Vector2(spriteWidth * x - (spriteWidth * (width / 2)) + (spriteWidth / 2), spriteWidth * y - (spriteWidth * (height / 2)) + (spriteWidth / 2)) add_child(mine) mines.append(mine) func initField(coord: Vector2i) -> void: var picked: Array[Vector2i] for i: int in range(mineCount): var pick: Vector2i while (true): pick = Vector2i(randi_range(0, width - 1), randi_range(0, height - 1)) if abs(coord - pick) <= Vector2i(1, 1) || pick in picked: continue break print("Picked " + str(pick)) picked.append(pick) getMine(pick).type = Mine.MineType.MINE for mine: Mine in mines: mine.evaluateType() func getMine(coord: Vector2i) -> Mine: if (coord.x < 0 || coord.y < 0 || coord.x >= width || coord.y >= width): return null return mines[(coord.x * height) + coord.y]