-- The goal of the Stooge!

deferred class TREASURE

inherit

  SESSILE
  redefine
    will_accept_stooge, react, restart,
    customized_init
  end


feature{NONE} -- save/restore

  customized_init( r : like room ; pr : like record ) is
  do
    precursor( r, pr )
    occupy( northwest )
  end

feature{NONE}

  vanish is
  deferred
  end

  appear is
  deferred
  end

  display_open is
  deferred
  end

  display_close is
  deferred
  end

feature

  blocks_glare : BOOLEAN is True
  blocks_shots : BOOLEAN is True

  is_open : BOOLEAN
  -- Am I open?

  open is
  -- Open myself.
  do
    is_open := True
    display_open
  ensure
    is_open
  end

  close is
    -- Close me.
  do
    is_open := False
    display_close
  ensure
    not is_open
  end

  vanished : BOOLEAN
  -- Has the Stooge taken me?

  restart is
  do
    precursor
    if room.max_heart_count = 0 then
      open
    else
      close
    end
    appear
    vanished := False
  ensure then
    is_open = ( room.max_heart_count = 0 )
    not vanished
  end

  will_accept_stooge : BOOLEAN is
  -- Yup
  do
    Result := True
  ensure then
    Result
  end


  react is
  -- Vanish and inform the room if the (still living) Stooge just covered me
  -- while I'm open.
  do
    if stooge.northwest = northwest and is_open and not stooge.dead then
      vacate
      vanish
      room.win
      vanished := True
    end
  end

end 
