init
This commit is contained in:
157
jj_vitp/Implementation/classes/units/submarine.e
Normal file
157
jj_vitp/Implementation/classes/units/submarine.e
Normal file
@@ -0,0 +1,157 @@
|
||||
note
|
||||
description: "[
|
||||
Representation of a submarine in VITP.
|
||||
]"
|
||||
author: "Jimmy J. Johnson"
|
||||
|
||||
deferred class
|
||||
SUBMARINE
|
||||
|
||||
inherit
|
||||
|
||||
ATTACK_UNIT
|
||||
redefine
|
||||
patrol_distance,
|
||||
raid_distance,
|
||||
-- arrival_position,
|
||||
join_force, -- inapplicable
|
||||
leave_force, -- inapplicable
|
||||
internal_is_movable
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
patrol_distance: INTEGER = 1000
|
||||
-- How may sea areas can Current move through as patroller?
|
||||
-- Just set to a very large number.
|
||||
|
||||
raid_distance: INTEGER = 1000
|
||||
-- How may sea areas can Current move through as raider?
|
||||
-- Just set to a very large number.
|
||||
|
||||
-- arrival_position: like position
|
||||
-- -- The location (latitude/longitude-like coordinates) where Current
|
||||
-- -- will enter the game. Redefine to make it enter at its own position.
|
||||
-- do
|
||||
-- if nationality = game.japanese then
|
||||
-- Result := [200, 50]
|
||||
-- else
|
||||
-- Result := [750, 600]
|
||||
-- end
|
||||
-- end
|
||||
|
||||
patrollable_sea_areas: LINKED_SET [SEA_AREA]
|
||||
-- A list containing each {SEA_AREA} which Current can patrol
|
||||
-- from its `home_port' at this point in the game
|
||||
do
|
||||
create Result.make
|
||||
end
|
||||
|
||||
raidable_sea_areas: LINKED_SET [SEA_AREA]
|
||||
-- A list containing each {SEA_AREA} which Current can raid
|
||||
-- from its `home_port' at this point in the game
|
||||
do
|
||||
create Result.make
|
||||
from game.sea_areas.start
|
||||
until game.sea_areas.after
|
||||
loop
|
||||
Result.extend (game.sea_areas.item_for_iteration)
|
||||
game.sea_areas.forth
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Status report
|
||||
|
||||
is_sunk: BOOLEAN = False
|
||||
-- Submarines do not take fire
|
||||
|
||||
is_patrollable: BOOLEAN = False
|
||||
-- Can this unit be a patroller for area control purposes?
|
||||
|
||||
is_raidable: BOOLEAN = False
|
||||
-- Can this unit be a raider?
|
||||
|
||||
is_patrolling: BOOLEAN = False
|
||||
-- Is this unit a patroller (as opposed to a raider)?
|
||||
-- Air units a `is_patrollable' but don't move as patrollers.
|
||||
|
||||
is_raiding: BOOLEAN = False
|
||||
-- Is this unit a raider?
|
||||
|
||||
feature -- Basic operations
|
||||
|
||||
return_to_port (a_port: PORT)
|
||||
require
|
||||
-- is_return_allowed: is_at_sea and then a_port.controller = nationality and then
|
||||
-- (location.adjoins (a_port) or else a_port.is_major)
|
||||
do
|
||||
location := a_port
|
||||
end
|
||||
|
||||
repair
|
||||
-- Do repairs on the ship
|
||||
require
|
||||
-- is_in_port: location.is_port
|
||||
port_has_repair_capability:
|
||||
do
|
||||
|
||||
end
|
||||
|
||||
join_force (a_other: ATTACK_UNIT)
|
||||
-- Join forces with `a_other' as a single `task_force'
|
||||
do
|
||||
check
|
||||
do_not_call: false then
|
||||
-- Because inapplicable to {AIR_UNIT}
|
||||
end
|
||||
end
|
||||
|
||||
leave_force
|
||||
-- Remove Current from the `task_force' to which it belongs, but only
|
||||
-- if there are other ships in the force, and put it in its own.
|
||||
do
|
||||
check
|
||||
do_not_call: false then
|
||||
-- Because inapplicable to {AIR_UNIT}
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Query
|
||||
|
||||
is_incompatible_position (a_position: VITP_POSITION): BOOLEAN
|
||||
-- Is `a_position' located on a unit with which Current is NOT
|
||||
-- allowed to `join_force' (e.g. on a submarine or an enemy)?
|
||||
local
|
||||
u_list: VITP_TABLE [ATTACK_UNIT]
|
||||
au: ATTACK_UNIT
|
||||
do
|
||||
if not is_in_game then
|
||||
Result := false
|
||||
else
|
||||
u_list := game.all_attack_units
|
||||
from u_list.start
|
||||
until u_list.after or else Result
|
||||
loop
|
||||
au := u_list.item_for_iteration
|
||||
Result := au.contains_position (a_position)
|
||||
u_list.forth
|
||||
end
|
||||
end
|
||||
-- Temp for testing
|
||||
Result := false
|
||||
end
|
||||
|
||||
feature {NONE} -- Implementation
|
||||
|
||||
internal_is_movable: BOOLEAN
|
||||
-- Can Current (not the `task_force') move at this time?
|
||||
local
|
||||
sop: VITP_SEQUENCE_OF_PLAY
|
||||
do
|
||||
sop := game.sequence_of_play
|
||||
Result := not is_sunk and
|
||||
(sop.is_moving_submarine_step) -- or else
|
||||
-- sop.is_returning_submarine_to_port_step)
|
||||
end
|
||||
|
||||
end
|
Reference in New Issue
Block a user