
class ChangePage
  attr_accessor :can_change             # use or ignore this change info

  attr_accessor :has_event              # change events (bitmask)

  attr_accessor :trigger_player         # player triggering change
  attr_accessor :trigger_side           # side triggering change
  attr_accessor :trigger_page           # page triggering change

  attr_accessor :target_element         # target element after change

  attr_accessor :delay_fixed            # added frame delay before changed (fixed)
  attr_accessor :delay_random           # added frame delay before changed (random)
  attr_accessor :delay_frames           # either 1 (frames) or 50 (seconds 50 fps)

  attr_accessor :trigger_element        # element triggering change

  attr_accessor :target_content         # elements for extended change target
  attr_accessor :use_target_content     # use extended change target
  attr_accessor :only_if_complete       # only use complete target content
  attr_accessor :use_random_replace     # use random value for replacing elements
  attr_accessor :random_percentage      # random value for replacing elements
  attr_accessor :replace_when           # type of elements that can be replaced

  attr_accessor :explode                # explode instead of change

  # ---------- internal values used at runtime when playing ----------

  attr_accessor :actual_trigger_element # element that actually triggered change
  attr_accessor :actual_trigger_player  # player which actually triggered change

  # ---------- internal values used in level editor ----------

  attr_accessor :direct_action          # change triggered by actions on element
  attr_accessor :other_action           # change triggered by other element actions
  
  def initialize
    @can_change = false
    @has_event = Array.new(NUM_CHANGE_EVENTS, false)

    @trigger_player = CH_PLAYER_ANY
    @trigger_side = CH_SIDE_ANY
    @trigger_page = CH_PAGE_ANY

    @target_element = EL_EMPTY_SPACE

    @delay_fixed = 0
    @delay_random = 0
    @delay_frames = 1

    @trigger_element = EL_EMPTY_SPACE

    @explode = false
    @use_target_content = false
    @only_if_complete = false
    @use_random_replace = false
    @random_percentage = 100
    @replace_when = CP_WHEN_EMPTY

    @target_content = Array.new(3).map { Array.new(3,EL_EMPTY_SPACE) }

    @direct_action = 0
    @other_action = 0
  end
end
