Class: Stagecraft::PhysicsBinding
- Inherits:
-
Object
- Object
- Stagecraft::PhysicsBinding
- Defined in:
- lib/stagecraft/physics_binding.rb
Defined Under Namespace
Classes: Entry
Instance Method Summary collapse
- #bind(node, body) ⇒ Object
-
#initialize ⇒ PhysicsBinding
constructor
A new instance of PhysicsBinding.
- #sync!(alpha = 1.0) ⇒ Object
- #unbind(node) ⇒ Object
Constructor Details
#initialize ⇒ PhysicsBinding
Returns a new instance of PhysicsBinding.
7 8 9 |
# File 'lib/stagecraft/physics_binding.rb', line 7 def initialize @entries = [] end |
Instance Method Details
#bind(node, body) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/stagecraft/physics_binding.rb', line 11 def bind(node, body) raise ArgumentError, "physics binding requires a Stagecraft::Node" unless node.is_a?(Node) validate_body!(body) unbind(node) @entries << Entry.new( node:, body:, previous_position: vector(body.position), previous_rotation: quaternion(body.rotation) ) self end |
#sync!(alpha = 1.0) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/stagecraft/physics_binding.rb', line 30 def sync!(alpha = 1.0) amount = Float(alpha).clamp(0.0, 1.0) @entries.map! do |entry| current_position = vector(entry.body.position) current_rotation = quaternion(entry.body.rotation) entry.node.position.set(entry.previous_position.lerp(current_position, amount)) entry.node.rotation.set(entry.previous_rotation.slerp(current_rotation, amount)) Entry.new( node: entry.node, body: entry.body, previous_position: current_position, previous_rotation: current_rotation ) end self end |
#unbind(node) ⇒ Object
25 26 27 28 |
# File 'lib/stagecraft/physics_binding.rb', line 25 def unbind(node) @entries.reject! { |entry| entry.node.equal?(node) } self end |