class Core::States::GameState

Runs the map and basic game logic

Attributes

map[R]
osd[R]
party[R]

Public Class Methods

new(window) click to toggle source
Calls superclass method Core::States::State::new
# File lib/states/states.rb, line 44
def initialize(window)
  super(window)
  Core.window.state = self
  Core::Game.items = Core::Parse.items
  Core::Game.skills = Core::Parse.skills
  Core::Game.spells = Core::Parse.spells
  Core::Game.weapons = Core::Parse.weapons
  Core::Game.enemies = Core::Parse.enemies # needs the weapons
  Core::Game.characters = Core::Parse.characters
  Core::Game::Alchemy.recipies = Core::Parse.recipies
  Core::Trans.parse_items
  Core::Trans.parse_skills
  Core::Trans.parse_spells
  Core::Trans.parse_dialogues
  Core::Trans.parse_enemies
  @party = Core::Game::Party.new
  @map = Core::Game::MapLoader.new
  @map.load("test") # TODO fetch from init.def
  @setup = false
  @context = nil
  @osd = {}
end

Public Instance Methods

battle(enemies, bg, ctrl) click to toggle source
# File lib/states/states.rb, line 132
def battle(enemies, bg, ctrl)
  Core.window.save
  Core.window.advance(BattleState.new(@party, enemies, bg, ctrl))
end
draw() click to toggle source
# File lib/states/states.rb, line 101
def draw
  @map.draw
  @osd.each_value { |w|
    w.draw
  }
  @context.draw if @context
  draw_cursor
end
find_object(x, y) click to toggle source

Looks for an objects on the current map at the given screen coordinates

Returns nil if nothing was found

# File lib/states/states.rb, line 113
def find_object(x, y)
  #puts("looking for object at #{x/32}|#{y/32} (#{x}|#{y})")
  @map.objects.each { |obj|
    if obj.x/32 == x/32 and obj.y/32 == y/32
      #puts("found #{obj.inspect}")
      return obj
    end
  }
  return nil
end
player() click to toggle source
# File lib/states/states.rb, line 124
def player
  @map.objects.each { |obj|
    if obj.class == Core::Game::Player
      return obj
    end
  }
end
update() click to toggle source
# File lib/states/states.rb, line 67
def update
  if @window.pressed?(Gosu::KbEscape)
    @window.save
    @window.advance(IngameMenu.new(Core.window, @party))
    return
  end
  if @window.pressed?(Gosu::MsRight) and @context ? !Core.inside?(@window.mouse_x, @window.mouse_y, @context.x, @context.y, @context.x+@context.w, @context.y+@context.h) : true
    obj = find_object(@window.mouse_x.to_i - @map.xoff, @window.mouse_y.to_i - @map.yoff)
    @context = Core::GUI::ContextMenu.new(@window.mouse_x, @window.mouse_y, obj)
  end
  if @context
    @context.update
    # TODO fade context menu
    if (@window.pressed?(Gosu::MsLeft) and !Core.inside?(@window.mouse_x, @window.mouse_y, @context.x, @context.y, @context.x+@context.w, @context.y+@context.h)) or @context.remove?
      #@context.fade
      @context = nil
    end
    #if @context.faded?
    #end
  end
  @party.update
  @map.update
  @osd.each_value { |w|
    w.update
    if w.remove?
      @osd.delete(@osd.key(w))
    end
  }
  update_cursor
  @window.unpress
  @setup = true
  #battle([Core::Game.enemies.first], "white_ties_grass", Core::Game::Combat::Control.new(:test))
end