Orders are now de/serializable, and scheduleable, Entities now show a circle around themselves when selected and draw a line to their target

This commit is contained in:
2019-10-09 11:32:59 -05:00
parent 2a179ed935
commit d6615872ba
15 changed files with 246 additions and 33 deletions

View File

@@ -1,5 +1,21 @@
IMICRTS::Order.define_handler(IMICRTS::Order::SELECTED_UNITS, arguments: [:player_id, :ids]) do |order, director|
IMICRTS::Order.define_handler(IMICRTS::Order::SELECTED_UNITS, arguments: [:player_id, :entities]) do |order, director|
director.player(order.player_id).selected_entities.clear
director.player(order.player_id).selected_entities.push(*order.ids)
director.player(order.player_id).selected_entities.push(*order.entities)
end
IMICRTS::Order.define_serializer(IMICRTS::Order::SELECTED_UNITS) do |order, director|
# Order ID | Player ID | Entity IDs
# char | char | integers
[IMICRTS::Order::SELECTED_UNITS, order.player_id].pack("CC") + order.entities.map { |ent| ent.id }.pack("N*")
end
IMICRTS::Order.define_deserializer(IMICRTS::Order::SELECTED_UNITS) do |string, director|
# String fed into deserializer has Order ID removed
# Player ID | Entity IDs
# char | integers
player_id = string.unpack("C").first
entities = string[1..string.length - 1].unpack("N*").map { |ent_id| director.player(player_id).entity(ent_id) }
[player_id, entities]
end