Core/src/components/game/bodies.cr

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