Skip to content

Instantly share code, notes, and snippets.

@djfumberger
Created March 8, 2016 00:28
Show Gist options
  • Save djfumberger/f9c4dc43ddad31dcfd86 to your computer and use it in GitHub Desktop.
Save djfumberger/f9c4dc43ddad31dcfd86 to your computer and use it in GitHub Desktop.
Zara Blob
class module.exports extends Layer
constructor:(options)->
options ?= {}
super options
@.options = options
@.settings = options.settings ? {}
@.settings.numberOfLayers ?= 20
@.settings.rotation ?= 45
@.settings.time ?= { start: 3.0, increment : 0.5 }
@.settings.offset ?= { x: 1, y: 20 }
@.settings.spread ?= { x: 5, y: 5 }
@.settings.spreadAlternateDirection ?= true
@.settings.alternateDirection ?= true
@.settings.types ?= []
@.backgroundColor = ""
@.layers = []
@.setup()
setup: () ->
rotation = 0
time = @.settings.time.start
spreadIncrement = { x: @.settings.spread.x / @.settings.numberOfLayers, y: @.settings.spread.y / @.settings.numberOfLayers }
spreadOffset = { x: -(@.settings.spread.x / 2.0), y: -(@.settings.spread.y / 2.0) }
for i in [1..@.settings.numberOfLayers]
# Find the current layer def for the index
layerDefinition = { }
for definition in @.settings.types
if i >= (definition.idx * @.settings.numberOfLayers)
layerDefinition = definition
# Container for the image
layerContainer = new Layer
x: 0
y: 0
backgroundColor: ""
width: @.width
height: @.height
superLayer: @
@.layers.push(layerContainer)
# Image layer
layer = layerDefinition.layer()
layer.width = @.width
layer.height = @.height
layer.superLayer = layerContainer
layer.visible = true
layer.x += @.settings.offset.x
layer.y += @.settings.offset.y
# Layer spread
spreadDirection = 1
if @.settings.spreadAlternateDirection
spreadDirection = -1 if i % 2 == 1
spreadOffset.x += spreadIncrement.x
spreadOffset.y += spreadIncrement.y
layerContainer.x = (spreadOffset.x * spreadDirection)
layerContainer.y = (spreadOffset.y * spreadDirection)
# Update rotation time and direction
rotation += @.settings.rotation
time += @.settings.time.increment
direction = 1
if @.settings.alternateDirection
direction = -1 if i % 2 == 1
# Animate rotation
layerContainer.rotation = rotation
layerContainer.animate
repeat: 100000
curve: "linear"
time: time
properties:
rotation: ( (direction * 360) + rotation)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment