mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-15 15:52:34 +00:00
Added 'reserved' field to Map::Tile for building entities to claim when placed
This commit is contained in:
@@ -3,7 +3,7 @@ tiles = [
|
|||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, :path, :path, :path, false],
|
||||||
]
|
]
|
||||||
|
|
||||||
IMICRTS::Entity.define_entity(:barracks, :building, 400, "Builds and soldiers", tiles) do |entity|
|
IMICRTS::Entity.define_entity(:barracks, :building, 400, "Builds and soldiers", tiles) do |entity|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ tiles = [
|
|||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, :path, :path, :path, false],
|
||||||
]
|
]
|
||||||
|
|
||||||
IMICRTS::Entity.define_entity(:construction_yard, :building, 2_000, "Provides radar and builds construction workers", tiles) do |entity|
|
IMICRTS::Entity.define_entity(:construction_yard, :building, 2_000, "Provides radar and builds construction workers", tiles) do |entity|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ tiles = [
|
|||||||
[false, false, true, false, false],
|
[false, false, true, false, false],
|
||||||
[false, false, true, false, false],
|
[false, false, true, false, false],
|
||||||
[false, false, true, false, false],
|
[false, false, true, false, false],
|
||||||
[false, false, true, false, false],
|
[false, false, :path, false, false],
|
||||||
]
|
]
|
||||||
|
|
||||||
IMICRTS::Entity.define_entity(:power_plant, :building, 800, "Generates power", tiles) do |entity|
|
IMICRTS::Entity.define_entity(:power_plant, :building, 800, "Generates power", tiles) do |entity|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ tiles = [
|
|||||||
[false, true, true, false, false],
|
[false, true, true, false, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, false, true, true, false],
|
[false, false, :path, :path, false],
|
||||||
]
|
]
|
||||||
|
|
||||||
IMICRTS::Entity.define_entity(:refinery, :building, 1_400, "Generates credits", tiles) do |entity|
|
IMICRTS::Entity.define_entity(:refinery, :building, 1_400, "Generates credits", tiles) do |entity|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ tiles = [
|
|||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, true, true, true, false],
|
||||||
[false, true, true, true, false],
|
[false, :path, :path, :path, false],
|
||||||
]
|
]
|
||||||
|
|
||||||
IMICRTS::Entity.define_entity(:war_factory, :building, 2_000, "Builds units", tiles) do |entity|
|
IMICRTS::Entity.define_entity(:war_factory, :building, 2_000, "Builds units", tiles) do |entity|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ class IMICRTS
|
|||||||
end
|
end
|
||||||
|
|
||||||
class Tile
|
class Tile
|
||||||
attr_accessor :position, :grid_position, :image, :visible, :entity, :type
|
attr_accessor :position, :grid_position, :image, :visible, :entity, :reserved, :type
|
||||||
def initialize(position:, image:, visible:, type:, tile_size:)
|
def initialize(position:, image:, visible:, type:, tile_size:)
|
||||||
@position = position
|
@position = position
|
||||||
@grid_position = position.clone
|
@grid_position = position.clone
|
||||||
@@ -114,6 +114,7 @@ class IMICRTS
|
|||||||
@image = image
|
@image = image
|
||||||
@visible = visible
|
@visible = visible
|
||||||
@entity = nil
|
@entity = nil
|
||||||
|
@reserved = nil
|
||||||
@type = type
|
@type = type
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ class IMICRTS
|
|||||||
end
|
end
|
||||||
|
|
||||||
def draw
|
def draw
|
||||||
each_tile(vector_to_grid(@game.window.mouse)) do |x, y, tile|
|
each_tile(vector_to_grid(@game.window.mouse)) do |tile, _data, x, y|
|
||||||
if tile.entity || tile.type != :ground || @director.map.ore_at(x, y) # tile unavailable
|
if tile.entity || tile.reserved || tile.type != :ground || @director.map.ore_at(x, y) # tile unavailable
|
||||||
Gosu.draw_rect(
|
Gosu.draw_rect(
|
||||||
tile.position.x + 2, tile.position.y + 2,
|
tile.position.x + 2, tile.position.y + 2,
|
||||||
@director.map.tile_size - 4, @director.map.tile_size - 4,
|
@director.map.tile_size - 4, @director.map.tile_size - 4,
|
||||||
@@ -57,8 +57,12 @@ class IMICRTS
|
|||||||
position: CyberarmEngine::Vector.new(position.x, position.y, ZOrder::BUILDING)
|
position: CyberarmEngine::Vector.new(position.x, position.y, ZOrder::BUILDING)
|
||||||
)
|
)
|
||||||
|
|
||||||
each_tile(vector) do |x, y, tile|
|
each_tile(vector) do |tile, space_required|
|
||||||
|
if space_required == true
|
||||||
tile.entity = ent
|
tile.entity = ent
|
||||||
|
else
|
||||||
|
tile.reserved = ent
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
cancel_tool
|
cancel_tool
|
||||||
@@ -73,8 +77,8 @@ class IMICRTS
|
|||||||
ent = Entity.get(@entity)
|
ent = Entity.get(@entity)
|
||||||
origin = (tile.grid_position - 2)
|
origin = (tile.grid_position - 2)
|
||||||
|
|
||||||
each_tile(vector) do |x, y, tile|
|
each_tile(vector) do |tile, _data, x, y|
|
||||||
if tile.entity || tile.type != :ground || @director.map.ore_at(x, y)
|
if tile.entity || tile.reserved || tile.type != :ground || @director.map.ore_at(x, y)
|
||||||
useable = false
|
useable = false
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
@@ -97,7 +101,7 @@ class IMICRTS
|
|||||||
|
|
||||||
other_tile = @director.map.tile_at(origin.x + x, origin.y + y)
|
other_tile = @director.map.tile_at(origin.x + x, origin.y + y)
|
||||||
if other_tile
|
if other_tile
|
||||||
block.call(origin.x + x, origin.y + y, other_tile)
|
block.call(other_tile, space_required, origin.x + x, origin.y + y)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user