expansion/src/game/tile.cr
2019-10-11 18:02:22 +03:00

137 lines
2.2 KiB
Crystal

module Game
enum TileRole
ConstructionSite
CrystalDeposits
CrystalHarvester
CrystalRestorer
Plateau
Terraformer
Warehouse
Building
end
abstract class Tile
property cap : Int32 = 0
property cur : Int32 = 0
def initialize(@point : Point)
end
getter point
getter cap
getter cur
abstract def has_role(role : TileRole) : Bool
def letter : Char
' '
end
def withdraw(value)
if value >= @cur
wd = @cur
@cur = 0
wd
else
@cur -= value
value
end
end
def charge(value)
charged = @cur + value
@cur = charged <= @cap ? charged : @cap
end
def can_build?
has_role(TileRole::Plateau)
end
end
class PlateauTile < Tile
def letter : Char
' '
end
def has_role(role : TileRole) : Bool
role == TileRole::Plateau
end
end
class ConstructionSiteTile < Tile
def letter : Char
'_'
end
def has_role(role : TileRole) : Bool
role == TileRole::ConstructionSite
end
end
class MainBaseTile < Tile
def letter : Char
'W'
end
def has_role(role : TileRole) : Bool
role == TileRole::Warehouse
end
end
class CrystalTile < Tile
def initialize(@point : Point, cap : Int32)
@cap = cap
@cur = cap
end
def letter : Char
'v'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalDeposits
end
end
class CrystalHarvesterTile < Tile
def letter : Char
'H'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalHarvester
end
end
class CrystalRestorerTile < Tile
def letter : Char
'R'
end
def has_role(role : TileRole) : Bool
role == TileRole::CrystalRestorer
end
end
class TerraformerTile < Tile
def letter : Char
'T'
end
def has_role(role : TileRole) : Bool
role == TileRole::Terraformer
end
end
class BuildingTile < Tile
def initialize(@point : Point, @building : Building)
end
def has_role(role : TileRole) : Bool
role == TileRole::Building
end
getter building
end
end