class_name Tile extends Node2D @onready var backplate: CompressedTexture2D = preload("res://sprites/backplate.png") @onready var cover: CompressedTexture2D = preload("res://sprites/cover.png") @onready var mine: CompressedTexture2D = preload("res://sprites/mine.png") @onready var flag: CompressedTexture2D = preload("res://sprites/flag.png") @onready var nums: Array[CompressedTexture2D] = [ preload("res://sprites/1.png"), preload("res://sprites/2.png"), preload("res://sprites/3.png"), preload("res://sprites/4.png"), preload("res://sprites/5.png"), preload("res://sprites/6.png"), preload("res://sprites/7.png"), preload("res://sprites/8.png") ] enum TileTypes{ EMPTY, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, MINE } @onready var layer1: Sprite2D = $layer1 @onready var layer2: Sprite2D = $layer2 var type: TileTypes var coord: Vector2i var revealed: bool = false func evaluateType() -> void: if (type == TileTypes.MINE): return var count: int = 0 for x: int in range(-1, 2): for y: int in range(-1, 2): if (x == 0 && y == 0): continue var tile: Tile = Minefield.instance.getTile(coord + Vector2i(x, y)) if (tile == null): continue if (tile.type == TileTypes.MINE): count += 1 type = count as TileTypes func reveal() -> void: if (revealed): return revealed = true layer1.texture = backplate match type: TileTypes.EMPTY: layer2.texture = null for x: int in range(-1, 2): for y: int in range(-1, 2): if (x == 0 && y == 0): continue var tile: Tile = Minefield.instance.getTile(coord + Vector2i(x, y)) if (tile == null): continue tile.reveal() TileTypes.MINE: layer2.texture = mine _: layer2.texture = nums[type as int - 1] func _on_static_body_2d_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void: if (event.is_pressed()): print("Pressed " + str(coord)) if (!Minefield.instance.fieldInitialized): Minefield.instance.initField(coord) reveal()