152 lines
3.3 KiB
Plaintext
152 lines
3.3 KiB
Plaintext
note
|
|
description: "[
|
|
Represents one of the air force attack units in VITP.
|
|
]"
|
|
author: "Jimmy J. Johnson"
|
|
|
|
deferred class
|
|
AIR_UNIT
|
|
|
|
inherit
|
|
|
|
ATTACK_UNIT
|
|
redefine
|
|
patrol_distance,
|
|
raid_distance,
|
|
arrival_location
|
|
-- arrival_position
|
|
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_location: LOCATION
|
|
-- The port or sea area at which this unit may enter the game
|
|
do
|
|
if is_returning_unit then
|
|
if nationality = game.japanese then
|
|
Result := game.uncommitted_japanese_location
|
|
else
|
|
Result := game.uncommitted_allied_location
|
|
end
|
|
else
|
|
Result := Precursor
|
|
end
|
|
end
|
|
|
|
-- arrival_position: like position
|
|
-- -- The location (latitude/longitude-like coordinates) where Current
|
|
-- -- will enter the game
|
|
-- local
|
|
-- sop: VITP_SEQUENCE_OF_PLAY
|
|
-- do
|
|
-- sop := game.sequence_of_play
|
|
-- if nationality = game.japanese then
|
|
-- Result := [250, 50]
|
|
-- else
|
|
-- if sop.turn = 1 and Current = game.eleventh_af then
|
|
-- Result := [700, 300]
|
|
-- elseif sop.turn = 1 and Current = game.fifth_af then
|
|
-- Result := [130, 320]
|
|
-- else
|
|
-- Result := [700, 560]
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
feature -- Status report
|
|
|
|
is_sunk: BOOLEAN
|
|
-- Has the unit been sunk this turn?
|
|
do
|
|
Result := damage >= defense_factor
|
|
end
|
|
|
|
is_patrollable: BOOLEAN = True
|
|
-- 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} -- Implementaion
|
|
|
|
|
|
end
|