shattered_ruby 0.5.0.2 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,114 +5,149 @@ include ShatteredView
5
5
  include ShatteredModel
6
6
 
7
7
  module Shatter #:nodoc:all
8
- #This class is loads the view, controller, and model. It then loads
9
- #and starts the game based on these.
10
- class GameLoader
11
- include Singleton
12
- attr_writer :environment
13
- attr_reader :media_paths, :render_window, :input_manager, :key_manager, :key_converter
14
- attr_accessor :current_state
15
-
16
- # This will recourse into the app/** directories and load all ruby files
17
- # inside those directories.
18
- def load_all_sources(shattered_root)
19
- File.find_by_extension(shattered_root+"/app", "rb").each do |file|
20
- require(file)
8
+ #This class is loads the view, controller, and model. It then loads
9
+ #and starts the game based on these.
10
+ class GameLoader
11
+ include Singleton
12
+ attr_writer :environment
13
+ attr_reader :media_paths, :input_manager, :key_manager, :key_converter
14
+ attr_accessor :current_state, :render_window
15
+
16
+ # This will recourse into the app/** directories and load all ruby files
17
+ # inside those directories.
18
+ def load_all_sources(shattered_root)
19
+ File.find_by_extension(shattered_root+"/app", "rb").each do |file|
20
+ require(file)
21
+ end
21
22
  end
22
- end
23
+
24
+ # start the game
25
+ def run
26
+ load_all_sources(SHATTERED_ROOT)
27
+ load_environment
28
+
29
+ # Create our initial state, as defined by the environment.
30
+ create_state(@environment[:start_state])
23
31
 
24
- # start the game
25
- def run
26
- load_all_sources(SHATTERED_ROOT)
27
- load_environment
28
-
29
- # Create our initial state, as defined by the environment.
30
- create_state(@environment[:start_state])
31
-
32
- start_game
33
- end
34
-
35
- # Create a state from the given name
36
- # :sample creates a new SampleState object
37
- def create_state(state_name)
38
- state_class = eval("#{state_name.to_s.camelize}State")
39
- raise Error, "#{state_class} is not a class" unless state_class.is_a? Class
40
- state = state_class.new
41
- unless state.is_a? ShatteredState::Base
42
- raise Error, "#{state_class} is an invalid State object (not of ShatteredState::Base)"
43
- end
44
- return state
45
- end
46
-
47
- def load_environment
48
- #Setup Ogre and the scene for the state
49
- raise Error, "Ogre failed to initialize" if !setup_ogre
50
- setup_input
51
-
52
- load_resources(@environment[:media])
53
- end
54
-
55
- # Given ['app/media', 'media'], searches those directories, recursively, for OGRE media
56
- def load_resources(paths)
57
- @media_paths = paths
58
- # setup our resource paths specified in environment.rb
59
- Resources.instance.add_resource_paths(*paths)
60
- Resources.instance.setup
61
- end
62
-
63
- #Load the root, setup the render window
64
- #TODO: allow for the user to specify whether the window dialogue pops up
65
- #further TODO: allow the user to skin the render window dialogue
66
- def setup_ogre
67
- # TODO: create platform loader for other platforms
68
- plugins = SHATTERED_ROOT + "/config/ogre_plugins.windows.cfg"
69
- config_save=SHATTERED_ROOT + "/config/ogrerb_defaults.save"
70
- log=SHATTERED_ROOT + "/log/ogrerb.log"
71
- @root = ShatteredOgre.create_root(plugins, config_save, log)
72
- return false if !@root.show_config_dialog
73
- # TODO: allow application name to be set.
74
- @render_window = @root.initialise(true)
32
+ start_game
33
+ end
75
34
 
76
- return true
77
- end
35
+ # Create a state from the given name
36
+ # :sample creates a new SampleState object
37
+ def create_state(state_name)
38
+ state_class = eval("#{state_name.to_s.camelize}State")
39
+ raise Error, "#{state_class} is not a class" unless state_class.is_a? Class
40
+ state = state_class.new
41
+ unless state.is_a? ShatteredState::Base
42
+ raise Error, "#{state_class} is an invalid State object (not of ShatteredState::Base)"
43
+ end
44
+ return state
45
+ end
46
+
47
+ def load_environment
48
+ #Setup Ogre and the scene for the state
49
+ raise Error, "Ogre failed to initialize" if !setup_ogre
50
+ setup_input
51
+
52
+ load_resources(@environment[:media])
53
+ end
78
54
 
79
- #Every time this exits, a game dies.
80
- def start_game
81
- each_frame do |time_elapsed|
82
- current_state.update_timers(time_elapsed)
83
- @keyboard.capture
84
- #@@environment[:input].flush
55
+ # Given ['app/media', 'media'], searches those directories, recursively, for OGRE media
56
+ def load_resources(paths)
57
+ @media_paths = paths
58
+ # setup our resource paths specified in environment.rb
59
+ Resources.instance.add_resource_paths(*paths)
60
+ Resources.instance.setup
61
+ end
62
+
63
+ #Load the root, setup the render window
64
+ #TODO: allow for the user to specify whether the window dialogue pops up
65
+ #further TODO: allow the user to skin the render window dialogue
66
+ def setup_ogre
67
+ # TODO: create platform loader for other platforms
68
+ plugins = SHATTERED_ROOT + "/config/ogre_plugins.windows.cfg"
69
+ config_save=SHATTERED_ROOT + "/config/ogrerb_defaults.save"
70
+ log=SHATTERED_ROOT + "/log/ogrerb.log"
71
+ @root = ShatteredOgre.create_root(plugins, config_save, log)
72
+ return false if !@root.show_config_dialog
73
+ # TODO: allow application name to be set.
74
+ @render_window = @root.initialise(true)
75
+
76
+ return true
77
+ end
78
+
79
+ #Every time this exits, a game dies.
80
+ def start_game
81
+ each_frame do |time_elapsed|
82
+ Ogre::WindowEventUtilities::message_pump
83
+ current_state.update_timers(time_elapsed)
84
+ @key_manager.flush
85
+ @keyboard.capture
86
+ end
87
+ shutdown!
85
88
  end
89
+
90
+ # Main game loop
91
+ def each_frame
92
+ timer = Ogre::Timer.new
93
+ while !@environment[:quit] && Ogre::Root::instance.render_one_frame
94
+ return false if @render_window.closed?
95
+ seconds = timer.get_microseconds / 1000000.0
96
+ timer.reset
97
+ yield seconds
98
+ end
99
+ end
100
+
101
+ # Shutdown Ogre / OIS / Navi
102
+ def shutdown!
103
+ #@input_manager.destroy_input_object(@mouse)
104
+ @input_manager.destroy_input_object(@keyboard)
105
+ #@input_manager.destroy_input_object(@joy_stick)
106
+
107
+ OIS::InputManager.destroy_input_system(@input_manager)
108
+
109
+ #NEED TO UNREGISTER THE WINDOW LISTENER HERE!!!!!!!!!!!!
110
+
111
+ @input_manager = nil
112
+ end
113
+
114
+ # Leave the game
115
+ def quit!
116
+ @environment[:quit]=true
117
+ end
118
+
119
+ # load the input manager, the key manager, etc
120
+ # TODO: Investigate any use cases for non-buffered input
121
+ def setup_input
122
+ setup_window
123
+ @input_manager = OIS::InputManager.create_input_system(@environment[:window])
124
+ setup_keyboard
125
+ end
126
+
127
+ # Creates our window and our window event listener.
128
+ def setup_window
129
+ windowHnd = render_window.get_custom_attribute_unsigned_long("WINDOW")
130
+ @environment[:window]["WINDOW"] = windowHnd.to_s
131
+ #@window_listener = WindowEventsListener.new(@render_window)
132
+ end
133
+
134
+ # Sets up our keyboard object in buffered mode.
135
+ def setup_keyboard
136
+ @keyboard = @input_manager.create_input_object(OIS::OISKeyboard, true)
137
+ @key_manager = OIS::KeyManager.new(@keyboard)
138
+ @key_converter = ShatteredPack::KeyConverter.new(@key_manager)
139
+ end
140
+ end
141
+
142
+ # Handle window events - closed and resized
143
+ # TODO: This class belongs elsewhere...
144
+ class WindowEventsListener < Ogre::WindowEventListenerProxy
145
+ def window_resized(rw)
146
+ # GameLoader.instance.resize(rw)
147
+ end
148
+ def window_closed(rw)
149
+ GameLoader.instance.current_state.quit
150
+ end
86
151
  end
87
152
 
88
- # Main game loop
89
- def each_frame
90
- timer = Ogre::Timer.new
91
- while !@environment[:quit] && Ogre::Root::instance.render_one_frame
92
- seconds = timer.get_microseconds / 1000000.0
93
- yield seconds
94
- timer.reset
95
- end
96
- end
97
-
98
- # Leave the game
99
- def quit!
100
- @environment[:quit]=true
101
- end
102
-
103
- # load the input manager, the key manager, etc
104
- # TODO: Consider how to make input non-exclusive, as well as mouse, etc.
105
- # TODO: Investigate any use cases for non-buffered input
106
- def setup_input
107
- windowHnd = render_window.get_custom_attribute_unsigned_long("WINDOW")
108
- @input_manager = OIS::InputManager.create_input_system(
109
- { "WINDOW" => "#{windowHnd}",
110
- "w32_mouse" => ["DISCL_FOREGROUND", "DISCL_NONEXCLUSIVE"],
111
- "w32_keyboard" => ["DISCL_FOREGROUND", "DISCL_NONEXCLUSIVE"]
112
- })
113
- @keyboard = @input_manager.create_input_object(OIS::OISKeyboard, true)
114
- @key_manager = OIS::KeyManager.new(@keyboard)
115
- @key_converter = ShatteredPack::KeyConverter.new(@key_manager)
116
- end
117
- end
118
153
  end
@@ -27,6 +27,7 @@ class ShatteredAppGenerator < Rails::Generator::Base #:nodoc:all
27
27
 
28
28
  # ogre plugins and configuration
29
29
  m.file "templates/configs/ogre_plugins.windows.cfg", "config/ogre_plugins.windows.cfg"
30
+ m.file "templates/configs/ogre_plugins.mac.cfg", "config/ogre_plugins.mac.cfg"
30
31
  m.template "templates/configs/ogre.cfg", "config/ogre.cfg"
31
32
  m.template "templates/configs/boot.rb", "config/boot.rb"
32
33
 
@@ -1,31 +1,12 @@
1
1
  class <%= class_name %>State < ShatteredState::Base
2
- key :pressed => :escape, :action => :quit
3
-
2
+ scene_manager :general
3
+ camera :position => :z*300, :look_at => :zero
4
+ viewport :color => rgb(0.2, 0.2, 0.2)
5
+
6
+ key :pressed => :escape, :action => :quit
7
+
4
8
  def initialize
5
- # The different types of scene managers provided by Ogre are:
6
- # :general, :terrain, :nature, :paging, :indoor
7
- @scene_manager = create_scene_manager :general
8
-
9
- setup_camera
10
- setup_viewport
9
+ # Create scene and actors
11
10
  end
12
-
13
- # Cameras are the renderers of the world.
14
- # Scene managers can have many cameras - for example, in a first person racing game you could have
15
- # a camera facing forward, and a camera facing backwards, rendering to the rear view window.
16
- def setup_camera
17
- @camera = scene_manager.create_camera("camera")
18
- @camera.set_near_clip_distance 1
19
- @camera.set_far_clip_distance 10000
20
- @camera.position = v(0,0,-10)
21
- @camera.look_at v(0,0,0)
22
- end
23
-
24
- # Viewports are your windows into the world.
25
- # Cameras can have many viewports, but usually the relationship is 1-1.
26
- def setup_viewport
27
- @viewport = create_viewport(@camera)
28
- @viewport.set_background_colour Ogre::ColourValue.new(0.2, 0.2, 0.2)
29
- end
30
-
11
+
31
12
  end
@@ -26,8 +26,7 @@ namespace :shattered do
26
26
  end
27
27
  mv(Dir.glob("shattered_ruby").first, "shatter")
28
28
  end
29
- end
30
-
29
+ end
31
30
  desc "Lock to latest Shattered Edge or a specific revision with REVISION=X (ex: REVISION=4021) or a tag with TAG=Y (ex: TAG=rel_1-1-0)"
32
31
  task :edge do
33
32
  $verbose = false
@@ -0,0 +1,12 @@
1
+ # Defines plugins to load
2
+
3
+ # Define plugin folder, not needed for mac
4
+ #PluginFolder=.
5
+
6
+ # Define D3D rendering implementation plugin
7
+ Plugin=RenderSystem_GL
8
+ Plugin=Plugin_ParticleFX
9
+ Plugin=Plugin_BSPSceneManager
10
+ Plugin=Plugin_OctreeSceneManager
11
+ #Plugin=Plugin_CgProgramManager
12
+
@@ -7,4 +7,11 @@ game[:start_state] = :main_menu
7
7
 
8
8
  game[:media] = ["app/media"]
9
9
 
10
+ # Here you can setup how you would like the window to act.
11
+ # DISCL_NONEXCLUSIVE means the mouse and keyboard are not bound to your program.
12
+ game[:window] = {
13
+ "w32_mouse" => ["DISCL_FOREGROUND", "DISCL_NONEXCLUSIVE"],
14
+ "w32_keyboard" => ["DISCL_FOREGROUND", "DISCL_NONEXCLUSIVE"]
15
+ }
16
+
10
17
  Shatter::GameLoader.instance.environment=game
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: shattered_ruby
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.5.0.2
7
- date: 2007-07-14 00:00:00 -05:00
6
+ version: 0.5.1
7
+ date: 2007-08-20 00:00:00 -06:00
8
8
  summary: "Shattered: The main package tieing together controller, view, and model"
9
9
  require_paths:
10
10
  - lib
@@ -94,6 +94,7 @@ files:
94
94
  - lib/templates/configs/boot.rb
95
95
  - lib/templates/configs/empty.log
96
96
  - lib/templates/configs/ogre.cfg
97
+ - lib/templates/configs/ogre_plugins.mac.cfg
97
98
  - lib/templates/configs/ogre_plugins.windows.cfg
98
99
  - lib/templates/configs/runner.rb
99
100
  - lib/templates/doc