53 lines
1018 B
Crystal
53 lines
1018 B
Crystal
@[Context(Game)]
|
|
class TETU::CelestialBody < Entitas::Component
|
|
prop :type, Symbol, default: :default
|
|
|
|
TYPES = %i(asteroid_belt planet star asteroid habitat)
|
|
end
|
|
|
|
@[Context(Game)]
|
|
class TETU::StellarPosition < Entitas::Component
|
|
prop :body_index, Int32, default: 0
|
|
prop :moon_index, Int32, default: 0
|
|
|
|
def to_s
|
|
"[#{@body_index}+#{@moon_index}]"
|
|
end
|
|
end
|
|
|
|
# Galactic position
|
|
@[Context(Game)]
|
|
class TETU::Position < Entitas::Component
|
|
prop :x, Int32, default: 0
|
|
prop :y, Int32, default: 0
|
|
|
|
MAX_X = TETU::MAX_X
|
|
MAX_Y = TETU::MAX_Y
|
|
|
|
def self.generate(entity)
|
|
entity.add_position x: (0..MAX_X).sample, y: (0..MAX_Y).sample
|
|
end
|
|
|
|
def to_s
|
|
"#{@x}:#{@y}"
|
|
end
|
|
|
|
def copy_to(entity)
|
|
entity.add_position x: @x, y: @y
|
|
end
|
|
|
|
def ==(right : Position)
|
|
@x == right.x && @y == right.y
|
|
end
|
|
|
|
def !=(right : Position)
|
|
@x != right.x || @y != right.y
|
|
end
|
|
end
|
|
|
|
@[Context(Game)]
|
|
class TETU::Moving < Entitas::Component
|
|
prop :x, Int32, default: 0
|
|
prop :y, Int32, default: 0
|
|
end
|