Skip to content

Instantly share code, notes, and snippets.

@shawn42
Created March 10, 2009 19:55
Show Gist options
  • Save shawn42/77101 to your computer and use it in GitHub Desktop.
Save shawn42/77101 to your computer and use it in GitHub Desktop.
require 'mode'
require 'level'
require 'director'
require 'actor'
class ActorView
attr_accessor :actor, :mode
def initialize(mode,actor)
@mode = mode
@actor = actor
@mode.register_drawable self
setup
end
def setup
end
end
class Ship < Actor
end
class ShipView < ActorView
def setup
# TODO subscribe for all events here
end
def draw(target)
target.fill [255,255,255,255]
target.draw_box_s [100,10], [90,90], [150,150,150,255]
end
end
class ActorFactory
attr_accessor :mode
def initialize(mode)
@mode = mode
end
def build(actor)
begin
require actor.to_s
require actor.to_s+"_view"
rescue LoadError
# maybe its included somewhere else
end
model_klass_name = Inflector.camelize actor
model_klass = Object.const_get model_klass_name
model = model_klass.new
view_klass = Object.const_get model_klass_name+"View"
view = view_klass.nil? ? ActorView.new(mode,model) : view_klass.new(mode,model)
return [model, view]
end
end
class Game
constructor :wrapped_screen, :input_manager, :sound_manager, :mode_manager
def setup()
@sound_manager.play :current_rider
# tmp code here, to draw an actor
mode = Mode.new
@mode_manager.add_mode :demo, mode
# this code goes in the mode
factory = ActorFactory.new mode
act,act_view = factory.build :ship
level = Level.new
dir = Director.new
dir.actors << act
level.directors << dir
mode.level = level
@mode_manager.change_mode_to :demo
end
def update(time)
draw
end
def draw
@mode_manager.draw @wrapped_screen
@wrapped_screen.flip
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment