shattered_pack 0.4.0.1 → 0.5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/lib/shattered_model.rb +1 -4
  2. data/lib/shattered_pack/base.rb +1 -1
  3. data/lib/shattered_pack/keyboard_input/key_converter.rb +3 -3
  4. data/lib/shattered_pack/keyboard_input/keyboard_input.rb +3 -1
  5. data/lib/shattered_pack/pre_initialize/pre_initialize.rb +6 -1
  6. data/lib/shattered_pack.rb +2 -5
  7. data/lib/shattered_state/actor/actor.rb +5 -1
  8. data/lib/shattered_state/base.rb +31 -16
  9. data/lib/shattered_state.rb +1 -4
  10. data/lib/shattered_view/base.rb +106 -41
  11. data/lib/shattered_view/camera.rb +7 -7
  12. data/lib/shattered_view/resources.rb +18 -2
  13. data/lib/shattered_view.rb +3 -5
  14. metadata +10 -29
  15. data/lib/mock_objects/shattered_ogre/input.rb +0 -6
  16. data/lib/mock_objects/shattered_ogre/light.rb +0 -4
  17. data/lib/mock_objects/shattered_ogre/mesh.rb +0 -17
  18. data/lib/mock_objects/shattered_ogre/node.rb +0 -17
  19. data/lib/mock_objects/shattered_ogre/renderer.rb +0 -11
  20. data/lib/mock_objects/shattered_ogre/resource_handler.rb +0 -9
  21. data/lib/mock_objects/shattered_ogre/scene.rb +0 -28
  22. data/lib/shattered_model/fuzzy_logic.rb +0 -188
  23. data/lib/shattered_model/linear_interpolator.rb +0 -29
  24. data/lib/shattered_pack/runner.rb +0 -11
  25. data/lib/shattered_state/runner.rb +0 -39
  26. data/lib/shattered_view/extensions.rb +0 -10
  27. data/lib/shattered_view/light.rb +0 -29
  28. data/lib/shattered_view/mesh/animation.rb +0 -20
  29. data/lib/shattered_view/mesh/mesh.rb +0 -152
  30. data/lib/shattered_view/node.rb +0 -105
  31. data/lib/shattered_view/overlay.rb +0 -20
  32. data/lib/shattered_view/rmaterial.rb +0 -43
  33. data/lib/shattered_view/runner.rb +0 -48
  34. data/lib/shattered_view/vector.rb +0 -258
@@ -1,188 +0,0 @@
1
- require 'yaml'
2
- # This provides basic fuzzy logic. That is, it will tell you what properties any given
3
- # attribute contains based upon previous definition.
4
- #
5
- # Example:
6
- # player_logic.add_classification( :hp, :dieing, :hp, :max => 5, :min => 45 )
7
- # player_logic.add_classification( :hp, :healthy, :max => 80, :min => 65 )
8
- # player_logic.hp(15) => [[:dieing, 0.75], [:healthy, 0.0]]
9
- class FuzzyLogic #:nodoc:
10
- attr_reader :consequences
11
- def initialize
12
- @attributes = {}
13
- @consequences = {}
14
- end
15
-
16
- def add_consequence( consequence, classifications={} )
17
- @consequences[classifications] ||= []
18
- @consequences[classifications] += [consequence]
19
- end
20
-
21
- def add_classification( attribute, classification, options = {} )
22
- define_attribute(attribute) if(@attributes[attribute].nil?)
23
- define_interpolator(attribute,classification,options)
24
- end
25
-
26
- def consequences_of(options={})
27
- # transform the passed in attributes to probability sets
28
- valid_sequences = []
29
- options.each_pair do |attribute, value|
30
- valid_sequences << {attribute => classifications_of(attribute,value)}
31
- end
32
- # combine the probability sets
33
- valid_combinations = compile_consequence_combinations(valid_sequences)
34
- # realize the consequences of the combined probability sets
35
- return consequences_of_combinations(valid_combinations)
36
- end
37
-
38
- def parse_fuzzy_file( file_name )
39
- file_name += ".yaml" if not(file_name =~ /\.yaml$/)
40
- raise ArgumentError, "Cannot find #{file_name}" if not(File.file? file_name)
41
- begin
42
- fuzzy_file = YAML::load(File.open(file_name))
43
- rescue ArgumentError => bang
44
- raise ArgumentError, "Error when loading #{file_name} : #{bang.message}"
45
- end
46
- parse_attributes(fuzzy_file)
47
- add_consequences_from_parsed(parse_consequences(fuzzy_file['consequences']))
48
- end
49
-
50
- # The algorithm always performs an action on update.
51
- def update(object)
52
- status = {}
53
- @attributes.each_pair do |attribute, classifications|
54
- status.merge!({attribute => object.send(attribute)})
55
- end
56
- consequences = consequences_of(status)
57
- total_probability = 0
58
- consequences.each_pair do |actions, probability|
59
- total_probability+=probability
60
- end
61
- action_at_probability = rand*total_probability
62
- total_probability = 0
63
- consequences.each_pair do |actions, probability|
64
- total_probability += probability
65
- if( action_at_probability < total_probability )
66
- actions.each do |action|
67
- object.send(action)
68
- end
69
- break
70
- end
71
- end
72
- end
73
-
74
- private
75
-
76
- # This function recursively moves through each valid combination of probabilities.
77
- # It sums the probabilities by multiplication.
78
- def compile_consequence_combinations(valid_sequences, compiled={}, probability=1.0)
79
- retv = []
80
- attribute = valid_sequences[0].keys[0]
81
- classifications = valid_sequences[0][attribute]
82
- classifications.each do |classification, chance|
83
- next if chance == 0
84
- nprobability=probability*chance
85
- compiled[attribute]=classification
86
- if(valid_sequences.length == 1)
87
- retv << [compiled.dup, nprobability]
88
- else
89
- retv += compile_consequence_combinations(valid_sequences[1..-1],compiled,nprobability)
90
- end
91
- end
92
- return retv
93
- end
94
-
95
- def consequences_of_combinations(combinations)
96
- consequences = {}
97
- combinations.each do |combination, probability|
98
- # where a = { {1 => 2}, 3 } and b = {1,2}, a[b] != 3
99
- # in order to circumvent this (error?) we use the fact that
100
- # a.keys[0] == b
101
- @consequences.keys.each do |index|
102
- next if index != combination
103
- consequences[@consequences[index]] ||= 0
104
- consequences[@consequences[index]]+=probability
105
- end
106
- end
107
- return consequences
108
- end
109
-
110
- def parse_attributes(yaml)
111
- yaml['attributes'].each_pair do |attribute, classifications|
112
- classifications.each_pair do |classification, options|
113
- options.keys.each do |key|
114
- options[key.to_sym]=options.delete key
115
- end
116
- add_classification( attribute.to_sym, classification.to_sym, options )
117
- end
118
- end
119
- end
120
-
121
- def parse_consequences(consequences,result={})
122
- compilation = []
123
- consequences.each_pair do |consequence, action|
124
- nresult = result.dup
125
- nresult.merge!(attribute_for(consequence.to_sym) => consequence.to_sym)
126
- if action.is_a? String
127
- compilation += [nresult => action.to_sym]
128
- else
129
- compilation+=parse_consequences(action,nresult)
130
- end
131
- end
132
- return compilation
133
- end
134
-
135
- def add_consequences_from_parsed(compilation)
136
- compilation.each do |item|
137
- item.each_pair do |index, action|
138
- add_consequence(action, index)
139
- end
140
- end
141
- end
142
-
143
- def attribute_for(unknown_classification)
144
- @attributes.each_pair do |attribute, classifications|
145
- classifications.keys.each do |classification|
146
- return attribute if classification == unknown_classification
147
- end
148
- end
149
- return nil
150
- end
151
-
152
- def define_attribute(attribute)
153
- @attributes[attribute] = {}
154
- eval <<-EOF
155
- class << self
156
- define_method(:#{attribute}) do |at|
157
- classifications_of(:#{attribute},at)
158
- end
159
- end
160
- EOF
161
- end
162
-
163
- def define_interpolator( attribute, classification,options )
164
- interpolator = LinearInterpolator.new
165
- @attributes[attribute][classification] = interpolator
166
-
167
- add_point(interpolator, options[:max],1)
168
- add_point(interpolator, options[:min],0)
169
- end
170
-
171
- def classifications_of( attribute, at )
172
- retv = []
173
- @attributes[attribute].each_pair do |classification,interpolator|
174
- retv << [ classification, interpolator.value_at(at) ]
175
- end
176
- return retv.sort_by { |classification| (1.0-classification[1]) }
177
- end
178
-
179
- def add_point( interpolator, points, value )
180
- if(points.is_a? Array)
181
- points.each do |x|
182
- interpolator.add_point(x,value)
183
- end
184
- else
185
- interpolator.add_point(points,value)
186
- end
187
- end
188
- end
@@ -1,29 +0,0 @@
1
- # This provides basic linear interpolation between any number of arbitrarily defined points.
2
- # It is used for fuzzy logic. Although, fuzzy logic based on a statistically normal curve
3
- # provides best results, linear interpolation provides a "gud 'nuf" approach.
4
- class LinearInterpolator #:nodoc:
5
- def add_point(x,y)
6
- @points ||= []
7
- @points << [x,y]
8
- @points = @points.sort_by { |x| x[0] }
9
- end
10
- def value_at(x)
11
- return 0 if @points.nil?
12
- return @points[0][1] if x < @points[0][0]
13
- return @points[-1][1] if x > @points[-1][0]
14
-
15
- after,before=nil,nil
16
- @points.each_with_index do |point,i|
17
- if(point[0] >= x)
18
- after = point
19
- before = @points[i-1]
20
- end
21
- end
22
-
23
- m=(before[1]-after[1])/(before[0]-after[0]).to_f
24
- x-=before[0]
25
- b=before[1]
26
-
27
- return m*x+b
28
- end
29
- end
@@ -1,11 +0,0 @@
1
- module ShatteredPack
2
- class Configuration #:nodoc:
3
- def self.environment
4
- @@environment={} unless defined? @@environment
5
- return @@environment
6
- end
7
- def self.environment=(environment)
8
- @@environment=environment
9
- end
10
- end
11
- end
@@ -1,39 +0,0 @@
1
-
2
- module ShatteredState
3
- #The class Runner is present in model, view, and controller, and signifies the
4
- #main entry point into the program. This is called by script/runner.rb
5
- class Runner #:nodoc:
6
- def initialize( options = {} )
7
- @@environment ||= options
8
- @@environment[:input] = ShatteredPack::KeyConverter.new(@@environment[:input])
9
- end
10
-
11
- #Every time this exits, a game dies.
12
- def start_game(env)
13
- @@environment = env
14
- each_frame do |time_elapsed|
15
- @@environment[:state].update_timers(time_elapsed)
16
- @@environment[:input].flush
17
- @@environment[:renderer].quit if @@environment[:quit]
18
- end
19
- end
20
-
21
- def each_frame
22
- yield @@environment[:renderer].timeSinceLastFrame while @@environment[:renderer].nextFrame
23
- end
24
-
25
- def self.environment
26
- begin
27
- return @@environment
28
- rescue NameError
29
- return @@environment = mock_environment
30
- end
31
- end
32
-
33
- def self.mock_environment
34
- retv = {}
35
- retv[:camera] = ShatteredView::Node.new
36
- return retv
37
- end
38
- end
39
- end
@@ -1,10 +0,0 @@
1
- module ShatteredOgre #:nodoc:
2
- class Vector3 #:nodoc:
3
- def to_a
4
- [x, y, z]
5
- end
6
- def to_v
7
- Vector.new x, y, z
8
- end
9
- end
10
- end
@@ -1,29 +0,0 @@
1
- module ShatteredView
2
-
3
- class Light
4
- def light
5
- @light ||= ShatteredOgre::Scene.getSingleton().createLight
6
- end
7
- def direction=(*direction)
8
- light.setType(ShatteredOgre::Light::LT_DIRECTIONAL)
9
- light.setDirection(direction.to_v3)
10
- end
11
- def diffuse=(r,g,b)
12
- light.setDiffuseColour(r,g,b)
13
- end
14
- def specular=(r,g,b)
15
- light.setSpecularColour(r,g,b)
16
- end
17
- def position=(pos)
18
- light.setType(ShatteredOgre::Light::LT_POINT)
19
- light.setPosition(pos.to_v3)
20
- end
21
- def ambient=(r,g,b)
22
- ShatteredOgre::Scene.getSingleton().setAmbientLight(r,g,b);
23
- end
24
- def attenuation=(range, const, linear, quad)
25
- light.setType(ShatteredOgre::Light::LT_POINT)
26
- light.setAttenuation(range, const, linear, quad)
27
- end
28
- end
29
- end
@@ -1,20 +0,0 @@
1
- module ShatteredView
2
- class Animation
3
- def initialize(mesh, name)
4
- @animation = mesh.getAnimation name
5
- @animation.addAsFrameListener
6
- end
7
- def play
8
- @animation.play
9
- end
10
- def stop
11
- @animation.stop
12
- end
13
- def loop=(looping)
14
- @animation.setLoop(looping);
15
- end
16
- def time_scale=(scale)
17
- @animation.setTimeScale(scale);
18
- end
19
- end
20
- end
@@ -1,152 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
-
4
- require 'animation'
5
- module ShatteredView
6
- module Mesh
7
- def self.included(base)
8
- base.extend(ClassMethods)
9
- base.send(:include, InstanceMethods)
10
- end
11
-
12
- module ClassMethods
13
- # Meshes are the foundation for your world.
14
- #
15
- # They tie in to Ogre's .mesh file format, and display a 3d object onto the screen.
16
- #
17
- # Shattered has support for loading meshes, creating materials for those meshes (using RMaterials)
18
- # and skeletal animation support.
19
- #
20
- # class DirtyRubyView
21
- # mesh "dirty_ruby", :position => v(0,0,1)
22
- # end
23
- #
24
- # When a Mesh is created, all animations found in that mesh are loaded, and added
25
- # as functions to that mesh.
26
- #
27
- # example: Tim.mesh has animations kick and punch
28
- #
29
- # after loading Tim.mesh, View has the Mesh object tim
30
- # tim.kick.play
31
- # tim.animation(:kick).play
32
- #
33
- # See Rmaterials and Animation for more details.
34
- def mesh(file, options = {})
35
- before_init_call( :mesh, file, options )
36
- end
37
-
38
- # Note: The following is broken in 0.4.0.1
39
- # Animations declare helper functions for mesh animations.
40
- #
41
- # class AnimatedRubyView < ...
42
- # mesh :animated_ruby, ...
43
- # animation "shatter"
44
- #
45
- # def initialize
46
- # shatter # same as animated_ruby.shatter
47
- # end
48
- # end
49
- #
50
- # options can include any function in animation.rb
51
- # and :alias => :alias_name
52
- def animation(name, options = {})
53
- play_alias = options.delete(:alias)
54
- before_init_call(:animation, name, options)
55
- unless play_alias.nil?
56
- before_init_call(:animation_alias, name, play_alias)
57
- end
58
- end
59
- end
60
-
61
- module InstanceMethods
62
-
63
- public
64
-
65
- #TODO - Should it be a list like this, or a hash with the name as the index?
66
- def meshes
67
- # children.collect { |child| child if child.is_a? Mesh }
68
- @meshes
69
- end
70
-
71
- private
72
- def mesh(file, options={})
73
- mesh = Mesh.new(file)
74
- name = mesh.name
75
- attr_reader name.to_sym, mesh
76
-
77
- call_object_function_for_each_key(name, options)
78
- #keep track of the meshes we create
79
- mesh.attach_to(node)
80
- @meshes ||= []
81
- @meshes << mesh
82
- mesh
83
- end
84
-
85
- def animation(name, options={})
86
- meshes.each do |mesh|
87
- mesh.instance_eval <<-EOF
88
- class << self
89
- define_method(:#{name}) do
90
- animation(:#{name})
91
- end
92
- end
93
- EOF
94
- call_object_function_for_each_key("#{mesh.name}.#{name}".to_sym, options)
95
- end
96
- end
97
-
98
- def animation_alias(name, renamed)
99
- define_method(renamed.to_sym) do
100
- meshes.each do |mesh|
101
- mesh.animation(name.to_sym).play
102
- end
103
- end
104
- end
105
- end
106
-
107
- # This Mesh class corresponds (almost 1 to 1) with ShatteredOgre's mesh class
108
- class Mesh < ShatteredView::Node
109
- attr_reader :name
110
-
111
- def initialize( file, options = {} )
112
- super( )
113
- @name = file.underscore
114
- @scene_node = ShatteredOgre::Scene.getSingleton.createMesh( [0,0,0].to_v3, "#{file}.mesh" )
115
- # TODO Log this
116
- # puts "Loading Mesh: #{scene_node} from #{file}.mesh"
117
- populate_animations
118
- end
119
-
120
- # Access a given animation. Returns nil on failure.
121
- def animation( animation )
122
- return @animations[animation]
123
- end
124
-
125
- #Set the material on this mesh. Accepts a string or a rmaterial
126
- def material=( material )
127
- if material.is_a? RMaterial
128
- scene_node.generateTangents if material.tangent_space
129
- material = material.name
130
- end
131
- scene_node.setMaterial(material.to_s)
132
- end
133
-
134
- # Remove the Ogre Mesh from the scene
135
- def remove_from_scene
136
- scene_node.removeFromScene
137
- end
138
- private
139
-
140
- # populate_animations queries ShatteredOgre and adds the found animations to the mesh.
141
- def populate_animations
142
- @animations = {}
143
- (0...scene_node.getNumberOfAnimations).each do |idx|
144
- name = scene_node.getAnimationName(idx)
145
- @animations[name.downcase.to_sym] = ShatteredView::Animation.new(scene_node, name)
146
- end
147
- end
148
-
149
-
150
- end
151
- end
152
- end
@@ -1,105 +0,0 @@
1
- module ShatteredView
2
- class Node
3
- attr_reader :position
4
- attr_accessor :scene_node
5
-
6
- #Returns the SceneManager::RootNode wrapped in ShatteredView::Node
7
- def Node.root
8
- @@root ||= Node.new
9
- @@root.scene_node = ShatteredOgre::Scene.getSingleton.getRootSceneNode
10
- return @@root
11
- end
12
-
13
- #Everything attached to this object
14
- def children
15
- @children ||= []
16
- end
17
-
18
- def initialize(parent = nil)
19
- @position = v(0,0,0)
20
- # Create an empty unassociated node.
21
- @scene_node = ShatteredOgre::Scene.getSingleton.createSceneNode
22
- attach_to(parent)
23
- end
24
-
25
- # Use attach_to instead
26
- def attach_child(child)
27
- children << child
28
- child.scene_node.attachTo(scene_node)
29
- end
30
-
31
- # Use attach_to on the child node (with nil if you want to clear the parent)
32
- def remove_child(child)
33
- @children.delete child
34
- end
35
-
36
- #Set a new parent node for the object
37
- def attach_to(new_parent)
38
- @parent.remove_child(self) unless @parent.nil?
39
- @parent = new_parent
40
- new_parent.attach_child(self) unless new_parent.nil?
41
- end
42
-
43
- # Move the node a certain amount
44
- def translate(v)
45
- @position += v
46
- synchronize
47
- end
48
-
49
- def position=(v)
50
- @position = v.to_v
51
- synchronize
52
- end
53
-
54
- # uses #look_at
55
- def looking_at=( *look_toward )
56
- look_toward = look_toward[0] if(look_toward.length == 1)
57
- look_at(look_toward)
58
- end
59
-
60
- alias_method :look_at=, :looking_at=
61
-
62
- # look_at a Vector, Mesh, or Actor.
63
- def look_at( position )
64
- position = position.position unless position.is_a?(ShatteredOgre::Vector3) || position.is_a?(Vector) || position.is_a?(Array)
65
- position = position.to_v3 unless position.is_a?(ShatteredOgre::Vector3)
66
- scene_node.lookAt(position)
67
- # raise ArgumentError, "#{position.inspect} is not a Mesh, Actor, or Vector."
68
- end
69
-
70
- # rotate along axis, degrees amount
71
- def rotate( axis, degrees )
72
- axis = axis.to_v.normalize
73
- scene_node.rotate(axis.to_v3, degrees)
74
- end
75
-
76
- def rotation=(axis, degrees)
77
- rotate axis, degrees
78
- end
79
-
80
- def scale=(*scale)
81
- scale = scale[0] if scale.length == 1
82
- scale = [scale, scale, scale].to_v if scale.kind_of?(Numeric)
83
- scale = scale.to_v
84
-
85
- scene_node.scale scale.to_v3
86
- end
87
-
88
- def scale(amount)
89
- amount = amount.to_v3 unless amount.is_a? Fixnum
90
- scene_node.scale amount
91
- end
92
-
93
- def visible=(visible)
94
- scene_node.setVisible(visible)
95
- end
96
-
97
- # Synchronize the position with C++, this is called every frame. However
98
- # there are times where scene_node hasn't been initialized quite yet
99
- # (such as right when a new actor is in the process of being created), so
100
- # only synchronize if there's something to synchronize
101
- def synchronize
102
- @scene_node.setPosition(position.to_v3) unless @scene_node.nil?
103
- end
104
- end
105
- end
@@ -1,20 +0,0 @@
1
- module ShatteredView
2
- class Overlay
3
- attr_reader :name
4
- def initialize(name)
5
- @name = name
6
- hide
7
- end
8
- def show
9
- ShatteredOgre::Scene::getSingleton.showOverlay(name)
10
- @visible = true
11
- end
12
- def hide
13
- ShatteredOgre::Scene::getSingleton.hideOverlay(name)
14
- @visible = false
15
- end
16
- def visible?
17
- @visible
18
- end
19
- end
20
- end
@@ -1,43 +0,0 @@
1
- require 'erb'
2
-
3
- module ShatteredView
4
- class RMaterial
5
- attr_reader :result, :name
6
- def load!(file)
7
- begin
8
- evaluate!(File.open(file).readlines.join(''))
9
- rescue Errno::ENOENT => bang
10
- raise Errno::ENOENT, "RMaterial for #{name} not found: #{bang.message}"
11
- end
12
- end
13
- def create_ogre_material!
14
- ShatteredOgre::ResourceHandler.getSingleton.addCustomMaterial(name.to_s, result)
15
- end
16
- def create_ogre_material=(*args)
17
- load!("#{SHATTERED_ROOT}/app/media/common/templates/#{template}.rmaterial")
18
- create_ogre_material!
19
- end
20
- def method_missing(name, *args)
21
- # Check if the method is a setter
22
- if name.to_s[-1].chr == "="
23
- name = name.to_s[0...-1].to_sym
24
- # Set the instance variable to the sent variable
25
- ivar = "@#{ name }".to_sym
26
- instance_variable_set(ivar, args[0])
27
- else
28
- begin
29
- return eval("@#{name}")
30
- rescue StandardError => bang
31
- raise NoMethodError, "Rmaterial could not find the #{name} attribute: #{bang.message}"
32
- end
33
- end
34
- end
35
- def evaluate!(template)
36
- evaluator = ERB.new(template)
37
- return @result ||= evaluator.result(binding)
38
- end
39
- def tangent_space
40
- false
41
- end
42
- end
43
- end
@@ -1,48 +0,0 @@
1
- require 'erb'
2
-
3
- module ShatteredView
4
- class Runner #:nodoc:
5
- def initialize(options = {})
6
- generate_plugin_config
7
- Resources.instance.add_resource_paths("/media", "/app/media", "/app/views")
8
- @renderer = ShatteredOgre::Renderer.new
9
- raise Error, "Renderer failed to initialize Ogre" if @renderer.failed
10
- @scene = ShatteredOgre::Scene.new(translate_to_scene_type(options[:scene_manager]))
11
- end
12
- def generate_plugin_config
13
- plugin_directory = SHATTERED_ROOT+"/config/"
14
- generated_plugin = plugin_directory+ "plugins."
15
- generator = plugin_directory + "ogre_plugins.rcfg"
16
- if PLATFORM =~ /mswin/
17
- generated_plugin += "win32"
18
- elsif PLATFORM =~ /darwin/
19
- generated_plugin += "darwin"
20
- else
21
- generated_plugin += "linux"
22
- end
23
- process_plugin(generator, generated_plugin+".cfg")
24
- end
25
- def process_plugin(base, generate_to)
26
- puts "Generating #{generate_to} from #{base}, #{File.exists?(base)}"
27
- return unless File.exists?(base)
28
- generated_banner = "\n\r//=== This file is generated. Modify the .rcfg instead. ===\n\r\n\r"
29
- to_write = generated_banner + ERB.new(File.open(base,"r").read).result + generated_banner
30
- output = File.open(generate_to, "w")
31
- output.syswrite(to_write)
32
- output.close
33
- end
34
- def translate_to_scene_type( symbol )
35
- return ShatteredOgre::Scene::Generic if(symbol == :general)
36
- return ShatteredOgre::Scene::Terrain if(symbol == :terrain)
37
- return ShatteredOgre::Scene::Nature if(symbol == :nature)
38
- return ShatteredOgre::Scene::NaturePaging if(symbol == :paging)
39
- return ShatteredOgre::Scene::Indoor if(symbol == :indoor)
40
- end
41
- def add_to_environment(environment)
42
- environment[:scene]=@scene
43
- environment[:renderer]=@renderer
44
- environment[:camera]=Camera.new @scene
45
- environment[:input]=ShatteredOgre::Input.new
46
- end
47
- end
48
- end