Class: RubySketch::Context

Inherits:
Processing::Context
  • Object
show all
Includes:
GraphicsContext
Defined in:
lib/rubysketch/context.rb

Constant Summary collapse

Sprite =
RubySketch::Sprite
SpriteWorld =
RubySketch::SpriteWorld
Circle =
RubySketch::Circle
Sound =
RubySketch::Sound

Instance Method Summary collapse

Methods included from GraphicsContext

#sprite

Instance Method Details

#addSprite(array = nil, sprite) ⇒ Sprite

Adds sprite to the physics engine.

Parameters:

  • array (Array) (defaults to: nil)

    user array to store the sprite

  • sprite (Sprite)

    sprite object

Returns:

  • (Sprite)

    the added sprite



255
256
257
# File 'lib/rubysketch/context.rb', line 255

def addSprite(array = nil, sprite)
  @world__.addSprite array, sprite
end

#addWorld(*worlds) ⇒ SpriteWorld

Adds worlds

Parameters:

Returns:



286
287
288
289
# File 'lib/rubysketch/context.rb', line 286

def addWorld(*worlds)
  worlds.each {@window__.add_overlay _1.getInternal__}
  worlds.first
end

#animate(seconds, id: nextTimerID__, easing: :expoOut, &block) ⇒ Object

Animate with easing functions

Parameters:

  • seconds (Numeric)

    Animation duration

  • id (Object) (defaults to: nextTimerID__)

    Timer object identifier

  • easing (Symbol) (defaults to: :expoOut)

    Easing function name

Returns:

  • (Object)

    Timer object identifier



159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/rubysketch/context.rb', line 159

def animate(seconds, id: nextTimerID__, easing: :expoOut, &block)
  fun   = EASINGS[easing] or raise "'#{easing}' easing function not found"
  start = Time.now.to_f
  eachDrawBlock = lambda do
    t = (Time.now.to_f - start) / seconds
    if t >= 1.0
      block.call fun.call(1.0), true
    else
      block.call fun.call(t), false
      setTimeout id: id, &eachDrawBlock
    end
  end
  setTimeout id: id, &eachDrawBlock
end

#animateValue(seconds, from:, to:, id: nextTimerID__, easing: :expoOut, &block) ⇒ Object

Animate value with easing functions

Parameters:

  • seconds (Numeric)

    Animation duration

  • from (Numeric, Vector)

    Value at the beggining of the animation

  • to (Numeric, Vector)

    Value at the end of the animation

  • id (Object) (defaults to: nextTimerID__)

    Timer object identifier

  • easing (Symbol) (defaults to: :expoOut)

    Easing function name

Returns:

  • (Object)

    Timer object identifier



184
185
186
187
188
189
190
191
192
193
194
# File 'lib/rubysketch/context.rb', line 184

def animateValue(seconds, from:, to:, id: nextTimerID__, easing: :expoOut, &block)
  if from.is_a? Vector
    animate seconds, id: id, easing: easing do |t, finished|
      block.call Vector.lerp(from, to, t), finished
    end
  else
    animate seconds, id: id, easing: easing do |t, finished|
      block.call        lerp(from, to, t), finished
    end
  end
end

#clearTimer(id) ⇒ nil Also known as: clearTimeout, clearInterval

Stops timeout or interval timer by id

Parameters:

  • id (Object)

    The identifier of timeout or interval timer to stop

Returns:

  • (nil)

    nil



127
128
129
130
# File 'lib/rubysketch/context.rb', line 127

def clearTimer(id)
  [@timers__, @firingTimers__].each {|timers| timers.delete id}
  nil
end

#createSprite(x, y, w, h) ⇒ Sprite #createSprite(image: img) ⇒ Sprite #createSprite(x, y, image: img) ⇒ Sprite #createSprite(x, y, image: img, offset: off) ⇒ Sprite #createSprite(x, y, image: img, shape: shp) ⇒ Sprite #createSprite(x, y, image: img, offset: off, shape: shp) ⇒ Sprite #createSprite(x, y, shape: shp) ⇒ Sprite

Creates a new sprite and add it to physics engine.

Overloads:

  • #createSprite(x, y, w, h) ⇒ Sprite

    pos(x, y), size: [w, h]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • w (Numeric)

      width of the sprite

    • h (Numeric)

      height of the sprite

  • #createSprite(image: img) ⇒ Sprite

    pos: [0, 0], size: [image.width, image.height]

    Parameters:

    • img (Image)

      sprite image

  • #createSprite(x, y, image: img) ⇒ Sprite

    pos: [x, y], size: [image.width, image.height]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • img (Image)

      sprite image

  • #createSprite(x, y, image: img, offset: off) ⇒ Sprite

    pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • img (Image)

      sprite image

    • off (Vector)

      offset of the sprite image

  • #createSprite(x, y, image: img, shape: shp) ⇒ Sprite

    pos: [x, y], size: [image.width, image.height]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • img (Image)

      sprite image

  • #createSprite(x, y, image: img, offset: off, shape: shp) ⇒ Sprite

    pos: [x, y], size: [image.width, image.height], offset: [offset.x, offset.x]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • img (Image)

      sprite image

    • off (Vector)

      offset of the sprite image

    • shp (Shape)

      shape of the sprite for physics calculations

  • #createSprite(x, y, shape: shp) ⇒ Sprite

    pos: [x, y], size: [shape.width, shape.height]

    Parameters:

    • x (Numeric)

      x of the sprite position

    • y (Numeric)

      y of the sprite position

    • shp (Shape)

      shape of the sprite for physics calculations

Returns:

  • (Sprite)

    the new sprite object



244
245
246
# File 'lib/rubysketch/context.rb', line 244

def createSprite(*args, **kwargs)
  @world__.createSprite(*args, context: self, **kwargs)
end

#createWorld(pixelsPerMeter: 0) ⇒ SpriteWorld

Creates a new world to calculate the physics of sprites.

Returns:



276
277
278
# File 'lib/rubysketch/context.rb', line 276

def createWorld(pixelsPerMeter: 0)
  addWorld SpriteWorld.new pixelsPerMeter: pixelsPerMeter
end

#gravity(vec) ⇒ nil #gravity(ary) ⇒ nil #gravity(x, y) ⇒ nil

Sets gravity for the physics engine.

Overloads:

  • #gravity(vec) ⇒ nil

    Parameters:

    • vec (Vector)

      gracity vector

  • #gravity(ary) ⇒ nil

    Parameters:

    • ary (Array<Numeric>)

      gravityX, gravityY

  • #gravity(x, y) ⇒ nil

    Parameters:

    • x (Numeric)

      x of gravity vector

    • y (Numeric)

      y of gracity vector

Returns:

  • (nil)

    nil



350
351
352
# File 'lib/rubysketch/context.rb', line 350

def gravity(...)
  @world__.gravity(...)
end

#loadSound(path) ⇒ Sound

Loads sound file.

Parameters:

  • path (String)

    path for sound file

Returns:

  • (Sound)

    sound object



308
309
310
# File 'lib/rubysketch/context.rb', line 308

def loadSound(path)
  Sound.load path
end

#noteFrequencyNumeric

Returns the last note frequency that was pressed or released.

Returns:

  • (Numeric)

    last note frequency



324
325
326
# File 'lib/rubysketch/context.rb', line 324

def noteFrequency()
  @noteFrequency__
end

#noteNumberNumeric

Returns the last note number that was pressed or released.

Returns:

  • (Numeric)

    last note number



316
317
318
# File 'lib/rubysketch/context.rb', line 316

def noteNumber()
  @noteNumber__
end

#notePressed(&block) ⇒ nil

Defines notePressed block.

Returns:

  • (nil)

    nil



62
63
64
65
# File 'lib/rubysketch/context.rb', line 62

def notePressed(&block)
  @notePressedBlock__ = block if block
  nil
end

#noteReleased(&block) ⇒ nil

Defines noteReleased block.

Returns:

  • (nil)

    nil



71
72
73
74
# File 'lib/rubysketch/context.rb', line 71

def noteReleased(&block)
  @noteReleasedBlock__ = block if block
  nil
end

#noteVelocityNumeric

Returns the last note velocity that was pressed or released.

Returns:

  • (Numeric)

    last note velocity



332
333
334
# File 'lib/rubysketch/context.rb', line 332

def noteVelocity()
  @noteVelocity__
end

#removeSprite(array = nil, sprite) ⇒ Sprite

Removes sprite from the physics engine.

Parameters:

  • array (Array) (defaults to: nil)

    user array to remove the sprite

  • sprite (Sprite)

    sprite object

Returns:

  • (Sprite)

    the removed sprite



266
267
268
# File 'lib/rubysketch/context.rb', line 266

def removeSprite(array = nil, sprite)
  @world__.removeSprite array, sprite
end

#removeWorld(*worlds) ⇒ SpriteWorld

Removes worlds

Parameters:

Returns:



297
298
299
300
# File 'lib/rubysketch/context.rb', line 297

def removeWorld(*worlds)
  worlds.each {@window__.remove_overlay _1.getInternal__}
  worlds.first
end

#setInterval(seconds = 0, *args, id: nextTimerID__, now: false, &block) ⇒ Object

Repeats block call at each interval

Parameters:

  • seconds (Numeric) (defaults to: 0)

    Each interval duration

  • args (Array)

    Arguments passed to block

  • id (Object) (defaults to: nextTimerID__)

    Timer object identifier

  • now (Boolean) (defaults to: false)

    Wheather or not to call the block right now

Returns:

  • (Object)

    Timer object identifier



98
99
100
101
102
103
# File 'lib/rubysketch/context.rb', line 98

def setInterval(seconds = 0, *args, id: nextTimerID__, now: false, &block)
  return unless block
  time = Time.now.to_f
  block.call(*args) if now
  setInterval__ id, time, seconds, args, &block
end

#setTimeout(seconds = 0, *args, id: nextTimerID__, &block) ⇒ Object

Calls block after specified seconds

Parameters:

  • seconds (Numeric) (defaults to: 0)

    Time at which the block is called

  • args (Array)

    Arguments passed to block

  • id (Object) (defaults to: nextTimerID__)

    Timer object identifier

Returns:

  • (Object)

    Timer object identifier



84
85
86
87
# File 'lib/rubysketch/context.rb', line 84

def setTimeout(seconds = 0, *args, id: nextTimerID__, &block)
  return unless block
  setTimeout__ id, Time.now.to_f + seconds, args, &block
end

#vibratenil

Generates haptic feedback

Returns:

  • (nil)

    nil



358
359
360
# File 'lib/rubysketch/context.rb', line 358

def vibrate()
  Reflex.vibrate
end