48 lines
1.4 KiB
GDScript

class_name Minefield extends Node2D
static var instance: Minefield
@onready var tilePrefab: PackedScene = preload("res://scenes/Tile.tscn")
@onready var cam: Camera2D = $Camera2D
@export var width: int = 10
@export var height: int = 10
@export var mineCount: int = 10
var tiles: Array[Tile]
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 tile: Tile = tilePrefab.instantiate()
tile.coord = Vector2i(x, y)
tile.position = Vector2(spriteWidth * x - (spriteWidth * (width / 2)) + (spriteWidth / 2),
spriteWidth * y - (spriteWidth * (height / 2)) + (spriteWidth / 2))
add_child(tile)
tiles.append(tile)
func initField(coord: Vector2i) -> void:
fieldInitialized = true
var pickPool: Array[Tile] = tiles.duplicate()
for i: int in range(mineCount):
var pick: Tile = pickPool.pick_random()
while (true):
pickPool.erase(pick)
if (abs(coord - pick.coord) >= Vector2i(1, 1)):
pick.type = Tile.TileTypes.MINE
break
pick = pickPool.pick_random()
for tile: Tile in tiles:
tile.evaluateType()
func getTile(coord: Vector2i) -> Tile:
if (coord.x < 0 || coord.y < 0 || coord.x >= width || coord.y >= width): return null
return tiles[(coord.x * height) + coord.y]