shattered_pack 0.5.0.2 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -105,6 +105,10 @@ module ShatteredModel #:nodoc:
105
105
  raise NoMethodError, "#{self.class} has no method defined '#{method}'" if self.view.nil?
106
106
  self.view.send(method, *args, &block)
107
107
  end
108
+
109
+ def inspect
110
+ "#{self.class}:#{self.object_id}"
111
+ end
108
112
  end
109
113
  end
110
114
 
@@ -6,27 +6,43 @@ module ShatteredState
6
6
  base.extend(ClassMethods)
7
7
  end
8
8
  module ClassMethods
9
+ # Cameras are the renderers of the world.
10
+ # Scene managers can have many cameras - for example, in a first person racing game you could have
11
+ # a camera facing forward, and a camera facing backwards, rendering to the rear view window.
12
+ #
13
+ #
9
14
  # In order to set the initial position of the camera, and any other attributes you would like,
10
15
  # use the following format.
11
16
  # class CameraTestState < ShatteredState::Base
12
- # camera :position => v(10,0,0), :orientation => [0.5, 0.5, 0.5, 0.5]
17
+ # camera :position => v(10,0,0), :near_clip => 10, :far_clip => 100
13
18
  # end
14
- #
15
- # If you pass a symbol as a value, the symbol will be evaluated.
16
- #
17
- # This allows for things such as:
18
19
  #
19
- # class CameraTestState < ShatteredState::Base
20
- # camera :position => :camera_position
21
- # def camera_position
22
- # return [rand*10,0,0]
23
- # end
24
- # end
25
- #
26
- # The valid options are any public functions within camera that ends in =
27
- # (such as position=, looking_at=) See ShatteredView::Camera for more.
20
+ # Additional Options:
21
+ # :position => v(0,0,0) # The initial position of the camera
22
+ # :name => "StateName" # Internal name within Ogre, usually defaults to the state name.
23
+ # :look_at => (none) # Looks at a given direction. Will behave as expected with a :position passed in.
24
+ # :near_clip => 1 # The clip distance when near objects begin to disappear.
25
+ # :far_clip => 10000 # The clip distance when far objects begin to disappear.
26
+ # Initially set to just a large number.
28
27
  def camera(options = {})
29
- #before_init_call( 'camera', options )
28
+ before_init_call( 'create', :camera, options.delete(:name) || self.to_s, options )
29
+ end
30
+
31
+ # The different types of scene managers provided by Ogre are:
32
+ # :general, :terrain, :nature, :paging, :indoor
33
+ def scene_manager(type)
34
+ before_init_call( 'create', :scene_manager, type)
35
+ end
36
+
37
+
38
+ # Viewports are your windows into the world.
39
+ # Cameras can have many viewports, but usually the relationship is 1-1.
40
+ #
41
+ # TODO: There are many more viewport options to take care of, including :dimensions, etc.
42
+ # Options:
43
+ # :color => rgb(0,0,0) # The background color of the viewport.
44
+ def viewport(options = {})
45
+ before_init_call( 'create', :viewport, options)
30
46
  end
31
47
 
32
48
  end
@@ -36,7 +52,7 @@ module ShatteredState
36
52
  # You can choose your starting state in config/environment.rb
37
53
  class Base < ShatteredPack::Base
38
54
  before_init_call :activate_state
39
- attr_reader :actors, :scene_manager
55
+ attr_reader :actors, :scene_manager, :camera, :viewport
40
56
 
41
57
  def activate_state #:nodoc:
42
58
  Shatter::GameLoader.instance.current_state = self
@@ -54,32 +70,17 @@ module ShatteredState
54
70
  # The main method for creating new objects,
55
71
  # IE: create(:light)
56
72
  def create(type, *args)
57
- name = nil
58
- name = args[0] unless args.empty?
59
-
60
- object = self.send(:"create_#{type}", name)
73
+ object = self.send(:"create_#{type}", *args)
61
74
  return object
62
75
  end
63
76
 
64
77
  # Returns the camera used in the state. See ShatteredState::ClassMethods#camera
65
- def camera(*args)
66
- if args.length == 0
67
- # TODO: We now need to create a camera using Ogre, and bind it
68
- # return @camera ||= Runner.environment[:camera]
69
- return {}
70
- end
71
-
72
- options = args[0]
73
-
74
- # Cameras are special, in that we have to have the position
75
- # called before looking_at or the view matrix gets way messed up
76
- # TODO: replace with create(:camera)
77
- # call_object_function :camera, :position=, options.delete(:position) if options.has_key?(:position)
78
- # call_object_function :camera, :looking_at=, options.delete(:looking_at) if options.has_key?(:looking_at)
79
-
80
- # Call the other methods
81
- # TODO: uncomment when camera is populated
82
- # call_object_function_for_each_key(:camera, options)
78
+ def create_camera(name, options)
79
+ @camera = scene_manager.create_camera(name)
80
+ @camera.set_near_clip_distance(options[:near_clip] || 1)
81
+ @camera.set_far_clip_distance(options[:far_clip] || 10000)
82
+ @camera.position = options[:position] if options[:position]
83
+ @camera.look_at(options[:look_at]) if options[:look_at]
83
84
  end
84
85
 
85
86
  # Creates a scene manager for Ogre to use.
@@ -88,8 +89,10 @@ module ShatteredState
88
89
  @scene_manager = root.create_scene_manager(ShatteredOgre.translate_to_scene_type(type), "#{root.to_s}.scene_manager(#{type})")
89
90
  end
90
91
 
91
- def create_viewport(camera)
92
- Shatter::GameLoader.instance.render_window.add_viewport(camera)
92
+ # Creates a viewport based off of the Camera.
93
+ def create_viewport(options)
94
+ @viewport = Shatter::GameLoader.instance.render_window.add_viewport(camera)
95
+ @viewport.set_background_colour(options[:color] || rgb(0,0,0))
93
96
  end
94
97
 
95
98
  def quit
@@ -158,7 +158,9 @@ module ShatteredView #:nodoc:
158
158
  #Create a light and add it to the lights array
159
159
  def create_light(name, options={})
160
160
  light_number = @lights.length
161
- light = scene_manager.create_light("#{self.to_s}.light(#{light_number})")
161
+ light_entity = scene_manager.create_light("#{self.to_s}.light(#{light_number})")
162
+ light = Ogre::LightInstance.new(node, scene_manager, "", :entity => light_entity)
163
+
162
164
  @lights << light
163
165
  return light
164
166
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: shattered_pack
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 Pack: The combination of model/view/controllers and the domain specific language for each."
9
9
  require_paths:
10
10
  - lib