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

18
lib/orders/camera_move.rb Normal file
View File

@@ -0,0 +1,18 @@
IMICRTS::Order.define_handler(IMICRTS::Order::CAMERA_MOVE, arguments: [:player_id, :x, :y, :zoom]) do |order, director|
director.player(order.player_id).camera.move_to(order.x, order.y, order.zoom)
end
IMICRTS::Order.define_serializer(IMICRTS::Order::CAMERA_MOVE) do |order, director|
# Order ID: char as C
# Player ID: char as C
# Position X/Y: Double as G
# Zoom: Double as G
[IMICRTS::Order::CAMERA_MOVE, order.player_id, order.x, order.y, order.zoom].pack("CCGGG")
end
IMICRTS::Order.define_deserializer(IMICRTS::Order::CAMERA_MOVE) do |string, director|
# Player ID | Camera X | Camera Y | Camera Zoom
# char | double | double | double
string.unpack("CGGG")
end

View File

@@ -1,4 +0,0 @@
IMICRTS::Order.define_handler(IMICRTS::Order::CAMERA_MOVED, arguments: [:player_id, :x, :y]) do |order, director|
director.player(order.player_id).move_camera(order.x, order.y)
end

View File

@@ -0,0 +1,21 @@
IMICRTS::Order.define_handler(IMICRTS::Order::DESELECTED_UNITS, arguments: [:player_id, :entities]) do |order, director|
selected_entities = director.player(order.player_id).selected_entities
selected_entities.select { |ent| order.entities.include?(ent)}.each { |ent| selected_entities.delete(ent) }
end
IMICRTS::Order.define_serializer(IMICRTS::Order::DESELECTED_UNITS) do |order, director|
# Order ID | Player ID | Entity IDs
# char | char | integers
[IMICRTS::Order::DESELECTED_UNITS, order.player_id].pack("CC") + order.entities.map { |ent| ent.id }.pack("N*")
end
IMICRTS::Order.define_deserializer(IMICRTS::Order::DESELECTED_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

20
lib/orders/move.rb Normal file
View File

@@ -0,0 +1,20 @@
IMICRTS::Order.define_handler(IMICRTS::Order::MOVE, arguments: [:player_id, :vector]) do |order, director|
director.player(order.player_id).selected_entities.each do |entity|
entity.target = order.vector
end
end
IMICRTS::Order.define_serializer(IMICRTS::Order::MOVE) do |order, director|
# Order ID | Player ID | Target X | Target Y
# char | char | double | double
[IMICRTS::Order::MOVE, order.player_id, order.vector.x, order.vector.y].pack("CCGG")
end
IMICRTS::Order.define_deserializer(IMICRTS::Order::MOVE) do |string, director|
# String fed into deserializer has Order ID removed
# Player ID | Target X | Target Y
# char | double | double
data = string.unpack("CGG")
[data[0], CyberarmEngine::Vector.new(data[1], data[2])]
end

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

19
lib/orders/stop.rb Normal file
View File

@@ -0,0 +1,19 @@
IMICRTS::Order.define_handler(IMICRTS::Order::STOP, arguments: [:player_id]) do |order, director|
director.player(order.player_id).selected_entities.each do |entity|
entity.target = nil
end
end
IMICRTS::Order.define_serializer(IMICRTS::Order::STOP) do |order, director|
# Order ID | Player ID
# char | char
[IMICRTS::Order::STOP, order.player_id].pack("CC")
end
IMICRTS::Order.define_deserializer(IMICRTS::Order::STOP) do |string, director|
# String fed into deserializer has Order ID removed
# Player ID
# char
string.unpack("C")
end