RUIC 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY +23 -0
- data/README.md +2 -2
- data/lib/ruic.rb +11 -3
- data/lib/ruic/application.rb +28 -22
- data/lib/ruic/attributes.rb +10 -2
- data/lib/ruic/behaviors.rb +2 -15
- data/lib/ruic/effect.rb +32 -0
- data/lib/ruic/interfaces.rb +51 -13
- data/lib/ruic/presentation.rb +46 -20
- data/lib/ruic/renderplugin.rb +18 -0
- data/lib/ruic/ripl.rb +45 -0
- data/lib/ruic/statemachine.rb +142 -25
- data/lib/ruic/version.rb +1 -1
- data/test/customclasses.ruic +0 -1
- data/test/filtering.ruic +0 -1
- data/test/futureassets.ruic +0 -1
- data/test/nonmaster.ruic +0 -1
- data/test/paths.ruic +0 -2
- data/test/projects/MissingAssets/Existing.uip +87 -0
- data/test/projects/MissingAssets/MissingAssets.uia +21 -0
- data/test/projects/MissingAssets/MissingAssets.uia-user +14 -0
- data/test/projects/MissingAssets/RoundedPlane-1/RoundedPlane-1.import +18 -0
- data/test/projects/MissingAssets/RoundedPlane-1/meshes/RoundedPlane.mesh +0 -0
- data/test/projects/MissingAssets/effects/effects.txt +3 -0
- data/test/projects/MissingAssets/effects/existing.effect +38 -0
- data/test/projects/MissingAssets/fonts/Arimo-Regular.ttf +0 -0
- data/test/projects/MissingAssets/fonts/Chivo-Black.ttf +0 -0
- data/test/projects/MissingAssets/fonts/OFL.txt +92 -0
- data/test/projects/MissingAssets/maps/effects/brushnoise.dds +0 -0
- data/test/projects/MissingAssets/maps/existing.png +0 -0
- data/test/projects/MissingAssets/maps/existing2.png +0 -0
- data/test/projects/MissingAssets/maps/maps.txt +2 -0
- data/test/projects/MissingAssets/maps/materials/concrete_plain.png +0 -0
- data/test/projects/MissingAssets/maps/materials/concrete_plain_bump.png +0 -0
- data/test/projects/MissingAssets/maps/materials/spherical_checker.png +0 -0
- data/test/projects/MissingAssets/maps/unused.png +0 -0
- data/test/projects/MissingAssets/materials/concrete.material +251 -0
- data/test/projects/MissingAssets/materials/materials.txt +3 -0
- data/test/projects/MissingAssets/scripts/existing1.lua +2 -0
- data/test/projects/MissingAssets/scripts/existing2.lua +470 -0
- data/test/projects/MissingAssets/states/existing.scxml +4 -0
- data/test/projects/MissingAssets/tests/interface-navigation.scxml-test +3 -0
- data/test/properties.ruic +0 -2
- data/test/referencematerials.ruic +0 -2
- data/test/usage.ruic +38 -4
- metadata +53 -3
- data/lib/ruic/ripl-after-result.rb +0 -25
@@ -0,0 +1,18 @@
|
|
1
|
+
class UIC::RenderPlugin
|
2
|
+
include UIC::FileBacked
|
3
|
+
def initialize( file )
|
4
|
+
self.file = file
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class UIC::Application::RenderPlugin < UIC::RenderPlugin
|
9
|
+
include UIC::ElementBacked
|
10
|
+
# @!parse extend UIC::ElementBacked::ClassMethods
|
11
|
+
xmlattribute :id
|
12
|
+
xmlattribute :src
|
13
|
+
def initialize(application,el)
|
14
|
+
self.owner = application
|
15
|
+
self.el = el
|
16
|
+
super( application.absolute_path(src) )
|
17
|
+
end
|
18
|
+
end
|
data/lib/ruic/ripl.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module Ripl; end
|
2
|
+
|
3
|
+
# Allows [Ripl](https://github.com/cldwalker/ripl) to execute code or print a message after every result.
|
4
|
+
#
|
5
|
+
# @example 1) Printing a blank line after each result
|
6
|
+
# require_relative 'ripl-after-result'
|
7
|
+
# Ripl::Shell.include Ripl::AfterResult
|
8
|
+
# Ripl.config.merge! after_result:"\n"
|
9
|
+
#
|
10
|
+
# @example 2) Executing arbitrary code with the result
|
11
|
+
# results = []
|
12
|
+
# require_relative 'ripl-after-result'
|
13
|
+
# Ripl::Shell.include Ripl::AfterResult
|
14
|
+
# Ripl.config.merge! after_result:proc{ |result| results << result }
|
15
|
+
module Ripl::AfterResult
|
16
|
+
# @private no need to document the method
|
17
|
+
def print_result(result)
|
18
|
+
super unless result.nil? && config[:skip_nil_results]
|
19
|
+
if after=config[:after_result]
|
20
|
+
if after.respond_to?(:call)
|
21
|
+
after.call(result)
|
22
|
+
else
|
23
|
+
puts after
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Allows [Ripl](https://github.com/cldwalker/ripl) to wrap lines of output
|
30
|
+
# and/or prefix each line of the result with the `result_prompt`.
|
31
|
+
module Ripl::FormatResult
|
32
|
+
# @private no need to document the method
|
33
|
+
def format_result(result,conf={})
|
34
|
+
conf=config if respond_to? :config
|
35
|
+
result = conf[:to_s] ? result.to_s : result.inspect
|
36
|
+
result = result.dup if result.frozen?
|
37
|
+
if limit=conf[:result_line_limit]
|
38
|
+
match = /^.{#{limit}}.+/o
|
39
|
+
:go while result.sub!(match){ |line| line.sub /^(?:(.{,#{limit}})[ \t]+|(.{#{limit}}))/o, "\\1\\2\n" }
|
40
|
+
end
|
41
|
+
|
42
|
+
result.gsub( conf[:prefix_result_lines] ? /^/ : /\A/, conf[:result_prompt] )
|
43
|
+
end
|
44
|
+
module_function :format_result
|
45
|
+
end
|
data/lib/ruic/statemachine.rb
CHANGED
@@ -1,15 +1,10 @@
|
|
1
1
|
class UIC::StateMachine
|
2
|
-
include UIC::
|
3
|
-
def initialize(
|
4
|
-
|
2
|
+
include UIC::XMLFileBacked
|
3
|
+
def initialize( scxml )
|
4
|
+
self.file = scxml
|
5
5
|
end
|
6
|
-
|
7
|
-
|
8
|
-
!errors.empty?
|
9
|
-
end
|
10
|
-
|
11
|
-
def errors
|
12
|
-
file_found? ? [] : ["File not found: '#{file}'"]
|
6
|
+
def inspect
|
7
|
+
"<#{self.class} #{file}>"
|
13
8
|
end
|
14
9
|
end
|
15
10
|
|
@@ -29,12 +24,13 @@ class UIC::Application::StateMachine < UIC::StateMachine
|
|
29
24
|
def initialize(application,el)
|
30
25
|
self.owner = application
|
31
26
|
self.el = el
|
32
|
-
|
33
|
-
|
34
|
-
@visuals
|
35
|
-
@visuals ||= @doc.root.add_child("<statemachine ref='##{id}'><visual-states/></statemachine>")
|
27
|
+
|
28
|
+
@visuals = app.doc.at( "/xmlns:application/xmlns:statemachine[@ref='##{id}']/xmlns:visual-states" )
|
29
|
+
@visuals ||= app.doc.root.add_child("<statemachine ref='##{id}'><visual-states/></statemachine>")
|
36
30
|
@visual_states = VisualStates.new( self, @visuals )
|
37
31
|
@visual_transitions = VisualTransitions.new( self, @visuals )
|
32
|
+
|
33
|
+
self.file = application.absolute_path(src)
|
38
34
|
end
|
39
35
|
alias_method :app, :owner
|
40
36
|
|
@@ -48,12 +44,32 @@ class UIC::Application::StateMachine < UIC::StateMachine
|
|
48
44
|
visual_action.value[/\A(['"])[^'"]+\1\Z/] && # ensure that it's a simple string value
|
49
45
|
visual_action.element.properties[ visual_action.attribute ].is_a?( UIC::Property::Image )
|
50
46
|
end.group_by do |visual_action,owner|
|
51
|
-
visual_action.value[/\A(['"])([^'"]+)\1\Z/,2]
|
47
|
+
app.absolute_path( visual_action.value[/\A(['"])([^'"]+)\1\Z/,2] )
|
52
48
|
end.each do |image_path,array|
|
53
49
|
array.map!(&:last)
|
54
50
|
end
|
55
51
|
end
|
56
52
|
|
53
|
+
# @return [Array<VisualAction>] all visual actions in the `.uia` for this state machine.
|
54
|
+
def visual_actions
|
55
|
+
visual_states.flat_map(&:enter_actions) +
|
56
|
+
visual_states.flat_map(&:exit_actions) +
|
57
|
+
visual_transitions.flat_map(&:actions)
|
58
|
+
end
|
59
|
+
|
60
|
+
def referenced_files
|
61
|
+
visual_actions.map do |action|
|
62
|
+
if action.is_a?(VisualAction::SetAttribute) && (el=action.element) && (path=action.value[ /\A(['"])([^'"]+)\1\Z/, 2 ])
|
63
|
+
type=el.properties[ action.attribute ].type
|
64
|
+
if action.attribute=='sourcepath' || action.attribute=='importfile' || type=='Texture'
|
65
|
+
app.absolute_path( path.sub(/#.+$/,'') )
|
66
|
+
elsif type=='Font'
|
67
|
+
app.absolute_path( File.join( 'fonts', path.sub(/$/,'.ttf') ) )
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end.compact.uniq
|
71
|
+
end
|
72
|
+
|
57
73
|
class UIC::Application::StateMachine::VisualStates
|
58
74
|
include Enumerable
|
59
75
|
def initialize(app_machine,visuals_el)
|
@@ -62,15 +78,15 @@ class UIC::Application::StateMachine < UIC::StateMachine
|
|
62
78
|
@by_el = {}
|
63
79
|
end
|
64
80
|
def each
|
65
|
-
@wrap.xpath('state').each{ |el| yield @by_el[el] ||= VisualState.new(el) }
|
81
|
+
@wrap.xpath('xmlns:state').each{ |el| yield @by_el[el] ||= VisualState.new(el,@machine) }
|
66
82
|
end
|
67
83
|
def [](id)
|
68
|
-
if el=@wrap.at("state[@ref='#{id}']")
|
69
|
-
@by_el[el] ||= VisualState.new(el)
|
84
|
+
if el=@wrap.at("xmlns:state[@ref='#{id}']")
|
85
|
+
@by_el[el] ||= VisualState.new(el,@machine)
|
70
86
|
end
|
71
87
|
end
|
72
88
|
def length
|
73
|
-
@wrap.xpath('count(state)').to_i
|
89
|
+
@wrap.xpath('count(xmlns:state)').to_i
|
74
90
|
end
|
75
91
|
alias_method :count, :length
|
76
92
|
end
|
@@ -83,30 +99,131 @@ class UIC::Application::StateMachine < UIC::StateMachine
|
|
83
99
|
@by_el = {}
|
84
100
|
end
|
85
101
|
def each
|
86
|
-
@wrap.xpath('transition').each{ |el| yield @by_el[el] ||=
|
102
|
+
@wrap.xpath('xmlns:transition').each{ |el| yield @by_el[el] ||= VisualTransition.new(el,@machine) }
|
87
103
|
end
|
88
104
|
def [](id)
|
89
|
-
if el=@wrap.at("transition[@ref='#{id}']")
|
90
|
-
@by_el[el] ||= VisualTransition.new(el)
|
105
|
+
if el=@wrap.at("xmlns:transition[@ref='#{id}']")
|
106
|
+
@by_el[el] ||= VisualTransition.new(el,@machine)
|
91
107
|
end
|
92
108
|
end
|
93
109
|
def length
|
94
|
-
@wrap.xpath('count(transition)').to_i
|
110
|
+
@wrap.xpath('count(xmlns:transition)').to_i
|
95
111
|
end
|
96
112
|
alias_method :count, :length
|
97
113
|
end
|
98
114
|
|
99
115
|
class UIC::Application::StateMachine::VisualState
|
100
|
-
|
116
|
+
include UIC::ElementBacked
|
117
|
+
|
118
|
+
# @!attribute ref
|
119
|
+
# @return [String] the `id` of the state in the state machine whose enter/exit will trigger the attached visual actions.
|
120
|
+
xmlattribute :ref
|
121
|
+
|
122
|
+
# @return [Nokogiri::XML::Element] the Nokogiri element in the `.uia` representing this visual state.
|
123
|
+
attr_reader :el
|
124
|
+
|
125
|
+
# @return [Application::StateMachine] the state machine containing the referenced state.
|
126
|
+
attr_reader :machine
|
127
|
+
|
128
|
+
def initialize(el,machine)
|
101
129
|
@el = el
|
130
|
+
@machine = machine
|
131
|
+
end
|
132
|
+
|
133
|
+
def enter_actions
|
134
|
+
@el.xpath('xmlns:enter/*').to_a.map{ |el| VisualAction.create(el,self) }
|
135
|
+
end
|
136
|
+
|
137
|
+
def exit_actions
|
138
|
+
@el.xpath('xmlns:exit/*').to_a.map{ |el| VisualAction.create(el,self) }
|
102
139
|
end
|
103
140
|
end
|
104
141
|
|
105
142
|
class UIC::Application::StateMachine::VisualTransition
|
106
|
-
|
143
|
+
include UIC::ElementBacked
|
144
|
+
|
145
|
+
# @!attribute ref
|
146
|
+
# @return [String] the `uic:id` of the transition that will trigger the attached visual actions.
|
147
|
+
xmlattribute :ref
|
148
|
+
|
149
|
+
def initialize(el,machine)
|
107
150
|
@el = el
|
151
|
+
@machine = machine
|
152
|
+
end
|
153
|
+
def actions
|
154
|
+
@el.xpath('./*').to_a.map{ |el| VisualAction.create(el,self) }
|
108
155
|
end
|
109
156
|
end
|
110
157
|
|
158
|
+
class UIC::Application::StateMachine::VisualAction
|
159
|
+
include UIC::ElementBacked
|
160
|
+
|
161
|
+
# @!attribute element
|
162
|
+
# @return [UIC::MetaData::AssetBase] the element in a UIC presentation affected by this action.
|
163
|
+
xmlattribute(:element, lambda{ |path,action| (action.machine.app / path) }){ |element| element.path }
|
164
|
+
|
165
|
+
# @return [Nokogiri::XML::Element] the Nokogiri element representing this action in the `.uia`.
|
166
|
+
attr_reader :el
|
111
167
|
|
168
|
+
# @return [VisualState,VisualTransition] the visual state or transition wrapping this action.
|
169
|
+
attr_reader :owner
|
170
|
+
|
171
|
+
# @return [Application::StateMachine] the state machine triggering this action.
|
172
|
+
attr_reader :machine
|
173
|
+
|
174
|
+
def self.create(el,owner)
|
175
|
+
klass = case el.name
|
176
|
+
when 'goto-slide' then GotoSlide
|
177
|
+
when 'call' then Call
|
178
|
+
when 'set-attribute' then SetAttribute
|
179
|
+
when 'fire-event' then FireEvent
|
180
|
+
else Generic
|
181
|
+
end
|
182
|
+
klass.new(el,owner)
|
183
|
+
end
|
184
|
+
|
185
|
+
def initialize(el,owner)
|
186
|
+
@el = el
|
187
|
+
@owner = owner
|
188
|
+
@machine = owner.machine
|
189
|
+
end
|
190
|
+
|
191
|
+
class UIC::Application::StateMachine::VisualAction::GotoSlide < self
|
192
|
+
# TODO: xmlattributes
|
193
|
+
end
|
194
|
+
|
195
|
+
class UIC::Application::StateMachine::VisualAction::Call < self
|
196
|
+
# TODO: xmlattributes
|
197
|
+
end
|
198
|
+
|
199
|
+
class UIC::Application::StateMachine::VisualAction::SetAttribute < self
|
200
|
+
# @!attribute attribute
|
201
|
+
# @return [String] the name of the attribute to set.
|
202
|
+
xmlattribute :attribute
|
203
|
+
|
204
|
+
# @!attribute value
|
205
|
+
# @return [String] the Lua expression to evaluate as the new value.
|
206
|
+
xmlattribute :value
|
207
|
+
end
|
208
|
+
|
209
|
+
class UIC::Application::StateMachine::VisualAction::FireEvent < self
|
210
|
+
# TODO: xmlattributes
|
211
|
+
end
|
212
|
+
|
213
|
+
class UIC::Application::StateMachine::VisualAction::Generic
|
214
|
+
# @return [Nokogiri::XML::Element] the Nokogiri element representing this action in the `.uia`.
|
215
|
+
attr_reader :el
|
216
|
+
|
217
|
+
# @return [VisualState,VisualTransition] the visual state or transition wrapping this action.
|
218
|
+
attr_reader :owner
|
219
|
+
|
220
|
+
# TODO: xmlattributes
|
221
|
+
|
222
|
+
def initialize(el,owner)
|
223
|
+
@el = el
|
224
|
+
@owner = owner
|
225
|
+
@machine = owner.machine
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
112
229
|
end
|
data/lib/ruic/version.rb
CHANGED
data/test/customclasses.ruic
CHANGED
data/test/filtering.ruic
CHANGED
data/test/futureassets.ruic
CHANGED
data/test/nonmaster.ruic
CHANGED
data/test/paths.ruic
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<UIP version="3" >
|
3
|
+
<Project >
|
4
|
+
<ProjectSettings author="" company="" presentationWidth="800" presentationHeight="480" maintainAspect="False" />
|
5
|
+
<Classes >
|
6
|
+
<Effect id="existing_001" name="existing" sourcepath=".\effects\existing.effect" />
|
7
|
+
<Effect id="missing_001" name="missing" sourcepath=".\effects\missing.effect" />
|
8
|
+
<CustomMaterial id="concrete" name="concrete" sourcepath=".\materials\concrete.material" />
|
9
|
+
<CustomMaterial id="missingcustom" name="missingcustom" sourcepath=".\materials\missing.material" />
|
10
|
+
<Behavior id="existing1" name="existing1" sourcepath=".\scripts\existing1.lua" />
|
11
|
+
<Behavior id="missing1" name="missing1" sourcepath=".\scripts\missing1.lua" />
|
12
|
+
</Classes>
|
13
|
+
<Graph >
|
14
|
+
<Scene id="Scene" >
|
15
|
+
<Behavior id="existing1_001" class="#existing1" />
|
16
|
+
<Behavior id="missing1_001" class="#missing1" />
|
17
|
+
<Layer id="Layer" >
|
18
|
+
<Camera id="Camera" />
|
19
|
+
<Light id="Light" />
|
20
|
+
<Text id="Text" />
|
21
|
+
<Text id="Text2" />
|
22
|
+
<Model id="existing" >
|
23
|
+
<Material id="Material" >
|
24
|
+
<Image id="Material_diffusemap" />
|
25
|
+
</Material>
|
26
|
+
</Model>
|
27
|
+
<Model id="missing" >
|
28
|
+
<Material id="Material_001" >
|
29
|
+
<Image id="Material_001_diffusemap" />
|
30
|
+
</Material>
|
31
|
+
</Model>
|
32
|
+
<Effect id="existing2" class="#existing_001" />
|
33
|
+
<Effect id="existing3" class="#existing_001" />
|
34
|
+
<Effect id="missing2" class="#missing_001" />
|
35
|
+
<Model id="Cube" >
|
36
|
+
<CustomMaterial id="Material_002" class="#concrete" />
|
37
|
+
</Model>
|
38
|
+
<Model id="Rectangle" >
|
39
|
+
<CustomMaterial id="concrete_001" class="#missingcustom" />
|
40
|
+
</Model>
|
41
|
+
<Group id="RoundedPlane-1" importid="__import__root__" >
|
42
|
+
<Model id="RoundedPlane" name="RoundedPlane" importid="RoundedPlane" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath=".\RoundedPlane-1\meshes\RoundedPlane.mesh#1" >
|
43
|
+
<Material id="lambert2" name="lambert2" blendmode="Normal" diffuse="1 1 1" emissivepower="0" importid="lambert2" opacity="100" specularamount="0" />
|
44
|
+
</Model>
|
45
|
+
</Group>
|
46
|
+
<Group id="MissingImport" importid="__import__root__" >
|
47
|
+
<Model id="MissingMesh" name="RoundedPlane" importid="RoundedPlane" orientation="Right Handed" position="0 0 -0" rotation="0 -0 0" rotationorder="XYZr" scale="1 1 1" sourcepath=".\models\meshes\missing.mesh#1" >
|
48
|
+
<Material id="lambert2_001" name="lambert2" blendmode="Normal" diffuse="1 1 1" emissivepower="0" importid="lambert2" opacity="100" specularamount="0" />
|
49
|
+
</Model>
|
50
|
+
</Group>
|
51
|
+
</Layer>
|
52
|
+
</Scene>
|
53
|
+
</Graph>
|
54
|
+
<Logic >
|
55
|
+
<State name="Master Slide" component="#Scene" >
|
56
|
+
<Add ref="#Layer" />
|
57
|
+
<Add ref="#Camera" />
|
58
|
+
<Add ref="#Light" />
|
59
|
+
<State id="Scene-Intro" name="Intro" >
|
60
|
+
<Add ref="#existing1_001" name="existing1" />
|
61
|
+
<Add ref="#missing1_001" name="missing1" />
|
62
|
+
<Add ref="#Text" name="WelcomeMessage" font="Arimo-Regular" position="0 90 0" size="36" textstring="Hello World! This is the Intro Slide." />
|
63
|
+
<Add ref="#Text2" name="MissingText" font="Missing" />
|
64
|
+
<Add ref="#existing" name="existing" position="-353.627 -164.545 0" scale="2.7328 2.7328 0.53375" sourcepath="#Rectangle" />
|
65
|
+
<Add ref="#Material" diffusemap="#Material_diffusemap" />
|
66
|
+
<Add ref="#Material_diffusemap" sourcepath=".\maps\existing.png" />
|
67
|
+
<Add ref="#missing" name="missing" position="291.562 -170.318 0" scale="2.432 2.432 0.475" sourcepath="#Rectangle" />
|
68
|
+
<Add ref="#Material_001" diffusemap="#Material_001_diffusemap" />
|
69
|
+
<Add ref="#Material_001_diffusemap" sourcepath=".\maps\missing.png" />
|
70
|
+
<Add ref="#existing2" name="existing2" />
|
71
|
+
<Add ref="#existing3" name="existing3" NoiseSamp=".\maps\missing2.png" />
|
72
|
+
<Add ref="#missing2" name="missing2" />
|
73
|
+
<Add ref="#Cube" name="Cube" position="373.834 191.969 0" rotation="-41.4279 82.585 -28.6931" sourcepath="#Cube" />
|
74
|
+
<Add ref="#Material_002" name="Material" bump_texture=".\maps\missing.png" diffuse_texture=".\maps\existing.png" />
|
75
|
+
<Add ref="#Rectangle" name="Rectangle" position="-375.278 223.723 0" sourcepath="#Rectangle" />
|
76
|
+
<Add ref="#concrete_001" name="MissingCustom" />
|
77
|
+
<Add ref="#RoundedPlane-1" name="RoundedPlane-1" importfile=".\RoundedPlane-1\RoundedPlane-1.import" sourcepath=".\RoundedPlane-1\RoundedPlane-1.import" />
|
78
|
+
<Add ref="#RoundedPlane" importfile=".\RoundedPlane-1\RoundedPlane-1.import" />
|
79
|
+
<Add ref="#lambert2" importfile=".\RoundedPlane-1\RoundedPlane-1.import" />
|
80
|
+
<Add ref="#MissingImport" name="MissingImport" importfile=".\RoundedPlane-1\RoundedPlane-1.import" position="20 0 0" sourcepath=".\RoundedPlane-1\RoundedPlane-1.import" />
|
81
|
+
<Add ref="#MissingMesh" name="MissingMesh" importfile=".\RoundedPlane-1\RoundedPlane-1.import" />
|
82
|
+
<Add ref="#lambert2_001" importfile=".\RoundedPlane-1\RoundedPlane-1.import" />
|
83
|
+
</State>
|
84
|
+
</State>
|
85
|
+
</Logic>
|
86
|
+
</Project>
|
87
|
+
</UIP>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<application scalemode="center" watermark-location="1.0 1.0" xmlns="http://nvidia.com/uicomposer">
|
3
|
+
<assets initial="main">
|
4
|
+
<behavior src="scripts/existing1.lua" />
|
5
|
+
<behavior src="scripts/missing1.lua" />
|
6
|
+
<statemachine id="s1" src="states/existing.scxml" />
|
7
|
+
<statemachine id="s2" src="states/missing.scxml" />
|
8
|
+
<presentation id="main" src="Existing.uip" />
|
9
|
+
<presentation id="sub" src="Missing.uip" />
|
10
|
+
<renderplugin id="rp" src="scripts/missing.so" />
|
11
|
+
</assets>
|
12
|
+
<statemachine ref="#s1">
|
13
|
+
<visual-states>
|
14
|
+
<state ref="Initial"><enter>
|
15
|
+
<set-attribute element="main:Scene.Layer.existing.Material.Image" attribute="sourcepath" value="'./maps/existing2.png'" />
|
16
|
+
</enter><exit>
|
17
|
+
<set-attribute element="main:Scene.Layer.existing.Material.Image" attribute="sourcepath" value="'.\\maps\\missing3.png'" />
|
18
|
+
</exit></state>
|
19
|
+
</visual-states>
|
20
|
+
</statemachine>
|
21
|
+
</application>
|