Class: UIC::Application::StateMachine

Inherits:
StateMachine show all
Extended by:
ElementBacked::ClassMethods
Includes:
ElementBacked
Defined in:
lib/ruic/statemachine.rb

Defined Under Namespace

Classes: VisualAction, VisualState, VisualStates, VisualTransition, VisualTransitions

Instance Attribute Summary collapse

Attributes included from ElementBacked

#el, #owner

Attributes included from XMLFileBacked

#doc

Attributes included from FileBacked

#file, #file_content

Instance Method Summary collapse

Methods included from ElementBacked::ClassMethods

xmlattribute

Methods inherited from StateMachine

#inspect

Methods included from XMLFileBacked

#file=, #save!, #save_as, #to_xml

Methods included from FileBacked

#absolute_path, #file_found?, #filename, #relative_path, #save!, #save_as

Constructor Details

#initialize(application, el) ⇒ StateMachine

Returns a new instance of StateMachine.



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/ruic/statemachine.rb', line 24

def initialize(application,el)
  self.owner = application
  self.el    = el

  @visuals = app.doc.at( "/xmlns:application/xmlns:statemachine[@ref='##{id}']/xmlns:visual-states" )
  @visuals ||= app.doc.root.add_child("<statemachine ref='##{id}'><visual-states/></statemachine>")
  @visual_states      = VisualStates.new( self, @visuals )
  @visual_transitions = VisualTransitions.new( self, @visuals )

  self.file  = application.absolute_path(src)
end

Instance Attribute Details

#visual_statesObject (readonly)

Returns the value of attribute visual_states.



22
23
24
# File 'lib/ruic/statemachine.rb', line 22

def visual_states
  @visual_states
end

#visual_transitionsObject (readonly)

Returns the value of attribute visual_transitions.



23
24
25
# File 'lib/ruic/statemachine.rb', line 23

def visual_transitions
  @visual_transitions
end

Instance Method Details

#image_usageObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ruic/statemachine.rb', line 37

def image_usage
  (
    visual_states.flat_map{ |vs| vs.enter_actions.flat_map{ |a| [a,vs] } } +
    visual_states.flat_map{ |vs| vs.exit_actions.flat_map{ |a| [a,vs] } } +
    visual_transitions.flat_map{ |vt| vt.actions.flat_map{ |a| [a,vt] } }
  ).select do |visual_action,owner|
    visual_action.is_a?(UIC::Application::StateMachine::VisualAction::SetAttribute) &&
    visual_action.value[/\A(['"])[^'"]+\1\Z/] && # ensure that it's a simple string value

    visual_action.element.properties[ visual_action.attribute ].is_a?( UIC::Property::Image )
  end.group_by do |visual_action,owner|
    app.absolute_path( visual_action.value[/\A(['"])([^'"]+)\1\Z/,2] )
  end.each do |image_path,array|
    array.map!(&:last)
  end
end

#referenced_filesObject



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ruic/statemachine.rb', line 60

def referenced_files
  visual_actions.map do |action|
    if action.is_a?(VisualAction::SetAttribute) && (el=action.element) && (path=action.value[ /\A(['"])([^'"]+)\1\Z/, 2 ])
      type=el.properties[ action.attribute ].type
      if action.attribute=='sourcepath' || action.attribute=='importfile' || type=='Texture'
        app.absolute_path( path.sub(/#.+$/,'') )
      elsif type=='Font'
        app.absolute_path( File.join( 'fonts', path.sub(/$/,'.ttf') ) )
      end
    end
  end.compact.uniq
end

#visual_actionsArray<VisualAction>

Returns all visual actions in the .uia for this state machine.

Returns:

  • (Array<VisualAction>)

    all visual actions in the .uia for this state machine.



54
55
56
57
58
# File 'lib/ruic/statemachine.rb', line 54

def visual_actions
  visual_states.flat_map(&:enter_actions) +
  visual_states.flat_map(&:exit_actions) +
  visual_transitions.flat_map(&:actions)
end