mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-14 15:22:34 +00:00
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:
18
lib/orders/camera_move.rb
Normal file
18
lib/orders/camera_move.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
21
lib/orders/deselected_units.rb
Normal file
21
lib/orders/deselected_units.rb
Normal 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
20
lib/orders/move.rb
Normal 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
|
||||
@@ -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
19
lib/orders/stop.rb
Normal 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
|
||||
Reference in New Issue
Block a user