note
	description: "[
		A Victory in the Pacific game.
		This class provides access to the game constants and game
		logic (i.e. is a particular action allowed for a unit?)
		]"
	author: "Jimmy J. Johnson"

class
	VITP_GAME

inherit

	POSITION_CONSTANTS
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	NATIONALITY_CONSTANTS
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	ATTACK_UNIT_ATTRIBUTES
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	PORT_ATTRIBUTES
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	SEA_AREA_ATTRIBUTES
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	OTHER_ATTRIBUTES
		undefine
			copy,
			is_equal
		redefine
			default_create
		end

	VITP_ITEM
		redefine
			default_create
		end

create
	default_create

feature {NONE} -- Initialization

	default_create
			-- Initialize Current
		local
			i, j: INTEGER
			c: VITP_CELL
		do
			create command_manager
			uuid := (create {UUID_GENERATOR}).generate_uuid
			name := uuid.out
			create c.make (0,0)
			create grid.make_filled (c, cell_row_count, cell_column_count)
			from i := 1
			until i >= cell_row_count
			loop
				from j := 1
				until j > cell_column_count
				loop
					create c.make ([i, j])
					grid.put (c, i, j)
					j := j + 1
				end
				i := i + 1
			end
			game := Current
		end

feature -- Access

	command_manager: COMMAND_MANAGER
			-- Keeps track of actions for undo/redo functionality

	name: STRING_8
			-- The displayed name for this widget

	uuid: UUID
			-- Identifier for Current

	sequence_of_play: VITP_SEQUENCE_OF_PLAY
			-- Sequence of play for this game defining the order
			-- of actions.
		attribute
			create Result.make (Current)
		end

	locations: VITP_TABLE [LOCATION]
			-- Convenience feature containing all the board locations.
			-- Defined as attibute so all locations can be persisted.
		attribute
			create Result.make (100)
			Result.merge (sea_areas)
			Result.merge (major_ports)
			Result.merge (minor_ports)
		end

feature -- Basic operations


feature -- Query

	can_patrol (a_unit: ATTACK_UNIT): BOOLEAN
			-- Can `a_unit' be moved as a patroller?
			-- ... or can `a_unit' become a raider?
		do
io.put_string (generating_type.name + ".can_patrol:  fix me! %N")
--			Result := phase = Movement_phase and
--						stage = Patrolling and
--						((player = Japanese_player and then a_unit.nationality = Japanese) or else
--						(player = Allied_player and then is_allied_nationality (a_unit.nationality)))
--			if Result and turn = 1 and player = Allied_player then
--				Result := a_unit = De_ruyter or
--							a_unit = Exeter or
--							a_unit = Houston or
--							a_unit = Australia or
--							a_unit = Canberra
--			end
		end

feature -- Query

	cell (a_x, a_y: INTEGER_32): VITP_CELL
			-- The cell indexed by `a_x' and `a_y' into which a
			-- unit may be placed
		require
			x_big_enough: a_x >= 1
			x_small_enough: a_x <= cell_row_count
			y_big_enough: a_y >= 1
			y_small_enough: a_y <= cell_column_count
		do
			Result := grid.item (a_x, a_y)
		end

feature {NONE} -- Implementation

	grid: ARRAY2 [VITP_CELL]
			-- A two-dimensional array of coordinate-position cells
			-- which can possibly hold one {ATTACK_UNIT}

end
