80 lines
2.1 KiB
GDScript

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
var flagged: 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_area_2d_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void:
if (event.is_released()):
if (event.is_action_released("reveal") && !flagged):
if (!Minefield.instance.fieldInitialized):
Minefield.instance.initField(coord)
reveal()
elif (event.is_action_released("flag") && !revealed):
flagged = !flagged
if (flagged):
layer2.texture = flag
else:
layer2.texture = null