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



208
209
210
# File 'lib/rubysketch/context.rb', line 208

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

#addWorld(*worlds) ⇒ SpriteWorld

Adds worlds

Parameters:

Returns:



239
240
241
242
# File 'lib/rubysketch/context.rb', line 239

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



112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/rubysketch/context.rb', line 112

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



137
138
139
140
141
142
143
144
145
146
147
# File 'lib/rubysketch/context.rb', line 137

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



80
81
82
83
# File 'lib/rubysketch/context.rb', line 80

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



197
198
199
# File 'lib/rubysketch/context.rb', line 197

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:



229
230
231
# File 'lib/rubysketch/context.rb', line 229

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



279
280
281
# File 'lib/rubysketch/context.rb', line 279

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

#loadSound(path) ⇒ Sound

Loads sound file.

Parameters:

  • path (String)

    path for sound file

Returns:

  • (Sound)

    sound object



261
262
263
# File 'lib/rubysketch/context.rb', line 261

def loadSound(path)
  Sound.load path
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



219
220
221
# File 'lib/rubysketch/context.rb', line 219

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

#removeWorld(*worlds) ⇒ SpriteWorld

Removes worlds

Parameters:

Returns:



250
251
252
253
# File 'lib/rubysketch/context.rb', line 250

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



51
52
53
54
55
56
# File 'lib/rubysketch/context.rb', line 51

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



37
38
39
40
# File 'lib/rubysketch/context.rb', line 37

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



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

def vibrate()
  Reflex.vibrate
end