From d2962105772fbdc548118bd65cd5bb4934e66085 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Thu, 4 Sep 2014 21:48:29 +0200 Subject: [PATCH 1/1] Initial import. --- .gitattributes | 2 + .gitignore | 7 + .projectile | 2 + Makefile | 102 + README.md | 14 + rules/git.mk | 13 + rules/icons.mk | 39 + rules/javascript.mk | 62 + rules/node-webkit.mk | 91 + rules/pngcrush.mk | 20 + rules/programs.mk | 13 + src/data/images/.gitignore | 5 + src/data/images/book.xcf.gz | Bin 0 -> 34216 bytes src/data/images/circle-inner.png | Bin 0 -> 312 bytes src/data/images/circle-outer-ee.png | Bin 0 -> 402 bytes src/data/images/circle-outer.png | Bin 0 -> 343 bytes src/data/images/circle-rim.png | Bin 0 -> 436 bytes src/data/images/circle.xcf.gz | Bin 0 -> 1439 bytes src/data/images/hand.png | Bin 0 -> 384 bytes .../images/icons.iconset/icon_128x128.png | Bin 0 -> 624 bytes .../images/icons.iconset/icon_128x128@2x.png | Bin 0 -> 1139 bytes src/data/images/icons.iconset/icon_16x16.png | Bin 0 -> 207 bytes .../images/icons.iconset/icon_256x256.png | Bin 0 -> 1139 bytes src/data/images/icons.iconset/icon_32x32.png | Bin 0 -> 366 bytes .../images/icons.iconset/icon_32x32@2x.png | Bin 0 -> 433 bytes src/data/images/icons.iconset/icon_64x64.png | Bin 0 -> 433 bytes .../images/icons.iconset/icon_64x64@2x.png | Bin 0 -> 624 bytes src/data/images/sigils.png | Bin 0 -> 391 bytes src/data/license.txt | 26 + src/data/shaders/noise.glsl | 180 + src/data/shaders/noisyblocks.frag | 23 + src/data/shaders/noisyquads.vert | 26 + src/data/sound/book-appear.wav | Bin 0 -> 50896 bytes src/data/sound/book-dismiss.wav | Bin 0 -> 36654 bytes src/data/sound/click-1.wav | Bin 0 -> 914 bytes src/data/sound/click-2.wav | Bin 0 -> 1014 bytes src/data/sound/clicking.wav | Bin 0 -> 26544 bytes src/data/sound/page-turn-1.wav | Bin 0 -> 39366 bytes src/data/sound/page-turn-2.wav | Bin 0 -> 27154 bytes src/data/sound/page-turn-3.wav | Bin 0 -> 35298 bytes src/data/sound/regear.wav | Bin 0 -> 81464 bytes src/data/sound/slam.wav | Bin 0 -> 49718 bytes src/data/sound/switch.wav | Bin 0 -> 45256 bytes src/data/sound/tick.wav | Bin 0 -> 3380 bytes src/data/sound/tock.wav | Bin 0 -> 6220 bytes src/data/sound/winding.wav | Bin 0 -> 78072 bytes src/ext/FiraMono-Bold.woff | Bin 0 -> 70896 bytes src/ext/FiraMono-Regular.woff | Bin 0 -> 66176 bytes src/ext/FiraSans-Bold.woff | Bin 0 -> 88524 bytes src/ext/FiraSans-BoldItalic.woff | Bin 0 -> 93844 bytes src/ext/FiraSans-Italic.woff | Bin 0 -> 88544 bytes src/ext/FiraSans-Regular.woff | Bin 0 -> 83492 bytes src/ext/FiraSans-UltraLight.woff | Bin 0 -> 83836 bytes src/ext/FiraSans-UltraLightItalic.woff | Bin 0 -> 88260 bytes src/ext/font-awesome.woff | Bin 0 -> 83760 bytes src/ext/gamepad.js | 172 + src/ext/gl-matrix.js | 4248 +++++++++++++++++ src/ext/hammer.js | 1545 ++++++ src/ext/string-lerp.js | 307 ++ src/index.html | 203 + src/pwl6.css | 65 + src/pwl6.js | 2149 +++++++++ src/yuu/audio.js | 524 ++ src/yuu/ce.js | 646 +++ src/yuu/core.js | 896 ++++ src/yuu/data/license.txt | 507 ++ src/yuu/data/shaders/color.frag | 12 + src/yuu/data/shaders/default.frag | 15 + src/yuu/data/shaders/default.vert | 22 + src/yuu/data/yuu.css | 364 ++ src/yuu/director.js | 696 +++ src/yuu/gfx.js | 665 +++ src/yuu/input.js | 268 ++ src/yuu/pre.js | 338 ++ src/yuu/rdr.js | 426 ++ src/yuu/storage.js | 188 + src/yuu/yT.js | 364 ++ src/yuu/yf.js | 578 +++ test/jshint.config | 34 + test/spec/yuu/core.js | 105 + test/spec/yuu/input.js | 146 + test/spec/yuu/storage.js | 113 + test/spec/yuu/yT.js | 227 + test/spec/yuu/yf.js | 227 + tools/LICENSE.rcedit | 57 + tools/composer/composer.js | 85 + tools/composer/index.html | 35 + tools/generate-appcache | 52 + tools/generate-nw | 89 + tools/generate-osx-app | 59 + tools/nw-linux-wrapper | 25 + tools/rcedit.exe | Bin 0 -> 53248 bytes 92 files changed, 17077 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .projectile create mode 100644 Makefile create mode 100644 README.md create mode 100644 rules/git.mk create mode 100644 rules/icons.mk create mode 100644 rules/javascript.mk create mode 100644 rules/node-webkit.mk create mode 100644 rules/pngcrush.mk create mode 100644 rules/programs.mk create mode 100644 src/data/images/.gitignore create mode 100644 src/data/images/book.xcf.gz create mode 100644 src/data/images/circle-inner.png create mode 100644 src/data/images/circle-outer-ee.png create mode 100644 src/data/images/circle-outer.png create mode 100644 src/data/images/circle-rim.png create mode 100644 src/data/images/circle.xcf.gz create mode 100644 src/data/images/hand.png create mode 100644 src/data/images/icons.iconset/icon_128x128.png create mode 100644 src/data/images/icons.iconset/icon_128x128@2x.png create mode 100644 src/data/images/icons.iconset/icon_16x16.png create mode 100644 src/data/images/icons.iconset/icon_256x256.png create mode 100644 src/data/images/icons.iconset/icon_32x32.png create mode 100644 src/data/images/icons.iconset/icon_32x32@2x.png create mode 100644 src/data/images/icons.iconset/icon_64x64.png create mode 100644 src/data/images/icons.iconset/icon_64x64@2x.png create mode 100644 src/data/images/sigils.png create mode 100644 src/data/license.txt create mode 100644 src/data/shaders/noise.glsl create mode 100644 src/data/shaders/noisyblocks.frag create mode 100644 src/data/shaders/noisyquads.vert create mode 100644 src/data/sound/book-appear.wav create mode 100644 src/data/sound/book-dismiss.wav create mode 100644 src/data/sound/click-1.wav create mode 100644 src/data/sound/click-2.wav create mode 100644 src/data/sound/clicking.wav create mode 100644 src/data/sound/page-turn-1.wav create mode 100644 src/data/sound/page-turn-2.wav create mode 100644 src/data/sound/page-turn-3.wav create mode 100644 src/data/sound/regear.wav create mode 100644 src/data/sound/slam.wav create mode 100644 src/data/sound/switch.wav create mode 100644 src/data/sound/tick.wav create mode 100644 src/data/sound/tock.wav create mode 100644 src/data/sound/winding.wav create mode 100644 src/ext/FiraMono-Bold.woff create mode 100644 src/ext/FiraMono-Regular.woff create mode 100644 src/ext/FiraSans-Bold.woff create mode 100644 src/ext/FiraSans-BoldItalic.woff create mode 100644 src/ext/FiraSans-Italic.woff create mode 100644 src/ext/FiraSans-Regular.woff create mode 100644 src/ext/FiraSans-UltraLight.woff create mode 100644 src/ext/FiraSans-UltraLightItalic.woff create mode 100644 src/ext/font-awesome.woff create mode 100644 src/ext/gamepad.js create mode 100644 src/ext/gl-matrix.js create mode 100644 src/ext/hammer.js create mode 100644 src/ext/string-lerp.js create mode 100644 src/index.html create mode 100644 src/pwl6.css create mode 100644 src/pwl6.js create mode 100644 src/yuu/audio.js create mode 100644 src/yuu/ce.js create mode 100644 src/yuu/core.js create mode 100644 src/yuu/data/license.txt create mode 100644 src/yuu/data/shaders/color.frag create mode 100644 src/yuu/data/shaders/default.frag create mode 100644 src/yuu/data/shaders/default.vert create mode 100644 src/yuu/data/yuu.css create mode 100644 src/yuu/director.js create mode 100644 src/yuu/gfx.js create mode 100644 src/yuu/input.js create mode 100644 src/yuu/pre.js create mode 100644 src/yuu/rdr.js create mode 100644 src/yuu/storage.js create mode 100644 src/yuu/yT.js create mode 100644 src/yuu/yf.js create mode 100644 test/jshint.config create mode 100644 test/spec/yuu/core.js create mode 100644 test/spec/yuu/input.js create mode 100644 test/spec/yuu/storage.js create mode 100644 test/spec/yuu/yT.js create mode 100644 test/spec/yuu/yf.js create mode 100644 tools/LICENSE.rcedit create mode 100644 tools/composer/composer.js create mode 100644 tools/composer/index.html create mode 100755 tools/generate-appcache create mode 100755 tools/generate-nw create mode 100755 tools/generate-osx-app create mode 100755 tools/nw-linux-wrapper create mode 100644 tools/rcedit.exe diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5966153 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +.gitattributes export-ignore +.gitignore export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..17918bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*~ +\#* +.DS_Store +node_modules +build +node-webkit + diff --git a/.projectile b/.projectile new file mode 100644 index 0000000..7865c8b --- /dev/null +++ b/.projectile @@ -0,0 +1,2 @@ +-/node_modules +-/node-webkit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..06f7e3f --- /dev/null +++ b/Makefile @@ -0,0 +1,102 @@ +#!/usr/bin/make -f + +node-webkit-version := 0.10.2 +node-webkit-version-win-ia32.zip := 0.8.6 + +.DELETE_ON_ERROR: +include rules/programs.mk +include rules/javascript.mk +include rules/icons.mk +include rules/git.mk +include rules/node-webkit.mk +include rules/pngcrush.mk + +.PHONY: all check distclean lint test dist clean serve + +APPLICATION := pwl6 +DISTDIR := build/dist +VERSION := $(call git-describe) +DISTROOT := $(DISTDIR)/$(APPLICATION)-$(VERSION) + +FIND_FILES := -type f ! -name '.*' +FIND_JS := -type f -name '*.js' + +SOURCES := $(shell cd src && find . $(FIND_FILES)) +MY_SOURCES := $(shell cd src && find . $(FIND_JS) -not -path './ext/*') + +TEST_SOURCES := $(shell find test/spec $(FIND_JS)) + +LINT_TARGETS := $(call jshint-stampify,$(MY_SOURCES)) +TEST_TARGETS := $(call jstest-stampify,$(TEST_SOURCES)) + +JSHINTCONFIG := test/jshint.config +JSTEST_NODE_PATH := src +VPATH := src + +ICONSETS := $(shell find src -type d -name '*.iconset') +ICONS := $(ICONSETS:.iconset=.icns) $(ICONSETS:.iconset=.ico) + +IMAGEGZSRC := $(shell find src -type f -name '*.xcf.gz') +IMAGESRC := $(shell find src -type f -name '*.xcf') +IMAGES := $(IMAGEGZSRC:.xcf.gz=.png) $(IMAGESRC:.xcf=.png) + +BUILT := $(ICONS) $(IMAGES) + +HTTP_SERVER_PORT ?= 8000 + +all: check $(BUILT) $(call pngcrush-stampify,$(IMAGES)) + +$(DISTDIR): + mkdir -p $@ + +dist: $(addprefix $(DISTROOT),-src.zip -src.tar.gz .appcache .nw -osx-ia32.zip -osx-x64.zip -linux-ia32.tar.gz -linux-x64.tar.gz -win-ia32.zip) + +test/spec/%.js: %.js + touch $@ + +lint: $(LINT_TARGETS) + +test: $(TEST_TARGETS) + +check: lint test + +serve: | $(npmbindir)/http-server + $(npmbindir)/http-server $(@D) -p $(HTTP_SERVER_PORT) -c-1 + +clean: + $(RM) $(IMAGES) + $(RM) $(ICONS) + $(RM) -r build + +distclean: clean + $(RM) -r node_modules + $(RM) $(node-webkit-archives) + +$(DISTROOT)-src.zip $(DISTROOT)-src.tar.gz: | .git + mkdir -p $(@D) + $(call git-archive,$@,$(notdir $(DISTROOT))/) + +$(DISTROOT).bare.zip: | .git + $(RM) $@ + $(RM) -r $@.tmp + mkdir -p $@.tmp + cd src && $(GIT) archive $(call git-describe) . | tar -x -C ../$@.tmp + $(MAKE) $(BUILT:src/%=$@.tmp/%) + $(RM) $(IMAGESRC:src/%=$@.tmp/%) $(IMAGEGZSRC:src/%=$@.tmp/%) + cd $@.tmp && $(ZIP) ../$(@F) -r . + $(RM) -r $@.tmp + +%.appcache: %.bare.zip tools/generate-appcache + $(RM) -r $@.tmp $@ + $(UNZIP) -d $@.tmp $< + tools/generate-appcache $@.tmp + mv $@.tmp $@ + +# Python's zipfile module generates zipfiles that node-webkit cannot +# read, so delegate to a real zip tool. +%.nw: %.bare.zip tools/generate-nw + $(RM) -r $@ $@.tmp + $(UNZIP) -d $@.tmp $< + tools/generate-nw $@.tmp + cd $@.tmp && $(ZIP) -r ../$(@F) . + $(RM) -r $@.tmp diff --git a/README.md b/README.md new file mode 100644 index 0000000..c949cec --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Yuu - a WebGL game library + +Software developers do their best now and are preparing. Please wait +warmly until it is ready. + +* * * + +Here are some reasons to avoid this library for now: + +* There's no real documentation. There's no API stability promises. +* No one has actually made a game in it. +* There's no draw batching. Each quad is its own draw call. +* In fact, there's been no optimization in general. +* Before I wrote this I'd never once used the JavaScript `new` keyword. diff --git a/rules/git.mk b/rules/git.mk new file mode 100644 index 0000000..e8ceb78 --- /dev/null +++ b/rules/git.mk @@ -0,0 +1,13 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +GIT ?= git +git-describe = $(shell $(GIT) describe --tags --always $1) + +define git-archive +$(GIT) archive --output '$1' $(if $2,--prefix '$2') '$(call git-describe,$3)' +endef + +.git: + $(error "This target must be run inside a git repository.") diff --git a/rules/icons.mk b/rules/icons.mk new file mode 100644 index 0000000..eba5e89 --- /dev/null +++ b/rules/icons.mk @@ -0,0 +1,39 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +.DELETE_ON_ERROR: + +XCF2PNG ?= xcf2png + +%.png: %.xcf + $(XCF2PNG) $< > $@ + +# First: xcf2png by default calls zcat rather than gzcat. This is +# totally always broken; zcat forces a .Z extension on its input +# filename. So we can't rely on xcf2png's default behavior. But it +# offers -Z for a custom decompression program. +# +# BUT: Gimp produces gz files with some padding zeros because, I don't +# know, someone might want to save their compressed xcfs to DECtape. +# gzip has a -q option to not *print* the warning associated with this +# harmless thing, but then goes ahead and exits non-zero anyway, which +# makes xcf2png barf and die before writing anything even though it +# got perfectly good data. +# +# So: 1) use gunzip, 2) manually feed it to xcf2png, 3) hope nothing is +# set to die based on pipe status, 4) hope that if the xcf data is +# actually busted xcf2png will do something helpful. +%.png: %.xcf.gz + gunzip -c $< | $(XCF2PNG) - > $@ + +.SECONDEXPANSION: + +ICONUTIL ?= $(firstword $(shell command -v iconutil icnsutil) iconutil) + +%.icns: %.iconset $$(wildcard $$(@D)/$$*.iconset/icon_*.png) + $(ICONUTIL) -c icns -o $@ $< + +%.ico: %.iconset $$(wildcard $$(@D)/$$*.iconset/icon_*[0-9].png) + convert -background transparent -colors 256 $(filter-out $<,$^) $@ + diff --git a/rules/javascript.mk b/rules/javascript.mk new file mode 100644 index 0000000..15fb8a5 --- /dev/null +++ b/rules/javascript.mk @@ -0,0 +1,62 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +.DELETE_ON_ERROR: + +javascript>fallback = $(firstword $(shell command -v $1) $2 $1) + +NPM ?= npm +NPMROOT ?= $(CURDIR) + +npmbindir = $(NPMROOT)/node_modules/.bin +.PRECIOUS: $(npmbindir)/% + +npmbin = $(call javascript>fallback,$1,$(npmbindir)/$1) + +JSTEST ?= $(npmbindir)/jstest +JSHINT ?= $(call npmbin,jshint) + +uglifyjs_npm_package := uglify-js + +UGLIFY ?= $(call npmbin,uglifyjs) +UGLIFYFLAGS ?= --comments \ + --compress $(UGLIFYCOMPRESSFLAGS) \ + --mangle $(UGLIFYMANGLEFLAGS) + +BUILDDIR ?= build/ +JSSTAMPDIR ?= $(BUILDDIR)/stamp +JSHINTDIR ?= $(JSSTAMPDIR) +JSTESTDIR ?= $(JSSTAMPDIR) +JSUGLYDIR ?= $(CURDIR) + +JSHINTFLAGS += $(if $(JSHINTCONFIG),--config $(JSHINTCONFIG)) +JSTESTFLAGS += $(if $(JSTESTFORMAT),--format $(JSTESTFORMAT)) +JSTESTENV += $(if $(JSTEST_NODE_PATH),NODE_PATH=$(JSTEST_NODE_PATH)) +JSTESTFORMAT ?= spec + +jshint-stampify = $(patsubst %.js,$(JSHINTDIR)/%.js.lint,$1) +jstest-stampify = $(patsubst %.js,$(JSTESTDIR)/%.js.test,$1) +uglify-stampify = $(patsubst %.js,$(JSUGLYDIR)/%.min.js,$1) + +javascript>capture-to-target = @echo "$1" && $1 > $@ || (cat $@ && exit 1) + +UGLIFY.js = $(UGLIFY) $(UGLIFYFLAGS) +LINT.js = $(JSHINT) $(JSHINTFLAGS) +TEST.js = $(JSTESTENV) $(JSTEST) $(JSTESTFLAGS) + +$(JSUGLYDIR)/%.min.js: %.js | $(UGLIFY) + mkdir -p $(@D) + $(UGLIFY.js) < $< > $@ + +$(JSHINTDIR)/%.js.lint: %.js | $(JSHINT) + mkdir -p $(@D) + $(LINT.js) $< + touch $@ + +$(JSTESTDIR)/%.js.test: %.js | $(JSTEST) + mkdir -p $(@D) + $(call javascript>capture-to-target,$(TEST.js) $<) + +$(npmbindir)/%: + $(NPM) install $(firstword $(value $(@F)_npm_package) $(@F)) diff --git a/rules/node-webkit.mk b/rules/node-webkit.mk new file mode 100644 index 0000000..8aa0d0b --- /dev/null +++ b/rules/node-webkit.mk @@ -0,0 +1,91 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +.DELETE_ON_ERROR: + +include $(dir $(realpath $(lastword $(MAKEFILE_LIST))))programs.mk + +node-webkit-platforms := \ + osx-x64.zip osx-ia32.zip \ + linux-x64.tar.gz linux-ia32.tar.gz \ + win-ia32.zip + +node-webkit-pattern := \ + $(addprefix node-webkit-v%-,$(node-webkit-platforms)) + +# These are like 30MB, don't download them every time. +.PRECIOUS: $(node-webkit-pattern) + +$(node-webkit-pattern): + mkdir -p $(@D) + wget -O $@ http://dl.node-webkit.org/v$(*F)/$(@F) || ($(RM) $@ && exit 1) + +node-webkit-version ?= 0.10.2 +node-webkit-prefix ?= node-webkit/ + +node-webkit = $(node-webkit-prefix)node-webkit-v$(firstword $(value node-webkit-version-$1) $(node-webkit-version))-$1 + +node-webkit-archives = \ + $(foreach p,$(node-webkit-platforms),$(call node-webkit,$(p))) + +define node-webkit-package-osx + $(RM) $@ + $(RM) -r $(@:.zip=) + $(UNZIP) -d $(@D) $2 + mv $(@D)/$(notdir $(2:.zip=)) $(@:.zip=) + tools/generate-osx-app $(@:.zip=) $1 + $(RM) $(@:.zip=)/nwsnapshot + mv $(@:.zip=)/credits.html $(@:.zip=)/node-webkit\ credits.html + cd $(@D) && $(ZIP) -r $(@F) $(@F:.zip=) + $(RM) -r $(@:.zip=) +endef + +%-osx-ia32.zip: %.nw $(call node-webkit,osx-ia32.zip) + $(call node-webkit-package-osx,$<,$(word 2,$^)) + +%-osx-x64.zip: %.nw $(call node-webkit,osx-x64.zip) + $(call node-webkit-package-osx,$<,$(word 2,$^)) + +define node-webkit-package-linux + $(RM) $@ + $(RM) -r $(@:.tar.gz=) + tar -C $(@D) -xzf $2 + mkdir -p $(@:.tar.gz=) + mv $(@D)/$(notdir $(2:.tar.gz=)) $(@:.tar.gz=)/nw + cp -a $1 $(@:.tar.gz=)/nw/package.nw + cp -a tools/nw-linux-wrapper $(@:.tar.gz=)/`echo $(notdir $1) | sed -E 's/-[^-]+$$//'` + $(RM) $(@:.tar.gz=)/nw/nwsnapshot + mv $(@:.tar.gz=)/nw/credits.html $(@:.tar.gz=)/nw/node-webkit\ credits.html + tar -czf $@ -C $(@D) $(@F:.tar.gz=) + $(RM) -r $(@:.tar.gz=) +endef + +%-linux-ia32.tar.gz: %.nw $(call node-webkit,linux-ia32.tar.gz) + $(call node-webkit-package-linux,$<,$(word 2,$^)) + +%-linux-x64.tar.gz: %.nw $(call node-webkit,linux-x64.tar.gz) + $(call node-webkit-package-linux,$<,$(word 2,$^)) + +WINE ?= wine + +node-webkit-icon = $(shell $(UNZIP) -p $1 package.json | grep -Eo '"[^"]+.ico"' -m 1) + +define node-webkit-package-win + $(RM) $@ + $(RM) -r $(@:.zip=) + if $(UNZIP) -l $2 credits.html > /dev/null; then $(UNZIP) -d $(@D)/$(notdir $(2:.zip=)) $2; else $(UNZIP) -d $(@D) $2; fi + mv $(@D)/$(notdir $(2:.zip=)) $(@:.zip=) + $(RM) $(@:.zip=)/nwsnapshot.exe + $(UNZIP) -p $< $(call node-webkit-icon,$<) > $(@D)/icon.ico + $(WINE) tools/rcedit.exe $(@:.zip=)/nw.exe --set-icon $(@D)/icon.ico + $(RM) $(@D)/icon.ico + mv $(@:.zip=)/credits.html $(@:.zip=)/node-webkit\ credits.html + cp -a $< $(@:.zip=)/package.nw + mv $(@:.zip=)/nw.exe $(@:.zip=)/`echo $(notdir $1) | sed -E 's/-[^-]+$$/.exe/'` + cd $(@D) && $(ZIP) -r $(@F) $(@F:.zip=) + $(RM) -r $(@:.zip=) +endef + +%-win-ia32.zip: %.nw $(call node-webkit,win-ia32.zip) + $(call node-webkit-package-win,$<,$(word 2,$^)) diff --git a/rules/pngcrush.mk b/rules/pngcrush.mk new file mode 100644 index 0000000..39630df --- /dev/null +++ b/rules/pngcrush.mk @@ -0,0 +1,20 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +.DELETE_ON_ERROR: + +BUILDDIR ?= build/ +PNGCRUSHSTAMPDIR ?= $(BUILDDIR)/stamp + +pngcrush-stampify = $(patsubst %.png,$(PNGCRUSHSTAMPDIR)/%.png.crushed,$1) + +PNGCRUSH ?= pngcrush +PNGCRUSHFLAGS ?= -brute -blacken -reduce -q + +CRUSH.png ?= $(PNGCRUSH) $(PNGCRUSHFLAGS) + +$(PNGCRUSHSTAMPDIR)/%.png.crushed: %.png + $(CRUSH.png) -ow $< + mkdir -p $(@D) + touch $@ diff --git a/rules/programs.mk b/rules/programs.mk new file mode 100644 index 0000000..d706d3f --- /dev/null +++ b/rules/programs.mk @@ -0,0 +1,13 @@ +# This is free and unencumbered software released into the public +# domain. To the extent possible under law, the author of this file +# waives all copyright and related or neighboring rights to it. + +ZIPFLAGS ?= -q +UNZIPFLAGS ?= -q + +UNZIP = unzip $(UNZIPFLAGS) +ZIP = zip $(ZIPFLAGS) + +ifneq ($(OS),Windows_NT) + WINE ?= wine +endif diff --git a/src/data/images/.gitignore b/src/data/images/.gitignore new file mode 100644 index 0000000..206018c --- /dev/null +++ b/src/data/images/.gitignore @@ -0,0 +1,5 @@ +icons.ico +icons.icns +book.png +circle.png + diff --git a/src/data/images/book.xcf.gz b/src/data/images/book.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..cc06d1fb55089346353ed13261e41bbf142d47c0 GIT binary patch literal 34216 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 literal 0 HcmV?d00001 diff --git a/src/data/images/circle-outer-ee.png b/src/data/images/circle-outer-ee.png new file mode 100644 index 0000000000000000000000000000000000000000..7040514c0996bd173dfdb29e0fa556be6b8d3e21 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^1|+TAxeoy;wj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%6^ZHm6uyt)bwRLP)IK`B%;JQKQ}iuuY`dSC?GMlSkKE> z$I~}ZRAB)RA>V4c8GL_&{GT?KLnoV^Ua44CMYo*V z>}=5y$6@Yom~i%;?UaIZ-Bzko+go^KZQW0ZJ%0HsrQy5kd!~Yu^^H#!F8ljU@{9fa zG_90tU(U_Du;Ikqw|YzmEI8T%e|}8-7!_{#zopr0POykdjJ3c literal 0 HcmV?d00001 diff --git a/src/data/images/circle-outer.png b/src/data/images/circle-outer.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2e23695a12839879a4b3b69d02b39099620468 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^N+8U^0wgE+9rgrLOiAAEE)4(M`_JqL@;D1TB8wRq zxP?KOkzv*x37{Z*iKnkC`(17c22IYrlh4!xh4eB*B1)X|b8}PkN*EY{0uob;^}Kv_ zJbeQ-&g+~EDER(`H{itiV2_XwzCLUWl~EiM%_Ifh0~N0Gba4#vIDT~6ZN3Hr4(Ff$ z=daW6*5irj?#}C+uAv?jIWyAgL0e`r%TCP&iwgR0DfP@yZF8O?VWWS?U9j2m`AeMy zn?;R|LTZUMOc$@RHGO4NTyt2awd9hdfQVDmFS!Gs3>xBCI>cr)a44?Yz?qWFZ0{U! ze`XJ3@J3U%n4894XH0!>Cb34YSuoiz!+X|-a|#!K9bI|))2k_U=N-4reLh*vqvY{* i-oF>FE!uo?CxhpIC2=N|MSFlQXYh3Ob6Mw<&;$Ta@q3^E literal 0 HcmV?d00001 diff --git a/src/data/images/circle-rim.png b/src/data/images/circle-rim.png new file mode 100644 index 0000000000000000000000000000000000000000..366d0205ec4e05e656f09c7cf0daba8068cc429f GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgn3BBRT^Rni_n+Ah4nJ za0`PlBg3pY5H=O_Pg8?44RyKC!eVY3h8BrM3gw^=jNv7l`t>@1tg{x>v{R= zc=`rvoYy%SQ1JZ=Z@`K3!5$$We0|s$Dx)|inn?=0XJBCD_H=O!skrrawxdw90T1)f z|I1JBHI|taF^zR~v1F!mbW?J?xD$tBOWd;i%}Gh`>kmoAR=1k$c^p+;VePVXBjcib z8w4G<#`%7C%vN&0uzuo|h0m+CieLVo={cwB|BF+1f61FI?VFdLI&*dY{-7r^d=KvG z%kBRC{Y^XPA;z>l#BbDh9dVii{3L8zqeiD zo~6{i-M6pU%HI96HcIm_i{lptm$`*sWX`VeTz127&HsRj%?0Nj7rO}x0)4n;jdaA! VWf`t@?{|W%^K|udS?83{1OVb;rnLY7 literal 0 HcmV?d00001 diff --git a/src/data/images/circle.xcf.gz b/src/data/images/circle.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..4c2fa517a1841457b2510854f960279765c1002d GIT binary patch literal 1439 zcmV;Q1z`FgiwFqGQVUZ617m4&V{BzEcw=S&?O021TSXL}`|$NUe&taoadJbVkN{5Y zBwbXcr78>5N)Zv;3JKS7+$+U)mAE2ZAWQ6E)fF513nJDm*ua`UkR9R=ut(5l_|818 zuV2O8R7vG4otZOd=A1ca&SS=|dyOaVY4y-O^p0u_-&YFg%K!`mO%{*`xF(vrq9L+N zO^Jp%K;+(Y`vn2;X@Cv*7BH)DT0DbpAAPcpeT&srqfu+NnVMYq^te`O*ACpTz4l}G zv-^AdZma25+`USbmZSxb*QnHM#rm;#px6wyangQvRC7;SN8Z6^Y~!$AZ5_3a-3`$d zkL!;rZfUC|z9C3iA)8=*G=#O>zi<#C*3*+Gm8#dQyJamI#Am~ZidKBu^xCf1tUj)t z5P$3N@TAsugWQ88N$F)}-Ouh0q`Rw8p%7)=M*gp}|Xbeh$fDo?zy=!%Q9q zM453OVg^qF!tCN4>=&G+sR=Wi=Lm6_#ZC4vC!3Q*2!YWAg8`T#f(?WSmL^!#&~!*s zO!f~6kW^FbD3%CuQg%l5{bS8x3Ry2XBl%KvTJ0`=#G%3ij<*5rUG6_hOnk+SO z-!Dn!u8eZwtZ?bXyA$tDyn8jhn?O6ulAvaANI6huc#O@#+B{BW0m2IqS%CV>P*}nR z;~n-FbxS_YRO@W;ga8isBajn=yaePE6~2r@vu0+*)@! zda4kuE#{-oac6(iOOO5p(Ldu61|6~un&>#c(xKnfe!j*+bYLnq6v@V12uEV@yq>10 z17h%N!YNLmcjO8=2np68p2o=%ZbB^KdGs0&(tSaCf|yh66{lU*)@p^w8pcCH36*$K zqlAo9#V{`{vAGB~%9Ao7AHTM_h4qyGJ3>v1Z>xNC-hIu^sw(^qg#N2PuU*2ex&e0J-S+Uth2u3+*P*kDw}TuV4HQ9L=^P-=KWw4 z*fJI^AR6)_8cY#F^FD+`luFPv88s4@ns>|}-?eS*dyuq5A|K*J7XV+qbNh7InF>sjysISc4y=3t53nA< zS5nabe6zps8kgnqmhDdGZVW!&a(j#w%DwcQ$JpEyWAiX#;cxMHGtXF@Z{g{>j;HJj zp0@?If*@Q)jIN;;uk$(fK8nBwpJAK$aqt0dm=AG{e1yxPh#J2oAjPhunwJD5Sy@1W zZ3~FA9Uo$BcL1X7#v8#f8NogDz7xx?u4Q!B+px}r1tu({N^8JM19zOk)djDRF`C<> zh9j|I!!ahtXzq+T(H)jp$M{W{PqzbI9`r~G!^sgiIf^5S!O3wrIRPirb8ZR_CP=}_ zX*f77ev>8zWO2}0@jEr{!!#Vy4>NGwo4_y`!9Dc86I(8`Ez1HBbW2_2f1ARn;Ye)Q zaEysDn#D0Ey2Cir)lXMLs*JiyQpKdoNfneTDOFUetW;sC(o)5x%1ae^8I^bi6?q*8 zzXiv4%2GXVmaDjlnjnk003erx-kF% literal 0 HcmV?d00001 diff --git a/src/data/images/hand.png b/src/data/images/hand.png new file mode 100644 index 0000000000000000000000000000000000000000..96e07b2b724e0d57efa629e6072ae76d21a4b462 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^$v|w($P6TRR;wriDYgKg5LY1m|NsA`H|O64vKUK( z{DK)Ap4~_Tagw~FdgVmrIt<#58w< zMh;Nuv!{z=h=wTZ!Hv0h4H#GtJpSFXkU=kG*AtF5F@jJS*qE?jKtTEM};!K*Fy zNH)JhAtFHVpo9Bl>0|@-Xa)zJu&YX|HY7Q!GAL}$S|2h0sFHup1KFm&w$N#gb5ood z9O@qH?^D>3n4qR%Aiyxe@}}80Sxp0=@dC`UycaKSP-0M!E|USu$g=yLXcQJ_5zmvb zEPU7&vm;T#oX3ZS!KM7y<4@;x&E8lDSo6*4IQ+0=SIi@6`yK3z426deJh8v-@4;cA S)fNu)K7*&LpUXO@geCw8_j>67 literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_128x128.png b/src/data/images/icons.iconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..6c93aa7728b4fa95dfb396e9fe8ce86a39ae3034 GIT binary patch literal 624 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1SEZ8zRdwroCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#9xE%aw(+fH%O?Vb^fE&tN}Tg^b5rw57#M*95>t!yynJ;$eFHVl>zoWI`2K}A z;Kcc0kB|?(K5Pt?Q5+M^Bn93xFfd;Aba4!+xb^nV#@xdO0t^oR3-5VzNFJJ+T){a# z>(Y_}vy%*(dmYrgrz?2~oT#~2^Ql2UmFu5&+?CH;cl!mus;H{-l->Q>r1stS%Ew=- zPD=yrhJre`lbb6&ovyEwoYDPWV<#I}_|E(nvl#04&hOkM2jXvHnj&&+8snl#5}Wuy zd>*cVVr8*7o5k1IfxHG522*9O1u8GE)^USm8D?diGQU0n20ul0~=$M#3_kK31T3b61ELTFSK(?g4ic6@@McS>}cZwaWYQ*P6Dd{aTppN zGV-0?QzP^F*zJ$D`E#B_ECow3>}8Od_VfA*&VqURh4h66h zpl{QibC0}f0UB)}*3j0|2a0Q%GerhqXB@K=PjNWh0(P~;6|)t*Kw~yC)@(Q_z8Rt& iNd9B@kX1eZO!tWR`Z{@0Cg%l@KvJHrelF{r5}E)-M!d@a literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_128x128@2x.png b/src/data/images/icons.iconset/icon_128x128@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..08bd681f430151d0c58ab22ff5d4ec3917a94cab GIT binary patch literal 1139 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911L)MWvCLme8$ z2Ant_>=E+8*N2UvGKyoOnWVsb1_tIEo-U3d6}R5r-IyinDAJHPF?y!mRoypCO4G!g zxa5x`e0To#W@B@u)7!} zNah{5A9a5B`?ouPM!H=8UA^}B_By}URhz!C`!M*xECU&FP3Ug@jHkbuBVYdwyow?F zumAaPdG~8o|6iOxdrRJc(SQ-jtv9x3{gz%l|MB{7^AesjH6nWh)mODlAM75)Ts`;v z<=35&``4qn)9%cs{S!<3>aJC~EMD)y`T;YgTPTKk)y|8n-+eYdLi!zDQm z=py+KV%>%)hWPuo|Gz$a;g(YQ_2Dt!6Q90(xy^E*z7azyJQgKhKYt$l;(ol&FV*(< z%k?$q|Niu&>f~z^)bLASyZH6}&GpN#+ch(w2JEu0GWB07|6V-*{rj$SS&Lpjy?X7v zdwf4yz?rQr{j#R?d+7DwhRD&<;KkT;PkzI_`uzOotTT}l%zxT3W QVClf%>FVdQ&MBb@04K3}<^TWy literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_16x16.png b/src/data/images/icons.iconset/icon_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..570b18153245d0ec10613e7510d08f9f1498548f GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#9xE%aru8##UqzshUS>!{iF1B#Zfaf$10zsCVrsFTm#>beZ=l9`os$6t-@ot% zoH!rs5%R&;hmD~!iesXgq`-TiLK9CH#}JFt$r)Tx9zsb9!Ok-x&5RBycU)+=pYTR% vg0IuImMSTa0-@NZ(i81MCq0|n4stR4DUGg34m~*;sGq^p)z4*}Q$iB}s$4s3 literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_256x256.png b/src/data/images/icons.iconset/icon_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..08bd681f430151d0c58ab22ff5d4ec3917a94cab GIT binary patch literal 1139 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911L)MWvCLme8$ z2Ant_>=E+8*N2UvGKyoOnWVsb1_tIEo-U3d6}R5r-IyinDAJHPF?y!mRoypCO4G!g zxa5x`e0To#W@B@u)7!} zNah{5A9a5B`?ouPM!H=8UA^}B_By}URhz!C`!M*xECU&FP3Ug@jHkbuBVYdwyow?F zumAaPdG~8o|6iOxdrRJc(SQ-jtv9x3{gz%l|MB{7^AesjH6nWh)mODlAM75)Ts`;v z<=35&``4qn)9%cs{S!<3>aJC~EMD)y`T;YgTPTKk)y|8n-+eYdLi!zDQm z=py+KV%>%)hWPuo|Gz$a;g(YQ_2Dt!6Q90(xy^E*z7azyJQgKhKYt$l;(ol&FV*(< z%k?$q|Niu&>f~z^)bLASyZH6}&GpN#+ch(w2JEu0GWB07|6V-*{rj$SS&Lpjy?X7v zdwf4yz?rQr{j#R?d+7DwhRD&<;KkT;PkzI_`uzOotTT}l%zxT3W QVClf%>FVdQ&MBb@04K3}<^TWy literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_32x32.png b/src/data/images/icons.iconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..6813ad9a3aa40979606fe8e4121b69d5a58947d7 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={WI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJyup;ElcH$`g1@bz08n^66gHf+|;}h21cNO#MELvFJB!`-$0G?Iwu1PzJK8j zIB`DMBjkgx4;w>e6vsp}NrCr3g_k{D978;gCtEC8;UUDe@~)Rq(t^pXy-7(YIL-#7 zIQl5-G-+RuP>E>J?8vm*#5$wQAfZ%kqFBPL4o#;6Og4@!SNG0%udu@KWk#z%@Z8`3O~gjlv|W>Z;sTXybLokB2QnF#70w6?%3|EKFv8X) zP2eGCiAkhUu;5wU1(gC9H7C8C=#x47;*0PQo~4&W7=phm)TGO#)&srA;OXk;vd$@? F2>?=odzSzJ literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_32x32@2x.png b/src/data/images/icons.iconset/icon_32x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a8dc50479858d49aec3004053ebee1023d010f1a GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVkCl~ITWNz>dooZ+FEb>f#5q4VH#M(>fe|PmF|}CF%U8$KH&Ele&dGp+?_YQW zPMi<+2>Iaa!^Th<#WB%LQs6xU1EZLyi(^Q}y|*_u3LY}xVZGop(a!scM3Yv5&O{?# zUe=o}j2e**Cl@ray|&x*^v1RQ!J<=~-}`M$EkB=V(EIplqLeHniwaB3?>LT~7Xs9R zj=U?VYyZ>I5YM0@tZB>QAd$=XB+Y}{!ONwnhPg!E@SdDUT{lCl0>e&`yX#q&NT^QA zO<@t3P$0I6VMhHCKgLhdk>;D0F?@8N$=hb>&hY0&@R80nUJdUwf-fxG=f#l!jN=1G z#JkCvYc8KP;ZRVJPuSlx{{o}mW1SYg$qoM*4S64PHi&DbxBaubBDB!$6T3r~^8}V7 zj83hOc*Blph44CT4>`ts4c3P3mhUfX_^0SHRcIT2PU~Y}+V_!Z Y;rzz8&aA}+z@TLCboFyt=akR{0H|J=lK=n! literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_64x64.png b/src/data/images/icons.iconset/icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..a8dc50479858d49aec3004053ebee1023d010f1a GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?3oVGw3ym^DWND9B#o z>FdgVkCl~ITWNz>dooZ+FEb>f#5q4VH#M(>fe|PmF|}CF%U8$KH&Ele&dGp+?_YQW zPMi<+2>Iaa!^Th<#WB%LQs6xU1EZLyi(^Q}y|*_u3LY}xVZGop(a!scM3Yv5&O{?# zUe=o}j2e**Cl@ray|&x*^v1RQ!J<=~-}`M$EkB=V(EIplqLeHniwaB3?>LT~7Xs9R zj=U?VYyZ>I5YM0@tZB>QAd$=XB+Y}{!ONwnhPg!E@SdDUT{lCl0>e&`yX#q&NT^QA zO<@t3P$0I6VMhHCKgLhdk>;D0F?@8N$=hb>&hY0&@R80nUJdUwf-fxG=f#l!jN=1G z#JkCvYc8KP;ZRVJPuSlx{{o}mW1SYg$qoM*4S64PHi&DbxBaubBDB!$6T3r~^8}V7 zj83hOc*Blph44CT4>`ts4c3P3mhUfX_^0SHRcIT2PU~Y}+V_!Z Y;rzz8&aA}+z@TLCboFyt=akR{0H|J=lK=n! literal 0 HcmV?d00001 diff --git a/src/data/images/icons.iconset/icon_64x64@2x.png b/src/data/images/icons.iconset/icon_64x64@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6c93aa7728b4fa95dfb396e9fe8ce86a39ae3034 GIT binary patch literal 624 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1SEZ8zRdwroCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#9xE%aw(+fH%O?Vb^fE&tN}Tg^b5rw57#M*95>t!yynJ;$eFHVl>zoWI`2K}A z;Kcc0kB|?(K5Pt?Q5+M^Bn93xFfd;Aba4!+xb^nV#@xdO0t^oR3-5VzNFJJ+T){a# z>(Y_}vy%*(dmYrgrz?2~oT#~2^Ql2UmFu5&+?CH;cl!mus;H{-l->Q>r1stS%Ew=- zPD=yrhJre`lbb6&ovyEwoYDPWV<#I}_|E(nvl#04&hOkM2jXvHnj&&+8snl#5}Wuy zd>*cVVr8*7o5k1IfxHG522*9O1u8GE)^USm8D?diGQU0n20ul0~=$M#3_kK31T3b61ELTFSK(?g4ic6@@McS>}cZwaWYQ*P6Dd{aTppN zGV-0?QzP^F*zJ$D`E#B_ECow3>}8Od_VfA*&VqURh4h66h zpl{QibC0}f0UB)}*3j0|2a0Q%GerhqXB@K=PjNWh0(P~;6|)t*Kw~yC)@(Q_z8Rt& iNd9B@kX1eZO!tWR`Z{@0Cg%l@KvJHrelF{r5}E)-M!d@a literal 0 HcmV?d00001 diff --git a/src/data/images/sigils.png b/src/data/images/sigils.png new file mode 100644 index 0000000000000000000000000000000000000000..c69871a82237887007fbcfbda41c13e4c0ba2ca3 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^2|%pC0VEhstXAp(QcOwS?k)`f+xyS#2l6-zJR*x3 z7`TN&n2}-D90{Nxdx@v7EBie*7GYi1Rgc&lfkJwjArU3c`MJ5Nc_j>tKmm!V#d==8 zI-b6P8s~LR1{8e%!W(ene6UBz2VWmHhRP_8iDr@l?|};MdAc};cpSewg;A(Qfy33> zYWow5YiV5amt`(yMlFjnoh~k4z}=l&&3M3mw_BFp=}%f$p4G(hH$0i}u>QL7JAvmf zk4^1z`T1K|!F7`DA%Dgxe{&t~MKCn=@~9?>Mp~Z~?Ud_@v}aqzu{11bl~RUUrR9PZ z2W|?@lsWIe>E-61sjGhF_%2>)7hN1u^WWqzKZEQxA%_&sHg~%NFJlDz0{3X`U}UIL zJTzfN&jof4L#5M;6B}MEao_NOO~O?`VDU$$H#}i#% x0.y ? 1.0 : 0.0 + //i1.y = 1.0 - i1.x; + i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); + // x0 = x0 - 0.0 + 0.0 * C.xx ; + // x1 = x0 - i1 + 1.0 * C.xx ; + // x2 = x0 - 1.0 + 2.0 * C.xx ; + vec4 x12 = x0.xyxy + C.xxzz; + x12.xy -= i1; + +// Permutations + i = mod289(i); // Avoid truncation effects in permutation + vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) ++ i.x + vec3(0.0, i1.x, 1.0 )); + + vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); + m = m*m ; + m = m*m ; + +// Gradients: 41 points uniformly over a line, mapped onto a diamond. +// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) + + vec3 x = 2.0 * fract(p * C.www) - 1.0; + vec3 h = abs(x) - 0.5; + vec3 ox = floor(x + 0.5); + vec3 a0 = x - ox; + +// Normalise gradients implicitly by scaling m +// Approximation of: m *= inversesqrt( a0*a0 + h*h ); + m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); + +// Compute final noise value at P + vec3 g; + g.x = a0.x * x0.x + h.x * x0.y; + g.yz = a0.yz * x12.xz + h.yz * x12.yw; + return 130.0 * dot(m, g); +} diff --git a/src/data/shaders/noisyblocks.frag b/src/data/shaders/noisyblocks.frag new file mode 100644 index 0000000..be6e051 --- /dev/null +++ b/src/data/shaders/noisyblocks.frag @@ -0,0 +1,23 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +precision highp float; + +varying vec2 fTexCoord; +varying vec4 fColor; +uniform sampler2D tex; + +uniform vec2 resolution; +uniform float cut; +uniform float range; + +void main(void) { + vec2 coord = floor(fTexCoord * resolution); + vec3 n = vec3(coord.xy, cut); + float p = 1.0 - range * abs(snoise(n)); + vec3 modulated = fColor.rgb * p; + vec4 texColor = texture2D(tex, fTexCoord); + gl_FragColor = vec4(modulated * fColor.a, fColor.a) * texColor; +} diff --git a/src/data/shaders/noisyquads.vert b/src/data/shaders/noisyquads.vert new file mode 100644 index 0000000..8388349 --- /dev/null +++ b/src/data/shaders/noisyquads.vert @@ -0,0 +1,26 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +precision mediump float; + +attribute vec3 position; +attribute vec2 texCoord; +attribute vec4 color; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +uniform float cut; +uniform float range; + +varying vec4 fColor; + +void main(void) { + gl_Position = projection * view * model * vec4(position, 1.0); + vec2 n = vec2(texCoord.x, cut); + float p = 1.0 - range * abs(snoise(n)); + fColor = vec4(p * color.rgb, color.a); +} diff --git a/src/data/sound/book-appear.wav b/src/data/sound/book-appear.wav new file mode 100644 index 0000000000000000000000000000000000000000..bc8622308ab2cfd13324750d1586338749227529 GIT binary patch literal 50896 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

*m)BsR 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 YGASS8LH>mXJPJ+z<8z--!V@n3A3&w|$p8QV literal 0 HcmV?d00001 diff --git a/src/data/sound/book-dismiss.wav b/src/data/sound/book-dismiss.wav new file mode 100644 index 0000000000000000000000000000000000000000..052a8d280d297e7b9f4d1a951b00ab69f2d4b8ee GIT binary patch literal 36654 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 PXxXWo(b}SUYLEX9IR}IZ literal 0 HcmV?d00001 diff --git a/src/data/sound/click-1.wav b/src/data/sound/click-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..fdeff063fdf36a6bf325136e73a0ab240540bbe8 GIT binary patch literal 914 zcmWlYe@xY76vm(Pe!0NNf|6=o#Q+C5NEXgihM5>JsA0e;aI7t&7;8CaFn=r+gIWT~ zMw=^~L`rSlVN!@o+oo>g{UgS@3FhjqB0=lk`+d*T+s;2{JLivcp6Bz_RaI2< zdO${-|A;lh0*_xjJpnYJ^{47=4`5MQvsi8+nBhY!vbXo9kco+nHq| zCR283m$mvER>%Y&(_uX&zb07kf~Lh@jWuzFcf#yI69!DoOEnX=KlVzznp1KWotmK! zV?mz8qJJ>H($?ZNv&vlO@Ae)IGgUss5q9%+^`YL?PDVE|j5C^2|4~8Ebf) zQS^&NCiXLh$?nSCtmg}y;#O?HE@pF-9XN+>EXM*gB84f4SB))@czf5zybnk7O6D^D#*F3Y-+|+tM z*KT2uo&HaLgDFdD4cxH1qRsxSWP2Yo;IFrd9+Q4ZEXCS*IQ|_oOuqd8`Gj|GLP$1o zT=(#96mhRjw=J3?>%1gy1V-EZMZcG4%wOJ4BM54fJ!dO5ivuV(Q4=tiSgbGUSDeHi zoaDh23oNVzi`Cm!nuqp_g5|&Fo-u%hXMpqiyo)O7NkSD#La>( WBef_-Hs(0VaZc0H=L|17Uj74ODym8V literal 0 HcmV?d00001 diff --git a/src/data/sound/click-2.wav b/src/data/sound/click-2.wav new file mode 100644 index 0000000000000000000000000000000000000000..528ebfc8f5f5b6dce0d7c675cde52dddeaa07059 GIT binary patch literal 1014 zcmWlY3rtsK7{;IXJN$zclD2dymk6AbHZyCJ&8c7m%m(5GB_$<9w9+OPWnL;2sDQu6aE#ax?(ZE1?c3d{JO98mqJNvM%a3fASyx#a5QGkv~!}q)!)E&eM9Y(9R25<36Y(Xdb;YSCK;7zQ_w99f5T3OA_Ql( zLKmMyF$$CL2{?>5(1oafX``Gh6aGZ0GY5WAGh*kUo>?d}-E7JA3U6c43YA!h9rg>~M$t zVK&PY`09Or=dhV%=1CUsxf%W-H<+m=+VRP9>$wkle)ocV#mhjxX)?8_^g8|R?rnxR zaRJ%RQW>&$+&FiicL>$a*8%BHDJI!aZ@brIgYmZ}(u-~u*>}7muh8ycyq-@4YM4mF zZu^sU?IqS>5b+qaH@qlY%^gx<%FRor+E|lm8gN8S2t^edQI0eCSbjC*oew3G?RJGa zbCjF88FNjmv&gxIn_jv*)oUeXw>c@(u*;@<)4hZCD)yNcQz)kxYcst4UYQL@#-gC``bJ{-KrU z__J1wLIPgZ)ULrpuM%y+Vs&Q)cA^RAb)CRl%53luqVYVkHUIllQp9&z#}-{xEMWoP i*L)jU&y#E;IZ8>+@e^+2US8xAcv<}o)7d<&eg6;kv-Xhy literal 0 HcmV?d00001 diff --git a/src/data/sound/clicking.wav b/src/data/sound/clicking.wav new file mode 100644 index 0000000000000000000000000000000000000000..3b9932044b6416803d9d51d06e88d48d49217bf8 GIT binary patch literal 26544 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 literal 0 HcmV?d00001 diff --git a/src/data/sound/page-turn-1.wav b/src/data/sound/page-turn-1.wav new file mode 100644 index 0000000000000000000000000000000000000000..8fd409682ee5aa5d78748fd4b15cb4880bb932f4 GIT binary patch literal 39366 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 literal 0 HcmV?d00001 diff --git a/src/data/sound/page-turn-3.wav b/src/data/sound/page-turn-3.wav new file mode 100644 index 0000000000000000000000000000000000000000..ab8e6734eb0da921aff10206b96209b8b7f781c3 GIT binary patch literal 35298 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%0A(C9XY^iim}J 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 literal 0 HcmV?d00001 diff --git a/src/data/sound/slam.wav b/src/data/sound/slam.wav new file mode 100644 index 0000000000000000000000000000000000000000..798d6e87827b1b3441c2b6f1eee39ccdc47c59b5 GIT binary patch literal 49718 zcmX6_1$Z1e54AlryBki*kTzvVnVFfH8LrICbmjKS%*@Qp%#0~BrlEzIvGu?0fBBkA zHnX-Y$?|)Wyp3yBub%$`V=XE*uhy;akWAr>F^;dQyBM3^k~6`=S=UZOItAhx#x&+5 zi%eq7fiH^^$xZR}o4(?wKjfj$^n<+QV8JW|f7h9fCr!M=|EwgUWGp3%WEoi|mX&2= zxmXUClO}jn8Xu4$mjk$QW#6lB3K%h7W1dXQ^_Eq!rvrD^WmQtD{x?i zF39a-36w;?DB-WvCjS5H?^=^%#z>YKGZw^GSSI#FG!M`fuOjl#eBd&Ouw%go#KJbvUm~T4krtPDTjvnr9cCnzDR9zNcx zuT|H(7~|YQ^0;%7Cr@HmZIylAlNffv*VFwgysA9vG3^K?&Fk78M{jr5z@j3+?xSav zUmg97@s4o&Fk9ogmQ+U{!52|aql-R3Yv$3yDvOlv4Jy6W)X~H-S!Hz}a0Sz**xYKE zwV49N8a2~OLu(!1w1KLFFNV?@wPlF!o@%2;n}gM2Iw-@mY1+-iTjplEqOv#!$uGW1 z`fpmFG>{Dw_4V71Y3!mLCJtH8%&Y+qd0uu|Ya8rSh0T~YLSi+B3KSG zHt_f66l!jturg9UYR?5YvArCu4z}z zqUI9ka}jPmmPPq@?K{n4F?uD35;<4~zRJvJ|Kc6^DKSv=5EJDx>#lW8CSzy$Nn!AD z+HCulhuA3Nvg|6KifVMnj55Eor^XcZ$CJ}84IOlmZ+I1vOdlqcRou?SchYCp(}>eE z=#$wFyNr4uYP0cjik3}ptpcn<^j2)=_t_n_OC)N&Y-aA|KCM2R#V*nt5vd=bjCN*R!b)a@B~G&D?PBnv~RRr z&8q1Qsh#~!tEAWU)$a{(Z4KkJ)=foPGLcA8GjCvUJo9d^v({hTH+9T0UX0ex9Q|&93W#?5f zGPn3CO7SRjxo;im`V%cy`RrMuxd^k0nx9w+FoK`L`+~G)FB!! zGN~KB7GB$|$qMorG)`Wlg}T(sv4Qq9HdfoLK3VIihE|5>R+d%G9t!yfsc`j;iqmMh zMs8Gl#Ahvvm8No9A#FUhW%;zbMhY!NO;E>$WGiGHNYRL;(c6omYKyALFKV_H!&<4* z{J7XG>sr@Uka$DYLx<<{|Dlti~p?%~(#YvuDeUzE_dXbl1RjIfTJurVX zO%ZO9ij7un*>1j%omQXK6WY&;Fp_)KL$-y_WsPYq8_v73ov`n4cAk#Q9rg^hn+8z^ zdPSpoHvWc9r2H~c?pE;>K<(5m>c)ri&#XHi%r&0GD)0@w8qS58Jg2zL7qQ8#CX1yA zRuYl_76tQ9+~UVrU1~tLaMFyUGIUz)S3_tno6n2$t*koEuThjqwUTe-EQ(?WRcCdK z9wWL}$GNbG#n2tBq$l&Tb!-czVu`SQf3}d8vQj*h2lH5#o(0kY)ryAVoOnW+*jVbjnw&HA>%NDamtOTFP3-G>dHY?Ak@Ce=;=g~dt$f~fJIBPE9Z2gyN z(g3QAJuY$94#yeQkWx_^YDg6+6sJ*j`mA27CbX93&}EuWyD1H;%hs~8d=4+hqxpPR zpUq^oSSi+tb!Ok`I-Z(~`J-@xmt$MmE7lJuV_MdS?O}6SVVwL)I5m^-+#$-(>aYtm z1>VtuwSfLl(;b}3J83<>SHfw#9%o@R<)S$3jKT1?uBUvk0DI<2#ZEDPhV*C{B zH>BK#bNv}TfgVl+pQMH!Y^PxLLS{>-84OY|~Pvil!4hGQ?yL#k6$|YQrXjG=O$uap zu$D})W(=@XLHs`)(tm=V|HAJ%F-{`nct|H;*AtNRC52(c11;?9Sy5Z2}#58dTZ8;m0(`%n0>J3ER1)OmH^d!2YS+hu>7)y zVE#vRkPg7cDG+_yKqdjNEzHW}Uoni-iq*#23c#9`p&J7jsQ}QDhNlX$RO~0@eu=LG z7&j5P>^*E03VG7P2BjcDD@d3`Z?N)WtQjQE1Dq9zzelr*7{55i3dYwTx=Ls8)DuXu z6?!6!kqA%F@E5=Sb7LMa^i>z5RbmZUSJsr(z-Sd=ISo5E0M_*5#cYu1HvHra)_M#$ zGzH%G75WZWy68vs;Wk4=Ld>G9hnjF%N_%MV|&DF>_<0dLO@ z9Y*0R0&5P&Nbe!#OQ2l;XrH0m^VqMy=>~R=K(s0Vi85j3$zX?k@S0-ys>C`#vpKNl zoES&qeQ}6D5s^O?UpDHN7X2N|-$vtC2a>L8i6oMX`z)P30y;${N zV33vYr&^FE4Q48ixw64#PDmy3&M>Sc30jV!7qE~4e|il6kyHXJ%8O@9!a5}&Z$+%P zI`o@QLe#mFVF{(SJ+oPTW+3kkkrKgUD+uPGM#1MN%jpd|3Bn(&CU zn6nJ0wSjkU!-sRc=Mv!bv}C0IBPJLwL__=LFn6?-5Dq|W~Lbsxrfi`O2*;%{K@ zSd5qrwyuCZksDGK#Txy5DH%Mc09IKPmMDW6x+7u~|7)dW&}tSusW8e%%G{5e)={5=CC zteW;O2Th6fWrrpr;B^65OE^aLuT?=p7j&2tGr90YCPYa89`Hb$cohEyVg@%>^%5gL zLS(oBA9+T>h`H&YkKb5nEXH|-wcW-^dmGQZgcSZ9!UwF?h9rqtVG8U@4WnnrEN)oP z3uzf-$bqO<1u-Z;{$Cs(La@zG#C!vBEiHT^74#4W83ZKp`;kA>@Bn&E38{kcL`wWE z3s&gQObEQ@giQYZ@5Y`_jkz3HYdSoc8J=7mXG4D2I23wzVpI+dGiW3je-FXWzYvvD zLc3r7Viy1349J~;kvv%YLul25nSWqS{+*i-<3(e>;J<#B8ngK=^$Y6?MAXQPzo&w1 z$uVLitQL*GN8$e&@!jv~&!NK~@Oy%{MM9VUtU*4k-|q=HLc;<*6C#X$T&1=f%q z&v>!hO+=}mcr`7?PK8lZ;3vNZ{8%dlqojdEetjfB3;wJ|9CVci*3AZA&WQh~!S_(i zksgwy#ZT#Bm9)@H9z5aSANe4AI(V}`50Z#6Y{;Vh-PNBFw`1VdahU%LB=KwTH$2aS zUGBk`fDXNg8|m=Q0LYdCTJ`VJ%7{Wu5TEj44Y?5MvS8MGh-s67_>$30wL=|Id({Qx zG-~1$^he2p%)@f?`oQpKaiTP0ho~|2{2S$`ut9t}@5jStIlNBkD&+aoaIdJCwAY5*&R4KB-wr-2&nQk`kW! z8iYSH2PWhS_+n&FEM-j93Yp*3G&4q}HIB=ZW?(>T8mJ7%ZC2GAqaO@-?0!u5wDv4m zR@Iy7=Y9VKo^`Eq^tbxQ|8eOKmpLNw0DGqWmL;6AwB0J;nM1EcX1kLrt_=)LMm4nz z0j=z5-pA%N5p2GonIc+r(@vVxSbeqBYKyZgwQ+>q<~_9vK_i_dlG@P{bGtR&eDCh+ z4)ERNKjU?KqTSFOu3eN;C@y)VHeH+MDC8|gqh0?Q!+2FKldFKJ;P_~dQ@=%jl|vn2 z3&jcI^nr(J=}FKXS;XFHHgrq}^UWk(Rtv{@R#crgr`Um%+zRmhw2!eb)*pMhQOUTc zZ&p8Pj^iyk&4tv+wNHFUWS*XAA zmqGu@GFcDQDHU!%w}z4}(;F5Sv`l{>;@JY#fj>}N?CJ8EGSx%Gka+b+q!%kGpGqrJ zu?>8l`NTTN+sKlh+TIFso>kbI2EPgebJ>P$%r&(}&m6Gcc}?%^y6re1M(F$baPX~Z zV0DN2VK&Mf%F>FFY7*}RoONAu8Uo-Z#;A&HUwi?CW7=vaibIa-Hfe z>grEnvof(f5f$>aYx! z=~YoSkhh~0>NhfkL)B!fq)MmtW2w|QamF~NJ?42?I(5iOZ5_2WWn1~p5NW9zRDwpr zq6gI|%1s4%0;{A7&`fY_P5mJ*da+s}QcM%wc&y&ek;NFKCD&THx;eaTC4J}R^dEe# z+^n*(|HN&UL%o&9?Xjw?YN`fWb=Y+67=5>A+a5Msax06>BA$u_yNdnWt}pZ3^X+3Y)4OQZ?;16sSL83FdM8u^eYV^Cel&RdtqLe9>kaKSgJD60zon zI;jS;BYXktEPJSGd^>Hmm(yt$BX`+#)F1Y*7%BF$GNJ?jhmB?nWP7W*6|8Q_l=2k& zBE}0T>hknz8I|O_VD&asPCV9itrT0uN3t{4J*yIPh;6C|UDFCUh6}`b-cjsikJx$P z;2yRf=h#Y`rQTaDP2H}h?)bSH@+oOpAKJoN@+9Ppc2Wmb2IqEi_0qa2+pDu`fIZ$? zL~BG5Fd7`{{%lh&KVi~(5gH-?xkQeOT>H;z+3)Ca}4=diwmLm@n#SQ2> z6TipLuwKX+GzVAi52P`VhOlZp4_}BVeiKpsuBxW$t0k%|&gA3BD@0+>xusHtsEg`J zJMhFh7R+lQLf6Cjx0yxpcoxFHu@7MHGr;wKf${bOH#5OXiyW>Qt0t!se*cCdlS_&h_spa(K1HL;S~)B__IfhOuBXEYR< z&(=7(dm`7f6dZLQPTwUsBQxRjy9QSG2q^Iv@O&ZQ>nqe0TzW9jLt&hVooFetOd9ea zm(?dV0UV|p@--ed4IY#S>paG$18KBjk8#!qQ6`LXn>y1ZaF+A1RRDa!;6)(gSz1A* zhykrNM3(HWN(KKK1g#%Lw&M?tpwi65sB6H|HX?s;8@Anp{6__x*J;>YWK**u7ZFa! zkq@g!+c9=yHV@JGI&wk=dq#_qdAI;heSrRh1ikV4c%XwqKm>)75WJvcM-Z7G0 z$9Qv)iAoK8mlf=0I}pV$Jna+=eo_}?)7oQC#vn^`7#?7- zkwDR3*%_>`7BVi8>@j5qS1-&i_~#|t?-bW@Q)QhOV4QnxYaly z@iUk)0y`=@ejdzvvyaGjeTAjZ;fWi_>KNE_$H8hAA_AmB7G^J)`3lHf`|s+jBX_wQ zIP(LwqVmW~yrw;v=RNW;YoO%?z`uUn%%Q=1(EdeecM~#8n}BM4R1)jx2an1I{#Kv0 zgQO9_u_9`6VRz2(=UL>qykQz4f}<#JyZw!Oa(-|4L-XAdZDUV(($ZiwN3s4F z(BE~+02@?BhB1Ni;&s2Dq=N*{;l)J}4Sxc^X97=7gRlA6@e)=k2}`_#mJ5Lwc7wg9 zz+wmCL%Sf$Y)Eq-wta$mp5o^ez~KyxDHSw)2f5Fpz|b7O39^rfKzhlLM z;Uve5hu{Zc>;%?mV-0(-SNvJ1z1TI+pv7L$@*P<4C9Dt)sh-1bCQgA*u!V$%{E}q_ zQ~f_ee-B^z3SIasuwSrVKSO#3R&WUs@Bqf}b08BduMYfv9X=lkxgKMz57-qt?Cy_Y zU%((tWUsDc4<4ZzSlc6biW9cDi{0`D>)wp-&#<0du;n7h?^8 z<%>gab?{RF7=sVG*@kiaBYNOF$MNn{&|?dDNCPSj&l!NR&%#H(VEyla^9z8pC1S-b zzz!N>hfiYvB6l&Ib%aL>*eDp${VR4#GK?J$8I~b#{ewJpH~8Bwu;=^uT87`+;q@WV zLvU)<}5v9%Q%IAaWdrc79Ky8(@T#9x2nEB>!;E<=Bp;m`h> z_eZ=I0S@NRKKQHCKOl8DBCS6+TpluXfzHOWQP^kgAYo7Vcs1l^hC#-Huv0Mn?-xdR z1KnT1O!uLsU65xf^@gXnp{|ISEpZlofDFl@x$^KB2mTd8US}xq&qAC(bAW2w!P7JU zW#|Tchhbm&{r@V)ybl>4Va+?SSEk@=2jbZVta&9k-fEmmgE31P%7W9U0ac*sG!fBd zD)!PwGkc#17Bm&Hl&TuZQT#GO~cbne{C;yI-Td@+la2IOncwgIuSbp zm$(hBuD2a+37Mv@#cxf~Gbmr|4@XJY_=FGUPrZYCfxTKE>#L|A5gXzbd5Vf@sAJAo zR}yBhHqLC`7HXt^Pu-B|oYl=GiBp`JtD>@IfZ1OxG_zMbFrWOnCW?EU&}yQk_Nm@~+w&#`alhnyMBDQt^g!*kd8 z?uc@AvLhW`oe$J!Ut@21*Bk4+_JloGjjh`9q(({Itkr5DD)gu9D0!Bh)+?}PYKUR0 zc>xER(^?KDI#e}C>>RjM#rs+b(}I+Qhy_>8fjG! zC&VKD#G2v+P5|HC$j=6r(qM=j$y9QoO4ZlPx)xmE)Bs4@$cgRK%^58?8sl~b!G zmZ;&{ZDrXW6(S1B41B6Mo(lNWj3nl*vLvy zSN@2f*MiwF>Mm|*N9|SSW)`iQ+q0C9a;h`ta{D>$Vi~L!bY2`$?{Z2I%WpBbh_B5M#Au`djr%hKZa&_^ZryzC$XIy_2bZ zYblE>qgZFJq=q7+>9o&M1(}a3h}_QcMm@fr?_rh9kutS5RKKF7Mb>#a>RpeGAKC)T zXJ172IfZ_oMOkHKQ^wGtaG0uasqR^YSXI57Xel1bUo4$N(*$ckGtt-3QYQCY@lIEl zkPRp&*HUd&Pd=v}Vk-Z^3prowvHXeFQ+En5KPI$~?48QP^XN|A%bq1`C~zkAjD6&1 z`CHKur+*hMy(;1zWMx(5X{u^x_ovT#13p-t!r4EAb5-ApqF60h+b3GH8+K)xg_f~) z)0+#%;8v$h$WwjJ-SXVXIju?b=# z_EUGhkOrt7l#x&6E>2*D{{T^}qBklS=w%vy?oN5A8tqdB)O@hS#p;JLVePG`(yyZY zz?K*27&uEPxZF9Q%+ahZU&hn&IChEpQx3kLo2(5l$A7TFd^x{^YHmAV&GqaA@(?|! z5xWf>))%Mv9Gn$nC>!*aj~=V@Y649I&e#Xkl!|`>W}kp+bWVN?jPjnpQpz6zv)ZT| zHG~u%RGG5^_snN*u$x%$nThBdFpy<*0i$ezmeQb#ofVjG4zPA8p8QQ;nB;?abKpc5 z^1|Iv(NBR@*2Ecnh_0$SsM-#v4XQ8g$7!trHMqfI5`p@@Q605gMFA!JgwIvtEBQ$1 z?K-=LD)=_6>6r;kB@SnD80PYKf}H?^9>ja{Oz1CY&ii5w8-R;a(NFbKH3S|k z1CF}`{SDK=2GG#I+vydLpHNSK2Cg>`r}$0Ge2Y4O z&usu&UV#za@ZYMy*I(IcV5)pT7A1h+2?*p9^f3n5!=%|Ph@V3p`5IzJE#&iSVe~Y> zBQ=5BcC&+jD_BwJi|9`y(ErdIJi88e@OMn`_u%en*?vg71?cS~xLpEJ0AWo(fp}^G z-!w!es})ezC$Pv)Kod*BJuiau?V*3bgxypht7{D_WCCBC4)j(A9*_jqR|qVT!^+Jd zM+l@ohwR2I^hxB$+KyqSTd?mfFq+Kxs}~5y4NPXhlPbY84}c^6i+2nG3Qd44(|}}O z0I8K?BQRGbtZgsiPY5iU2~Spq2mS|J6TBinP+4cT19_bj$QWEfZ^A$zu-f4368j?~ zo*EC7I}Lu>6X>crc%{FJR2=X6LFtjTzl;?erbXZb!O&v_5aw^-zzslx_kj{)V9f?V zvSp!@-q1=>j1dh?+Xr7=VM#ycuMM1f3i2L>{lb9dDnT2c@%~3ZextyoegTo*Kuw@1 zSf{@V^8}dv5Ainu_Xc97G+?d+v3vWl8Nk6! z!EgMWu^l9ff)tB@w+jPx{|hEO3mKq|=oqPpXG^h7u<|`1^`&4|3$V{`0`a|v3_CDi zMexP(u=yoec`KxKVl5mx8-+;n74lVu&qZN{epXcik+KsI{cqUIUmL!T-S79q!LZIo zc-u&5yEcB$i1+$CnEId|-5nY(3c39iv3Tg#du#Vbhs723gx0lO^+ijM(@`2y>dhu7zVts)^|IOOPuHDrKATEi=I!9#O_b=N~2 z&5W-<(0UwpZz^b1K^r09d;_rZn;2^jcHvo!>aQwC!viBRioZJNgNOKeZyCJS5MKNr zc4S^?IRj#8cS!25>*T~POvT<{)rS$mw`0|>Ve2p8K({eRdie5dypjkmn-S6ufZiHI zqfOx%WwB?vVEt|IdwqCxWk{b5b6$a*uOR6=cp)HV0G+tQ_{cc12 z^s|st_~+km+2Lb7FiH)q*x#|z1nX>%__hsa#}xQjcWBh##oQG?cZ8-ZKudnkSss4i zL`GvbEc5|;$%1d^fYtrg&i9aL4fx??M5+r|(KhUcJ^phB(Z|FqM-hRa;AekFKxKGu zXN+6}bJvCEL_Tnh4*o zhp!%ZrVuRD82;to=Q-e4ix4H^q0gJ}smGZ84s>!1o_h>Yb{_oAABTG2L@JN33OG?l z|K;)ha7NaE+&jQ>Yh&LOrPt~gaMfM)1qk*RMu|q$YmHo42Ud*#$9M2_+CjlZHes@l zs;{b~<>ISVX0}>HvEx>R*vqp~Q&9)G-x&c8yOiB0C?)S2_nlV?y&V_HOSzb;>#WAs z+TQ|;I0IsL7*#`_$0eCBk{|I+{Jt@;xa)y8mV1E+n;84e5^P5DMQ-);R>}xxtM3y; znt+b6|HbX~HMUOZ$>>7DPT$GUz3RGmfd13IV?USiJVd1m%)`68KRBm}s!4sUZQ9S=QtBs%-zi^L#?>^NpT@B z`PsO>O6bFU)75<|v#*tz!&@9IcDq%`cNtxtdF=M+IqvAa=nCOozKzlcrPyWWvh46Y zVqH>g&CM6V3f{(~cpYUKQ8&a?*EIpogZGu~jf zTLg&isyUT4X1aYUb>Jl5;KV-cj;pcxDxq({1z%dbc~C=@0X@SdoL6NzJF{L|_0VgH zDZb?9x1hX^9lrjotu;h_w?D#OmAqMflYAT1WqUZ^Xn2g>&f%)C_95WAvpf$Gu|ZAQ zVb#_d!u$Iga!0@cZ$7h0;5SzSf9?BM>{PwHM|c*`m88DjE9@2v^flIVvYNDCwzD1J ze7|LJUj@%7YoP0k-dp}-G~)C07>&dOWR%t#ZPdT2q&O#Xi<2sw_S{&9&eDvI*L*X* zbMAH2@h$ef)JuvAW@mGTz12=9+w!)uq1n+Is4`On84CVThP_u+?IBiqRB#gHd%A60 z(#L8IjUdN)_D0PWD@A>3FM{;1teRS*{^2Q6L2jU!x~MwxBDB~lAYa;P>^r`r)KD$7 zNAfG$6Mj(ZudU+0_!6nfq4o~DrL|gqMjzijc0gOKpA>ER60r^Sj0JoOZ5OxrZqzr{ z;G}V}%=9mh;WL;(hw3h^sJO{bs~T*xm73P^%5u8QBk!pP_I2yDDo97wT$RM%iM)Is z-87e5*X-1MD{sq|Q>f^#trg!z4gN#;R7zDw7NMSY8(YzH`y4MLc7Wl!MI%A9N9?;ppY6fsB-ues#QY<~D$VWaqjlxW#6HJRBTO5_8msCwRz=B1Rtfpo z4wS3qbvur#vos{sG-{}25=(7izmxgwe!jQvhQ57fkky8wgoW&MAMQa9_-pE<-O!SW z>UuA2xhR18WHjr*zw33i*G6~9F$d?~Tk(O9knzgU+gYWP8mpVEzc=2SQ4X+nt1Kc| zZMV}QvWB1{V#>k1omdDycumUye)WJ|S1s9bJ^*J}Yt}4nmmXb zREeIe`*MlBk+Sn^^0HN#mC@boms-Z+MQg3Hwo1%|4ByZ%m|!&nTit^U*C&2iTaJp^ z4L%7>!Yy@tcggS8IQx<8W&7;M_H{d0ewT+3IrjrK_F(%|cY263m8%OfSWM88gEfuQ zn(85XA+0KEWUIk-_Nw!AUmWIP$a{BXoB3<_L6UmRTk|Qv&Erw&^B8^NCfAr-^=YV$+fw4IK}@`A$63&Gkp)kXdEo!ls&D}xA~ z`laL&+`+jd56kvI*0)hVZH7AK9OmX4yklZ97?j|^aGojBr5*3X{ z=*Z3p23{0ctPm@SHQCAmZatf&q}>Xgb9@auhHPq4u(TA^ROMwkP!&!K^mCM&03mOo zbm)`$gzRW*toH@&MHS?j>Pnr_rL!N{YC1666;xsdqN0@^m?Y*ex{l_pcz;xl>fsFT z$cKT6zXw7N0e*N0w6P4>?Uxz`PO}3idMO}?oX8?4M@RoaV3*`{U-p-%+A9GGFTs+F z;AK^TJVMdi{s3I`DL76zDj9QtMN6X|5CH`E95vIgY!|Y}Z|Ep<@g6|3_3>;8@S4s* z5XsPAUkymR8S(|kPzB5mMAH&j=M)&0fS&3g1MnD#<|{hJUIFiI0Ru%>9P5Ud{TOU& zJ-jIum_k2f{7-_>+{5gXf!IQTXfgm{*Fyx31}{hn&eIolyl$8$GrXrLtgPPkT5%N;b`b@4A9RBtiK#GY^A6cP*x)5`G9`@Bp|<@Kx0MWmkFqp zH3TAS4s>-Bb=bK;iun+u)&Vi?z`sL4aT$Ta?f@M{f>%c)lX43lagVZqjdX#Y!XUw0 zFp;V35Z;>{82uTzQ9tOV8tS6G@MLvptrKi_3M^^|WG#kg{FUej&`2bttBXwgY9PrK ze-UmRYHN?+_0hm>Cx8rJ;JHb_v;wSo6ZULPR1z}+^ZC0j{S~Gv@Irq#b_lqYA1}8D zQ|k|$*#WGwG_+U{x*WoeLb}ypdj8vd!R#Pz2Xseev=K%ghD!B&+_`CudkU=~_h9sA zwFH{o3AC63sIU*B-g~TgCuHGZ3!|};6+q4Nk!vUnTdo0)%>|2PgC;IQR(~gITG;Fn zY6Tro-Ma=hG8Oyb2lVz3F|j%No4q`1)@V#PK&m}xl4Srb;Blx>cy94Xj z!wxtOnGRqt=Ee>Q!;^mQmj<}_HEjAB`)VnTM5S^xnA9OixfC+og{2d~dPZYCxA6Nr z)Sv@Uz5ERibRrAz15eDt^Ecrm8&K!@7g?0C_<19;Bh_KEM$qvQu#y!xk%O@V8P3Gq z@U01`VebRy?+AY>37vNW-}wN0wFB452DysC1_JD)F?9S23?>0=U^zyNf;HQN6Q6^G z)9^0=d%}P`JHc4)fcZRxBs(zY9q`OYko_6tI|N zLlyBHaketLf8A+44$A$fq&KxAYxo%CBTogt(LbOEZttDLv1#YP&3|% zrZ^vH<$~LW7I#jkFje01$QIyrI)}ynJMx^%XWpYRkYP zDyeWb$QtEa&C1Ds$h(c?U0D`6-oEPTYB%@Xb)S=W?R#>asHUf)oV>JNgDe?CZo3$~ zdKe#X>@glYvxzrGGTxS&>WBGgtuVK6yKj;fCH9z4SUo)9zS;ITbEw>@ePTX#RS4}YJ14RjBlQUJ z61{@Y%yM>V+zT3Rua=Wg>6}5?*h1Gvtunu^9S9f`G(+3PS0Tr5ddL0=j4SSq;00ua zUfH;S+i4N3n?1$7P5JMkJ+mj1SG&SvSOYmpJ+y8sjgPl?+8;$`7uSV;(#XKa*gh+g zZfn2wBD!s4aP;BJk;NS>nf1f>$lioIa}PxY){l?XS{oG{%h)iph&kI%W>>Py%7b#A z-0v;z-K@AMgZ{5@$N7MEu1lhhvBBA#|KqKY7~-2{7r+U+NaQf2V~F!QZ>jCm{WpR4 zTO)8U^PTnBS6VJm`R$?BFmh=Jv~{Ah$gMTz|H}DxKb%&l%y?fB%EfW#MCH{v61&(-4XjF!fJoLqbP2vpUYs65&-TIY$i*0R0wj<22Pky#R*aos3DO=4S& z&PGqam$?mu=>RmGex7iuGL!|*xVVH|gD6Kl}jI@s|`KgrVJRJpBE1BWaT z)AX5Q2A`;Z)XVU!>M^P+O{ki^)?DukmCZyEI%e;o>{=1AT9s70SabA09#jeu_=QX_ zfz*&a&&*%5$GnlT)VM45QblzDclhdArGPT`pbMxCqVOE_0TtxQXq6QucObVFj2KNg zXM3Q&@Bz19@3Xw(Dp!02?(v=CB~X37K>1YxwhuTYIiCl_k{353Psqh;oO*y>$cpm2 zdaNp`{Ky`T!VTJ&auvp?!?NH;W_#6%6~?*#29f$2{{|FXN?WNv#hu;)S`STflQM9d zEyJzN+jdQilv{pPLlxPJRZg0rKC1QTYPzU$$aS(HZhoergVp@k%1I$dBybGa3m^cUHAfli90gs+Bl%#v)7C z2^EoFICt){J8U%{1%{Ctx$`6-;A7~=d&BedpSYvi4_(_=*<4_gP~^Z419ct-x>~9B zsn%+OoT4ICHk?z7!3oyj3|>GbaNl(n{!&EkKxbkgZhM+6o@d3qNgwaZzoSCB3l*=T zB9Si^WqA%{fUn~w=1Eo%r(#EnmtSz=tx;oDN7y7gx~i+9epC`CZ!=VFYEpTegDa^Y z`d6m_#~eiFEIaxQIsqY1;i&|PnIb|A62x>!0d;>FFa}~DphNND(X{SH^1v12;~F zkLBUDfNQz|?Tw&yY8~d!soJ4Bmk}s3NqtjGaHlg~Ek-W;0T2fR4%>+wJ4Y^eDX{Vl z^c{9U&qV{#8EZ{KR`Uo@-x^kizko&}(0McpxOXV5Hk=NFP1Q%nbpT6?oL^arQ5AqT z1Aw?*0vA33VrmcM^$1z*X5>KE;R;~mK<>|?_X6jbgB`YnJwpbZ0aI=S=a~caQ=Rn( zl3j<$I|BHq7x<1B_%1uVqaKibJ>;bs@Z4r#smnJU~T@-p16h?rlEVW1@iV~*;!z=o6z`ab{6s#!xPnjzK)(EveN)OL0iyqKR@P7w9egG^v85Q6#RF~^v)m1Tf zRje;RaCmz#lI{4t8RSI&5v+U|Iu7C&z}aRZx19s~rUGg~h2i0y;qQ0h`%_V?s)F(3 zX%M`)De5BG(GSfqcSTq#9-Y^hv2TNTAWx6e;Wn5+Va${d-0%*p?yndZ29s-#(^CiU ziN@bnvKL?nvoKpVp#0Y0J^n7gui&!&jz9mcy*TjSQjntry!0jZ_du-dAtXzHx4gsC zmEplN!An!~%kYDAsPn!LqI`mT{&69NBdYw&Y95TV zZTE*8VnkZhD!rebO_IHr3qK8Uu1a(2_w=vjGo($)V@uPN)Y)mk_XK&0#)}t8Q9n$6 zH*kG?OybmV)b4(!Rq;j|Pqdh;HFoz6nc|%Pb*vc>{yXtYVzZzKPfd9t;BsQkKU*Rq zljljisTGg7%qIGFx+>aJJWl0~&%m}ga+6Oq3)t)%%mPzgG*?$`Fgs@_AkZ*wT zFkZenYC_F`0V*y& zSHSA@EBR5YnDZYo+5N~4)Awp)^f78cVCRS+@Ala3p{bmy;}-EKXRpNmzUgAUuY{e+ z9O2gNOLA~xmc&cOIwPw&+3tWE%~AbW&pLd2%F{GgmoQ%h*2!c)GxMa+Hh_U$v@65u-YPqrVN9u1(h+fhnB#Rc}4kmEMS! zPu&ObsU1&v72iqrUEEEoVeVn`Wkwnou+-UE1+wniYHg@*K~h({h%;D^wDM{L9gB>A z5$UfWBYKCH@v+W+$SfUl)pFXhJ}V_=`6k*mMH*HE`*=D|xL8yeKC?607uC+%z~1mS z*sHz7ZZU~sc@r@Z)r_%}7N5~F!KcZY;-!7smw|F?pG7aVLN(`4fz&%<&p%P)*;Cv# zcq9s9KaAqFxkq~Jx|Co~R6)pL_1C&;Ws%u>ubtH9v$Enfzs`41KfX&}hHPUeaf<(z zqu5)$sx}d4LIy35V7Avg&s=5BHQQJRaE~F_s)!8nY@C{kKi6L(i`QE`HJa-Inx%g- zZiy7Y?E|TZP%M5b5P?tBj1t zCqL}bc5Cm|92J8+YcEw@EYkwD@*)EL{13Dst)Pg~PH36*x<-;XiPPvU6Edy2nTm*9 ze5s1D7J)N#Qp3&cwgb^3o?Ss^{tI$|#moRJB~7#~+=+_NBegDCFOgl%rE=&DD#(`M zW^bE@FMIW@*h6;&jd;(4yd~(TVdmGT-8((vKg0>kwOwII(Vl>UcY5ZQ!qdKt9 zUbcuY#%)12B6fFh;hA(=_Tkl$X+hP)=a^n&OyQ1oGWNv@#e{D~h^;r822 zE~!4U-!56&&ZUL}|@unE2!iw6F!yZ20j<0 ziXT5AMw{v&YRfUGjqgNmvJUuF21Mt*RFC14ad4k(j+mld=Na&MCFglwpxWEG&yf^HB%uds=m5o8S&ond?q+$6ZG6=Mec1Go*NI;-2}IkijWH@@j-CP{-|iQ#GQ&w==|9W zWZH*qMIB-Y(BZ$x`8@#3xq(b>JIFa1xN8k^<7-$}^or@cG~dmqLDoOG1(gj5uf<;s zoetP{I&$78fT~U*PMt(uB#0(pu2^Vb60+U1{hovFD*vsVkEmSF2A@erLgTY#D`0V6boP2b{giSY5%@aoe*+_#Ve_W{o|K%F1}Ri92kT+4ys z1V)$+UBzI|>gYe84^4fivcRf4@z0N{818wj0>U^41eYJUFAWg7{|0kK_{MJZ7qmt$ zwKtIHOK^oz=n|X_c^_i7(!ga?fQP2Q{>ys{X9m7k0yZxLF7g?; z^d+$UM&$fcAfK+ls{aL^oCpgAB1^p=9u$GS6NJo;7hmt8gU)zw0zCR0ICw!=>9YEc z>boCP`EP;wu&bYAKg~nVwi~KdrGZEnfGgI7tSeBt*aaJJgAV-F!Isd&N38J#u+>o@ zMJN1gCb$WK=XFGtW+XU;zrUzDJZv5KUlZ)lwuo@2;6ZDEr1t@{<^~=g0Eu@1$sa|h z{c*6G)3DHC>{L&I6#UL|{%E zJ3bZ~-hov#N6$x3_-qImf&U)j9U%7O@Qu}|xD0}p(!(c)LoyF`czI;wa>GN4!Fn9X zbus+08SWsIhs~y7zqk;4j^oZ>7ThXKg0=jg6!8tb;x&9}B1WEuuAaBB;ak`%4{pib z1q11TOnNggm4fhw;aE#yWcNNn!qb0mB347p?azlHI$ecNw*(j23*VcFy>SvgeG1Xb zKwO-Gc>A7?VON!hk1hkJs)03EfF|)N7W^|RXwPAxcHnYX=p^b1q`KgIEY3b~^b@J& zc=|jl3c<(+MYGKIQ2UV@gzlm`h~s;(r+@QWVlI2hw~1oNlMF^jYdbKM$!r?UmHAYA z=|it+IkmuALWx>c?YUUbTWjC+C&oM;#!BO!Z63Wlase4xF|C9aW<4>Pxy<+2%5QJ6 zoygj!m9wPN9_;&I_7G9{{JEzxjP}{4ua@VRXTECAjyVzo-Z*kNM?20sT+S&XpH|se z8qg}JwriR3j^6W!yp$>2$GlJ6_sw!*k-F$T=qVry>rSh$ub<_T8>|JM!````8NS^7 zfmViHuys3Hwx(J3AuENRBVdZNO2A{$hZS(#5L_;??wF_8=#c-y=LGc%hza`;R7SV8 zj@aA(=-ud}r<}Glc#=Ibc5veLq!o#Ky?xEWW+TVVpl6~n?KNL{`X+w&RQ6;@*zSF5 zef9kIEHD!Ihs50Ga($Zd-Zjgyli6Wozvywk1Z=4NXPQ~aqTFyyw&V}yl<2c(ya zaA)^0wRD69{O2x~w9!?VhQ&@!ick~XbK*7Jx$Tcz-~XbLo%K)6@4FM-i533rb*GbW ze2Jo9z*OGDSnfb?h3VlVjLks)YKz4pua;m&SyOmlYnHpc`P{eN+OKbQ>=)?el{Kv$bkgdV zFxFd@9n?`NgGV&C$(;4e<^JAYG%DSog@;y8-pS*4FQz=v(bl5LslT}Gsgg2%q)@Eyi z?854bUigHv^5O(;%tWK7eh6jd&9z(N1#WJSRrz^#?KmHcu7hXtGy2z0sRg_VtBqUl z88k$9HH=5<9cYX>!W?TownkXP?H~3T^$OS^IUkA>qb5zVa@c*<0_C%M%Tc%;-5HVa ztF}o$AU232hHcap&-KTSUdCBHzt&T<5==DYS5zw01g7%{wt;Tq?(r)*&0K1Kl?$y# z_7#~K*sKn23BOfUP`~d?MX;jX=s5T+S5gR{g($Ecy)==$nKo1F3GA6gbO+A84ZPM2 z*)bpq+_t@;&LAI<9P#Taa+-yqt7W*aT0&N}TgyZ8o3+9YR_nod+u(FAg?O|H{R*|w zvELi@?40NgV6>$LwG-kqZZ}K&ja@^IMitycmyu~TDUPqy zF7uMK8M}K0-gghTnHwO&X5{;23F}`OgRIPP>dZ?Ri=8`-5+X|AGjh-;A1A}qMS0wE zYvY_Ntm#0%eSL0UKS#8`IoWwQ`9f>1r<{?SzItNpONk$R`<)&ARbkggdyG4) z+~^(l%P_}>t_*(4Is}#o-{$)q_tC25p8uy4rN-@?Jwe^{r-8GK9on7t zC-zI$H=>zZiu+wQnj;1|++4{EY;00yUqyVnV12tcKHG7OFBW6=*L`Y}H$OGBcY8xU z>*Yrp;+swHjB&iVUCU9ycrRCqGjg?>;HVw2SgWEhbZw%XdKpI!naZr?7~ooCelgkx z|8#P?r22}>Y^B(3O%usPcB_iL46%HzyQA5`n&;c?X=9}Y+8rS4vijN&na}F09;pvz zVKb}MR?OA!r~rSbkzLTfjn4(007SZ(KQK=4CGOHI!GxS<%v1D*EYd^zueV zl}v5dt7yBq#~vqUivs91S%ki#OV%QFoqWhKH&y|xkeZIWAW9`zU(7e=cHcUgoi6&0 zS?|>`+?VX3GRq-!NPJei_*p$4F#bU8rqNz(5~MOJ6?kJ=|1 zuoYswc1zdwt>TkN6uY!7@cH|+0X2hZs7i796dZaTJE6VeU9|Ulyb)#;z-LFUm9JDD zeA4C?(`l8a2Da0B?aM)bj8}RmeW!DPBabR?rB@@YA?~ccy7-KO2DmFV#_np*w<7Ha z;)y}VXJeY9q25H8?4;S$d)1!Jn%eW^ZqyGqX`lE=ZLG1)S>14>TDF(H{$ERH0Up)W zG~g>MF(3g#Ah<(tEfjZmcPmz;(3a9daW7h^AT3bbB{&p{yUT|=K>{H{WaY~L&hkI| z1d`pmM`q@X&m8|1-&n&mvKVvB!u})v5%fQ3tmMZBx=R^@Cx4Ib*Rxqk{?_!)81J>b zF^1~zYT=vEi>kSfG5=zgKgRZBh`Q{&Twqy(aFOd#zepbNw><{{|zE z@40V0xjxOTipp~QCLQ!&w6R12W3{zvx_U}ErXJEy5LxSPr5Q7g8%9g(1b*Z0m5mBH%#$e+-d6l)yv2+O-XPH)Ws>=o|*YKJa!{1v`U5hsQC+}~>s<}rm z0|mXg8NQnJ^oAI&rqZ`yh;m9Tsq`oQpNyRriheT*n=Ib^(>{T3KA%z-8_+bH6GiZo z*W1~8WKDtVETZd5F10ARNdMsP>w*5fgzV?P(Vp|7Y4st#@+aC;s8R;KxdHm_GW&0A z)uPxElhL31px;U!%|!JeR-2dnkLqL{e8s#&h;n^JCfEhM@@{ljFWFJ!txVQH&P!AC zrm@vr&U`Pd){L|p59DU-g}m6b->CD{hgg&6C3jlsrVdlj(eLvQHLJEqb*mMzj1H1D z^9D`u2V!%_(U7lW<$ObrhTG(5oFYT61-X2ez~WeQlDWiuZZ0I(?0~&PX^2gkiwxDV z+BmI+mO>VDBl=$s#3JZQ=GZcI9X7-jGGscTZ6;YgS?zpl6kSTHSbNR<)IddGbFIR@ zib8|l!2CkZk+$YX7F(P}-^O)d6Z7Y_+p!usQIyZlz<#NS^D7ZjWaM z`(`%T^E0uOjzG;(aS{c^*XuF)9^*)x1W;_))Q-FJ+HY~L_Tuv#)E|fa+JQoe#(WlUkJ0|n;p;i8KR)= zv9d>F`A8&cIk{Hv(9J8_KH^*GGQ=mcQG3-D>uNMs$$V_B)rzh@!?te0>66-*Mp!^S zunad5FDXDAvMqMPd!i~sv17i5TeQJWT84c;9g9B(3&8}A&%nu#Sa2~!{w`sy{0ioN z#>?Qs)777tl+-7+#KSR+-AYBv*Lc&j5{cM}m;WVny2#FF|6zIXhSa5>Mid!6Q&{)E z*lX{}D(Z&yvH}=)V?`6O)XqZ{_lOfIc<*nJ16P6h#uH<~^T{5PSZi743t?56v4rSy zLPRPDRdQcKUE8qyPT~)k!TMKXaW{uzORF~P?S~cE8k_7-AhQv>?-ujWS65;@YA`;L zNc9y^>VxGK0-fx}s_X#dHMFLQ;MR+$=@NGK67by!+ER#p>?V?Umw03es`2t;<+aCJ z-ivK5af&CL(L^lB?bwV*pxX^tY;S?wG4jJyyiU*1^~AfBmyd2W$DLrc8kwNjK3oc(X3S z3)l0>Vs<{qddn?V8j&{(CfpF+m$2G%ZpH0aTShFTlC z4`qf<_yf8y!V*?CkKIVTQTpnAw3`R)@uArM?ciC`DPE}4L+w#x<}AeuXYk1gJOQ(r zeI4hpJCuBmzkg=zJB%Qm0kiT9-;d09@>4Ew5~a(`P@<-rc@Nyu-rO$00R*{); zP0ps!a}u=n1tZi0vx4tns%>4wI}N)Qe7ORix@gvsKR`=)S%uv3Abpiz^3)sl8He;v zCla3(sH&VM>3$Im1~cQ$JIiU4ZY7C$?><1Qk<8JD{VzdA_khCdLosCn>&_4CrSpn( zcYOeU&+@Hztf2tZCpT0`2gB#gdIX8F6X|x2SsxJ>xXODE`OFQSmJjTrA#_uZokRlb zuYqz;yvx$Zqy~Ekg&wN%TqT}X@qbIl%tU5MWBsyo>7RHRZn}j`(pYw=168RdE6KNu z138K1*96aE-A3_Fc1EEho4@+PHHYKBYtQE$fqgYjPXkVMA*|DTU^E?ixD8#M0qSiz zoznAB#;5|dNXN{(>_>X3Tt!x=0^jSLmy7JUD9{XJ1$E#zO`(n)JS#mQrT3|Lb`yYa z68dOPa9s$mY(uC@I<@rR^Hg}`8N8CaIE8zWdcULZ#4>Uy>nhF3s?Eu1&Z|CHZVC_k ziIY1M-{!ZRGnuVDyY9ui1K>PTT^!B4r-*gzfog6+eTR@3>%i4ew1QPo%UGaOgkAMP zw&jMaarTJCtbpVFgq-`DId|b({fZesvFe&++Wf=0>5hka4Al4#|Dr*6oJ?diUxKP6 zqd61##s7g@>8&~eui}4jt~^j+UU+RYp7Dw>!D%9fdMlM!@e-rHl$HSPT4m-Gw7W*eO7Y~JA z<4heR-cZzzLj%oE9$h`+U{jItB9oufiESVhKA4|*oZqoPsyQnk0;RQOw&rk^5y-z; zNcYPD{b>$74tszz{VX5@4uJbpoZn+;5aam$6LRhyxYgn58hZ_fgXmyCniC;4&UfKU zwcruo;nlrH<@YLVq1ntk2FzDt9rcLvybe5f3hF+_I?o1V!ZCEBqfp2PC}$V^;~Qvk z9it5b&k8$^;rlriJX`GR5fP^6ywe3*x`FI(^L^tq%uH5^@K+h{QVvF>hqg%$ww{EHbIdb>{9lBv zcV_c!(mQ2+Z@H2>hlXa!pRz8=%+e?%|GUJDW}$6Dop#N{a*iIsM&iDNBcWqMo_=_) zkIG!mI`38J&zL#kT1usqkH+A%j`3}^dSTB!<5QMJtq5M}>q>>!Z|?d^xXa;uua3?b z?fowJFZ~C_4DJ~klXg0}WacW)7rusSL~t7MERXy5j8>^5t!d6x+6<>7WO?T7Zq+|F zojY>KDt+nP8C*8Fkm?Vv9Ck+Qo#9p5INqqQGX|%0be+i9n6yUUsHCQx_L#vBtQ#qj zep5SOclG@3zo^dFV^iyRLe-64Z+xPsrMtcLL_6zf=KkI6YCE0dgJaA>87ti-T;1($ zz94s+JIKgxFCe?Ni}j=3)%jYz=#5s62R~OArpNjc9of|4_AULb^Cv69pQujt#(CEp zJBbq3Fn5|yl5F8^8c!xG4JTtl{~)N{=uFOzAXMi_V2zu8L3d!LTiaX)LLf_ z=f04F<`&iE9;#L|hZ^nuJN$>u8TK;szII=`uAbCxpqF1)qns11Sfhv|v*QcbmWL&1F>K1c>ndsl;{h#rJ zddX<&&!;rkPpZYtNW2igs-x_({%+P7Jz2{|HCe1ZTk|{CX>D~=tD_!uHg-GoN7|px ze-*#yh(A;x>D_fe&$yHO3x^xtX)>! zp;R_bIZB1z)$$p1(@+=Nv$V-7m54-^W*XV70%RmF#XiboJy5pjXYsMbsdLF4-KH!s z+89HL=YH+aYvxp6>8%|{)I_S(daJ}&?dgu;+9c(gTHK<0r~2O7Z@l$qv)3v&xWQ+e zQq@^Nrw$%pM<(T=S)5wTMs|YP(O=%*(zNi8UGVqt_4X~o&R=c1HLuS|TJJLR4V)s* zY)a0mPRz&a^BdL3kosi3B8U0_Tw{^q&_?U691FPbXr%s(T*&fTs5*;Ww4&Hy54F{5 zZDLOzs(EtKJ#RL(TZhS2eQx@E<9%N8F&bET&Gq(4b)A-1d&~}}SVfE}c+E*3^vjLT_t-17PR)}ur0(T{`yMj~? z7Wp%48aXD5kvApqiImrlYO}SzT5CN@PatBj10To{D%9$756?h#gW6IXL|tD;rK3H= znrC)46UcONf$xRN6)Nj?o5|$9)PgHkRDPqUa(3tUP6 zl-lY$JYKWNyzV6V$5<&2`id;UYM#P(*H~rA%DHR>*@@O3s@%#c&+v1!hVzy{raeKE zd`5?zNOCwnGS6z_wQb4yU!iVQ_aM>Mp%FAfK9G$={Pt%&F<$EyUX45KwWT^q?Z#S` zqh;3R7OvNL#6*vOj8rIwm!byn{1RDogPe(-#E(B=6-!soE=cHI%FpU*wG8q8*X-#C z^;<{z)&b7I3L+GXp~L3(1#*z2PA4xCBZ?WCquD)%qJBpM>Tl~v&%E@GsjN=H@_Rx@ zOo^~gV}EkDSUc?9?Z99ynS3R%+Z8muUC8ST*ba5cF8l{8_Bilq#CTKi9IVH_{U5r0 z41Io@paEV-F8_wr9!!tILF8!OK*JEt_#Bc``rE&=Cs9Y}BTKR%*?@WJbQ6n)bQet_ z8tL2~Jz^YQfTnbkID&kv1BE|8xBUT)O($0F1TVq%Iif8;A~n~7tqo`)1JK_JVW)YK z+u4xdZ;-?~)T38{rDsC;U(A% zvw`Drbi708Fsqp<1}!QQjqMjOJQ82!Sa4S!X|R+zKUq1z?hrhE6VQO~qpw~>+XzOp zi)6$eSc%QifQF-g4umpZV{1uw)mDrghc-Hc@dtzBLugf-(U02VS)EBn>_W6T>B(0K z&rUl=^#P%xXxVOHlp9LC2R*c5m)Fn^A7ES7V3cTjlKsLvx8WyMu@Y)vQJf)KzZ1SP zm$e>eeebZ0RMwFnO-OF5sD=*L0_|`h+WuVfI)4V9)3NyF#-4ceJgIa%h%P%43hc_+ z9|`uPE2w1L-a-#L0+mQVNa+wSw=QVxMCQ1_IeUN|mgB3PCYX zS?dS1uu$qR-;sG<6iRhq3*`l8j~P{NQ8iaz^vXRGy&9o_FrUYYuY?HK;2S()<~_tBA%P&rY6$ zN$K@cf|F%1f^?ruX4mqh^cLBN#Qqa)eH-{X$0+C7s~Zf+J&d)$e*tK)2-H@9Z@uBO zoO~jkPbBw!KmVrjX%6_^Q0Oy;GgTfqd}zzL8_)IGejfE8_EZwH{!yI@Xk;V1&ueSAl3{pI)+|6=XeS;=`a0XqTH zs#qgmv&#@Dr3O?YIT@AkPVC?`d4PN#c5K2AgLy*y0xDSh#E#`IileOH5j3!l{S?E> zmArfL$)&(Q?z2iic)!YQ3CzC>+i^2zWD@^h<+}$N<2`4-4s-f}b1u9$(mhmsauu43*piQ#paBc&5I@BCLqzGXxITkF&K9 zTe3UUG6qQ8WmRXPEa^ymg&EcZuWNW+_Ve3S_VI!FAG81J(DPGH*G)Lq|M+wt|K8wC zB~b^4zM9zS)T(f zQdEI%ZtT|z%+>|TRR>Nq5{}g#h?8$lA(eai;0q;K z(E}j;1N9I;!TWL}t9p~GI0U{k9v(gj&-4>`tMp0kiC=s^ym=IS`Wm+2OgzD>`F$(C z)m~8jr+~L98Cu)UZeOvQE1Ws$d9(+PD3Ozc;PnU)lG|8B8botWV(@Twfg_@&fWHBp z3c1_m2H%WDejea-JOOg$;01B)ECZ^Nir{Hb%Ue$MP*(XX)G-)&y9n+w0`4Za0rkiK zPzwlTgWsR$yj9{PPh;hh52^7C`IqeM7`P}$zR^vfX)#v=q{}2Ul%0(EnEa*utnUFZ z9Y!tG-&n$v>0%J3{)e=hjz{4#@OZ;2rRtnIHM9{WU=?RY2F>LOi43`+lNYR6B_AV> ztk;@>ZgP3R=TT_FO=g&MacT_>)P=UbK(gGzyO4oITL->+GG_)}I+a8g>Fx z6Tr5QbM-r8$FsiooVvIC77ga*EL7$!gmY$VGkzU7ZWQx&f#$>(m)>Qsv8j*qz1+Y& z2yeUr&d(EQQ_jUZY;p0IKIORvP$qX9;wAWs zeMkqSUSP8pyrnW@RN{Qz1MAn=O)Bt_{>Sf-Tv?GT_c+5>c>g8ii~rQm4sJoMsnG2M z;O;~I#()C{GUYP!t^>m>z>?e-^?|iZ-G-CTrC*q63*y0&J7t3TzcOnw*pUs#{Sq9@ z`{G3tZ>=BNJP&8u21eYR&E36X|&M4yfG&!kJlbFlX;NyFSOh-@q9pXV8ns zt_WC>S`xVlCM$DF&*_S+T5cZ_uX0|v?^{M!!JORU@S(k17ueqK}34VT{Z?fOCp%K0_G2Ju75)=3MV;@_OX_TRxml46Ie|MTx+Ouk~=$X zB9o=nY4%06Ho5ISB;Lz=fciu7d*eaA6lzZ`UN%0u`9V#hMDEMOZOJ`l{ISGXZ6Lt<=iS-Dt%7s zME4=RLdqLYVPk`Pwt2w*Lw^%|+@B}u3-YnvTYb!&?jpY9X??XY=a*@}r-VB?8gBI> z+}0But4{I`4*fH8=Cl;m8HEwU&n*NJAIqal&`KKye zbL8=4^Bh)YSasBzzOE^GoZqSS)AwhrcCAsnnc3X)tgU(pyNkNQNf+*n-#uGH9~DneDpbTIP&)Y~mcvcFb|n3&+{i*;SjTw{RWN_LASd$;@sY#ZIb4O>ZiG z%Q0p@s}vk9Ov&wg=^c?#-dEN?&|la$*Sp6k<9p(3Xy?{i*spyD$q2gP7-W|>8j(4X zkDj`P)QVJQA5)f?)wRaXcyizF>nHTlY8~ZgY7+We1x!^RR5)R=x_jk7jtL(Tr47<0Y4l5B>x+_{;;9k#vo^^QAA zBo+4a^sMIij9>Mx;N|`?I8SHN+FA!^H^)M~fGg3lhYn8*&9_FfS;(%W4%2UHWc68HkdAY$ zsm42RcTZb?tksnMudAtoy=9HyJPxKy&oOe@ZX<_ZCcCbb5}}PzJCm#N z47;crHO<+~qrR%XQs#SQ3^%uoql54a^_sF=?W|0;Cd>V=%3QT8zS+Urdo8Q}M9ZXX zrhC)B+5~kOxgk}k8W_zx|KROiO=ad$?iz8EIr5hCA7l5hu5$;9m(JSR=uffO%AhKD z2UUEF@wt~$|JJ&bb(26vMp1PHe9n!H_AgSj1ih3;D>dOgHP9joD zj6f6deYDDHDr^g`shau@>u-)6hE!$wT?XtUp{p)5LIU|MX*73o*YN4N#Bjd%V{t-(f z8`AhR_gsBR6@%PFJD5DiZB%F^n8(eX)>%626(Ad>GE`L;>30fQ@1kczb7XXHdjI7E1lZeY={5w*8derimf3kbJULaSyA)5@V z3BKxv_;{LH|8YudlTp-Jp>o8Ug4R_-=|EqhZ^g63t+Pi}mF@={fkkokFS5?cB0EfF zk!m2d&ZC#SAZC@*o^36qYVk|*0M1#X(ay?Qoy|oSb}P9)as%)^KK)3g%P=LY`WBk= z*)uqA4aw)x)jx>q7o(5)b1M#c8E;LcxAq%*J$T83$HXG@`WTwgRB|{x_zR99%bKV) z)$f2?DpGwgT2f)8&yVPi)6s|z+at)esKhNK(`fIM_aO6s*%ODhP=)G zNYfM4AH5{9w2kcjvT7(@-~IwKnmQI~I92hHiL`|EZbHK^jch)o90tFQ(W)|`v4xN= z_8W$i!m*Gy>aAv#e3UeB>*Jmhh0g-a!Jn@gnn zFFNjgbg~4rgfEE_K4euH=qV;WaOXpPmC*wZvnr`J7>TT&LPYCJ^v9;;%0UY`R>NI?%7iT;PjfDHAvE>(GO*_aAx{6n8GE^2rR>?2cKC3F; zi!rQjE*d~8BUD2FE(C;MQN1$`O8HgoK_1fYYCrCH%d6&~622M!)C%ZxbAUlf{w)K) zy2!WxV#K!OU#(~KpYT%NuvS^Kt)b);SD+{M3b;rC?1#JPE7`CyuPbiu(CMn~pcbr! z7NR|;zk@=3;vPCOl%Y#OIB=fETDTe=s1-sJX^Aef$+~WZ@_P<2sgT3d1RrP)`wf*& zFUh}qZ8gNEOGdBGj8@hk-_#s%wUAwuWK0vPi$ymti|r%&>NQp(_h~#s%j?DKD?G0o zz{MzFEB#bcupbt}l?&p_ya#+nq5t2+0;r9~eG$Ko+`6(29lSI*a3^r%R5`4UH9*>j z=PV0UFbS(86aRmY-8m3`P!!&fs9|!D+d74r=Hn-;fG4Xi zwpKY_wHY1R0Q?Svxo1RB9lCvF#&i~z@5len*-PE!&;-r6`YFIkO^<+6!2FUJ0_mL|3U^d1FlUt2Z?xi zCXip00LT0XT|NXmRP4Ts(C1m8cnJs1!O-@`A8p`}*fREI#%ZX)H^&~<+z zqoxP2pUJ-^(Som_51++fkR1(n8g@l8u$+t?XyG%s%Kv+??|QKNU(iN_IIVKe_z>Q6 zaq9kuRnnCc5Cg~Pz)Tg0_D$#f_veI;*i}1h z!(oh@1V3(%SD-!Ix&)Z2h&CJrtR$aCx@l*^M>~g^pR%hE@F=~`rUIMqk&w->yXL_? zqvQPbVzlS%?>6?1+=1SRm9@en(*_&h6Bysa`&WTneb!u;844j6u3+tt=Vu}3TkfSD z23>T4ilU*M?!fdmUWuAK-4u(mKL1B!Kh)>s7K7eb!zq8kI+NQgoy<@O4{05qsg6v) zg?%|3cs0QCAH&Szr7Da(*n?g1jQzYuj^tr1xvRM?uzLzET;_eb`$%HarNFcFd$`D| zrh>i6_@(x6lCNN+&g3;Q@Y)8n9+0=z7~A=8aPcLylLxDTt?}U?>k( z&Ic$!;bf*lnfuUQrm^1<(B4m+yMN(?58*EtfYKxE^t;$VFQCI1xSOFg+R;!%c>sVr&`B#A McRwV#A{Yy%e3oB9r` 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 literal 0 HcmV?d00001 diff --git a/src/data/sound/switch.wav b/src/data/sound/switch.wav new file mode 100644 index 0000000000000000000000000000000000000000..1d657dddd30a96910be5198cef19b8de52cf1e09 GIT binary patch literal 45256 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

-rQVz+VfO(*Duxrl1rLbXp1_?m?f?}$VVusr7}2mH>T!14(GeCE;wUWSs3X0r>cgecEiqRA!>;;3edsJ8FtfK*}G(`rpOLXO~dByAx|3f|VxV z&Jw7#pTk?=w6pxEZ=HZz<)(-THNvO`=}dYJwcQ%~0^hqd-HIsIFx2@j;2n57_<)yq zamaFR@I65-`69q9>tL&gJXL}Dqs2e3E;4MsLa0tUC z#8{OP>ymlJIE>Q;Y_~cNuMI}^o=fIU6K6ZU@!f8~0bW zAU!~&CiLC}0Rg2+M~VtaRRO`5DuU8cDJlYr6h%;q^p1d3>C$^A)X+O=+h)K2GyBQ@ zQpoPi+;Z-@=RD`!=d5tO%{hwhXzu{`b6e**|5F==zMh=n_=c7F7};EbHk-q18Y@B! zVfh?MYibv@UYjP6c8*GNJ ziAIfM1uUYa@tleZhjMVbpeqbvXYe#Meu=Dr4Ol7nu_5*#<&&_-#-q6|py_(En;ggb zoQs662ia{O{*!x5A=|$!7~b?87-+%dpBG<2irJ>e~g^ zUPp9HI(y37yxw5U!q|Pv4^-~s26B!Tfvf(^J(Ve_jJEk8h6h1#W5_V;hW)!1jc^YQ zp2Io6&>dYio-rQ7*@pUz^j^lTAlA+&%-K;a@V4lN5c}k5tmE^chwLJ6Auku~+E}2) zS&KQj{wUsgqFEe2;qpRuZ!75N5L4EVBA1U%_4JkGTL@AC!j8Kf+7?g1*{Ke^?AiL!{xQteSDy?x9;q1y!##B7%s_ZOVxYKZS-lzCeZzI_ckdKM%U!6E{ zHJl976L@Sj(Ww(zJzJ5Le;M~-p#0mA>IaD! z#rV>L8QU)GE-bA#IC&X16Rq4Zy-tAnb28&R5bt&pUgb4*i1)!{ zA0rQI@kCFe=emJCltx=U2EQ4PCb)*DmgDii@TKEK3t`c}VKM={;$=>jY9ifxm z2=DYuRzY(jM?mINRap%-)f}{=I%6Bp z`+GsCA}6Mr!8cmfhz5=M6MMN1(Y6cNEd$Vo@vLA#ZO+S9#b%n$j2gs?`{Il2$DYfF z_Wl5g8p1kj!mfClF)Yd{zHVU~grWynMIxisjNj(5Q@zAmZ^+oMC05-OKRFsn+zhX1 zPEK>bF!rGB@?h08LU+u-IxE5Hyb!uInp0+lSWV^egyzc1HM3A^7?z;e~8_yMExo$Q(^CFS_ zs^p%JL*_Ox#{04N{$%}pi0_`jo*JSRkFf>sutOZ>`iV$lblOEupu{JctA3tA>6_ApV?8GH17qb|{JTwQF zUyd)4haODDUd@1WxGGZlK5Mxr_IFvVp(UUbHof@(o9rci*=ekmXW%fEISVxst78+r zz0R|g!KCcum#mk=#N9Wc9}eI#cxb^8Y&H`cehAjAYq)W2|dF`&1%Ptnr-L-o(ku{+urS7@TY%dqW3fA!ti1Cte@1hcskH z+PIFho5!OsQ|U`>wC8wa=MP4CD>8A5NWF6QB*P`JjFmB59Gl`4`}Jt&T-hw-EXb+1 zG5CF%VFB#I4qubgPSg1OTv%xT1l!LD9SofUvFOTdj77J+aQ#9XDi8x2!>PoLoE>aO zmcZC>9P7ITnxZ9|mc1%=EY;+TEA@?1FoRiRFHGNiuHjLAvV50)e$E*=FJ;f1?Lg+T(N)~!H3YV2 zyq7j5W#r2*UdEFepItNDI zz`hvh=u1dHMC9^J>VUNMX}!{}rv8#zJ?&=t5B?LOY{oU~J`7wfqh@(K5Fe{+Zh^>1bwPsC$i2mjzetI!YO zRCxX8c-nfadk1?ex>uU<#>8+Q`)Kei@z9t+g}~2&#=%0!di(GWS2^>BHQn=G)RE}1 zF{NXsN5y&K%sk;C!S_JX)~6Rqe>MGZ`iqQT{Zn9|*y~zrzU?0DDc~LK9qn!B^}q#r z!+p#8$+V1y;Xh$Fiwl(Uf8i_YtL&TRtKq-n|0}RGcp+2*EC0Mwb{CF#li!y&?*grHO}badOcj$ZU*B(S7Jk{NKl)AH?Y&cfY%=Xn*lS}DwJez zag8@CyZd@tdw=!*>@Dh@>^TNYdrxZ&=&si_kL%wKPNAQ+KRXEK0b+J_Ls4L1S@7vE zU`N%#YWsq{Dlb^%Ml;Uchq?o;;L8{tb=UjMvy2$>0b`773ii%UY_89+TY82*4|WSQ zfmeTb#{7(2z9|3afkapYN4t(1^d5%lXXYZjrx#9a<_9bw4-t?i;4Ew0d0`95?^);0 z;ZCql800=tX<)c-WcriTt0}!xeoh&Y8c56R8x^Qw=QM6u?|EBCPl$OQGcM-y=rr#~ zp0n0Kv#rse{ck#ZRufL%y~KYVgf6;Bg@N`UxdlLvOd_REIZIsy_ReygoIex3;CgJt zSZUTucLuL%Ahq?ZZ$TyBHC|v7eu-6=4bJCI^w4V;4V4bI4*cQ&6t2?gfy=>`_UUkT zyuq2~N~#e&1c{%AFSs7>@eDY2TcbCe7DL^oJU@8Gd9rw_xl_!6#@g^vn84ofAIw;t zZloutwM%c8amjZgP{^L?$}q$3-rmAd1)>Ie+j%a-;&Khk)`u1T)E-RKJ3GGLaG1Vd z5Tz(>zGD=2ZLmv*<^?|V5Ax;l74U8J?e#Yc*05{4VyHgxu{-Q8?Yfdr{{np< z9bQbFY%YFa1+3`@FwptoGhc@;?!bBW@7b;Y;ly+!yG>|tFiY??#;Jk5HeA4%Xx_6D ziDdua9pXLenc&`O&Tv(>ql0Dq85tup_GN7GRVFeYhI!=+v%B?!b=vG{ObU+(Z3;B? zPxejlbpvv$Zl7?Cu}p8)=pHfu#x#j}9ChFGnf2T?$4(0FCNBMVU~VwhCL_z3Yx!VD zo#k2Rer9fTRkIHV=KGSTYi4eSn{ zwrd#MEZcK6Dn4de%ug|Aq9;bp_q4TsaUBhnChh&J^do8K(`L~6mHw5%WA<6sGBdk7 zg_;gq+zVhD8s>TlXIo1!$U~udjJOSl-Cir~KIbXn-3yCdnt9nZ-R=VuSUF!W@@B4O zJn_8?W8WgXk!v5>Hu=#N7HgY)1FO7Q+~@?}bPrbWqwsF#GW)=YVwhEpXW_y2Ik53p z{Y`u+8F_u%eHZ*)f~9OSsTj{E?ggITJ()dstYKz4)eP3*3!21!qh@N_2ROQ*3&2Nm& zt~KH5_L$JhU`^s88(~m9Y!`yv<7d`Jth=4Ny8AG-H`0we#C=B*Hy;5G@ey9uhiIi+ zy#B(H9}Y_WA~Y;mB9P!;;#=vf<*yVN5)6iZ4L6{Y#}(L`cerP{6Wl*pDdq?8_V>ol zJczg13$!Q}t7!nfbtiiojKpn&xrnZhfYbFy@Ww|(xVvDfjRpI83g5^Xtp54fdfkYX zhOlyf$5vfWbmd*pri;A041Hwd^+r2*>hpQnnAq1 zhgrz{2`>NguHj&Ljq%Y^LM`xF)}hk^L@%1bC@_O8xRrB`ujC7B)zA+c!jkdwc>x8x2 z7rhw5TKx^wh&l(@Z;wJ(gMmP+Kz{bc-DI&mh1E1Q)Ez|fk(~#uULz@)wLR!Kf8XkHxR@6(ZAe3G_WQ3Hq}qo z8O_O`sp)C%+2o#VJvGX?hTE@%@&q@)DwLV(AKzis*p}Bbh{{(v-Q&?`8Av3YhJhsx zgHN^Ky5M_osT{Ibg*jnMeB_K-(R$zN1?r;!gHcGha zhx^*oL+Qjxs|WML`cn(mpMGe(OTo_M-Q)so_|O<^Hn$F2+1>fvS*Q(k##&%ig!whv z9BdrM8h<<7%kCQL7;GOH=ubwIRPet-O{bHgH;9kjHSU=|TFGcwv@CY^Ol0~QDDf%0 zxK!k`1Bk~icz-71<$mabZJt=sS@@lEYx{8i!OXl!2!eFGokEO?^I zVsS>Z@A>h$$71z&MOIIO&P)N9JOWZ)hbUM_qbB2Tx@W>$-QGRKif5-wv8RUm!^izw zAT_W(xRR`2a$Wu}>}tTtA_>}k$2F5n?= z!w>6$2Urap_PE0mG9JX{2=yRp;pZ;J`&6cHKD?Vo_;KgqBHU&aHj%#YR7h1f!#Ky~)`BKUr7@gffyi{ZL$3J+Mc zC)que?3WdoUcgIG)gR?`XeUl+W#4Io7pIPF4ksnJ9eYJkn&eP0typz=%_03^Y8Yz3FHoX@E32|gFvX?4JVWL zu!Y~(x+;GN*(;4=K18DP>E?2@1ZNvVr_?W zY?_%y;8l=$J*^`Ur^5Bdim4E25fLh&zo6y$JpfUGz8*A6y(<9*Pc+ zb+HGVC+X1@;2>cmx(+jd*yMp8QLVA3lVBh1#=VrDh8qJ9oO}8?;JG(o&bGo}wwQU6W z+hsDj=HkTsPDKF8)sNGR+_hXfcRzUow63kX`cJOoB5k1X^>MI7S1| z3Slf6%opbWE6y+v|~SU84Ed0d=6dnI?wXrM|D9y z9}q8kn^?zZL=U#G{>u|l{Dzp~1W@5}^!Rfu&Ss$3ne8RyYJ3m!b30U&X!Qm=2gu4T zM|ac#eftET>IEY<$GF1kdx>Q;3x*=YSi(D{&>4|RyE;+-7x97bc=ZRJDo$qMIwB^D zZ+?nLIvai|4>y$|K#fct!u-`X2wGKmUX?Fug^G>a~EW*KTmDWTzm}r zIFb0*AyCqu;G-_13|Uc?K%}05m9BS9U_@Rci@;!4sEyQ)1fA`QRHY-ipMsbjN9VTz zM`_BgmTZ4S%RfdNlqQp`Kd)L~?K4v z`Z6NF(bvsL$YOL{KUP6$t`~#NKg`2A#&;Ea?N{`@9%yPlu-2;}MuO;$ z1#w?U|Bix?KfxmN@R`WTxW;7s^&;l*HTq{3mRF<-QDrnnDjHVIWV?8ZSYnFN<072> zd5YBS#}3@U{r+TZC-H>O$t(F8IXuk$bz;5z}lF}eK)X9l9(Z}Qxqqj{W`MTl6BFK@tw=8 z9^|!$2*~G1cr2V^>$vI**0Q3TUD5GFSq1CaEj)~JVjaa&zzg=fE#H%50oIcFR0Hm`gEok9z zP?X`mg;^h}6#fk9KZ}0b$-UMiO{%*!A04s=={wA9iAz9dUn?P{V(e*!MAb#ZDLNr8 zs{8C47ai$2#qY^TmpBt5rx`{V=Vw6*bp}^F6^9tH`>g+hw5$bf z?8y3P!kmb+NB7q$XPp-oAHhwYbdoC$px<=zO#Dzfb$O5Vo`NLm#CtZhM=9p6IkD;P z+)w;(b)B(OTx~j|Hj39c^z2Va+(!C%gUGE;Pm1^G9bO;Oh92~@5o2DAQPOEj7q**N zM^p)3=lpdZS+(FJ=b&}I{UsxLmG(dgX!}~8 zaE)>BFsFrCD`oJtw05&IZej`0S#6!A_p)lkXdayh7nh^{YB;h}fGf%(A?27QahQlH zB!jkHWd61j$6JKVN^kGuFLxR17^Jh5Ge%+?OGGP1lY{jLtL_TA@;ZG=p*7i=b+P?b zV~v$X6Y8|Q{^=ySW;@KvN=NdZAz|X0N#!?jk?35y&ee+pMc>6?;^Dd%jQJI3L{Ibm z9wVx`7biw3X0;a4znaW#TzP$b#65c5sJ7JnafsrqS;>WVR*|xTZ+dTU=KPIrETFmBdKxe7(dHtJfAP!=EXLOz z`Rm5BDll)inSnJ(>Sm-aos7FSPR`vNV&9|CK&|L~9G}t&(qqiqT4ZAxJrO_3YW9_e z?BvzRQJ=&*D$0)fggoCdC!Lh-q!P5?pasm3e-Bll( zw63v%sB)(88}>FL66ZrxKziZmC4>2{)r`tIH;ImfjZM^hn?}y{OL9(b*~>uI@{#{A znA0WGsj^lalr)jdluTq4%)tX3%Wm@p*xLr|)eG2_m#{zQ!E_q1d-2@Ou7O52Fz=P- zA7*c|C0l}T{R?8Z8INx^)t$GKbH2{rNzSXdAU)Iu-e50>3po>OtTHypHaw#h<{@yz z1z^Z+h<|R!2EK^@+yGfC%lwmZM|Al|`*Ns6Xe4J{4+RbdUIg9``oP{#*_Xo?UAu`M zB*Fx~0$%z&);RMV`8Iu-&9BKknvN!VogFcrQzQF%eMWv#HT>okRQzfK@9kk2gGYq& zVo}#ZTP3pZ+pZ6Y>3>bcJrfpweRk2`7=sna^)y#u5Y!ZKz-?I3y@(pzK>s(8Jn{Y^7a8)0ke!|)EgMd`LPXF zZL+)HH)?UdswHO=Du(}NY0c3ee#gm`jJy1|^ig+1=Q@GSBM*Mv5Ne4)N}nmwKj zj~U=U?Z7w&lDX&QQ@zj*ciF}7vASBJUpuo)oW%wy4;HkGQC^8x7==A@I^2U(Hv^2r zMws~ib^N?&V+g)PRT!<6Vf8h5NLDQ5`K;SZd@Uzua0x5BCf3;l&Zjkod$=lDaEp+W z+w3tz@VGi-<2J>bu8+0b5#Mb%R?J>@$1lKd8<1)HH&0tfE?7FNeibpV&+#Q6kw4xP zB)K#CVi2f7I{nEY8viTS;B73M+IYnY}kk%JdUPE|=}`4_Sk67jv4pt*~n-v^-QX2KV`7$0jU zy6;mwnKxO3CE2-3qanrS6T_}5UYGK`(+!Q#jMhA(UEh%h*BJk(HQA`^u^ft`Evq66 zx0t!Fus}aUTRsVQzb&)J9$V0nCZ8%z?b14 zPbF8SF3%RPNh;brFZX>Hq-YMAeT(_thnCpr^I!3HyW#n^MiK@fy=(c~O|+}Hho7(? zWI=+fVQIWYPaE;GEq>6~WL(}r$0mX_`p9VMfDJGTpYbHxOWDQyY(M!L9cke@wE7M9 z6;+_lNuwuXFe3TKE`A*)l->n*S% z(%H$rCIj|W(91OTgM1(%Lz#y=>hiu zk!!hT0pB@Ij;)!4cbYjisIJe0jd232LRRr|_Oug>K|yxb5%`k3U1!0@HsVd!hYNcO zo^m>f!dd$+*-gE$+mt`}4U)724e%Q|D0SIe&vTDeyu_M$iLnqPm@MH3NT7D~W7uJj z80AWg>yKb^XV}gDAxCpKqZ9EEw_*+ch7^Cv484nQ+8nH;7rJ37GnJi|593+O@a`Am ze~o5r8zOm8>}O{ft?lg08_>|Qm1f{W{E0R26dlu^)%`my-OO$|6^X5nkNF6TZ6VJY z2NE&@k8B)v^K?dGBeu6}jqA+JGy14=tDi78tH5A(v9@QTuiijrFEO4!A5^=@(JmDr)*<>xXEI?$e05>&ZSp0NknvFZudq=uHeezIabgGHPNuy1@8} zAt{PpigCk@g)9F+jCUs)B*8k3!ZqTT(X71AXq4eD>fH_G zT+FUJ8F8^A-$4Im;IqUyzF=;?=io`gbaK(=+(2ODfXF?j+}_I zR9Ybid!~;uy2$wa!^+&kYd1en@nm_$erGQ$NFT*a{|@rk65qHwav?rW;X%?|2hm+( zwG|(y(A!i;yX0qF6BwDov@1KU6ZfK+GR3@?!YYrjKgH4pvA2nFNo23o#y<77wq^&TFRC;|LR+ zW;Klw6(6CvN9D1LDayxRpF7&=87=km3GooiYd6t6;*@=iTwG^Hk{E%fjIj_Tjgb)J z=18yDg~ey(VT_Xb)Cph8U^NNHP_=UXUnsm78#VgkUleDWnEA!bC&o@;01urtCf+15;AQZx zP!*l-6OUjXMy3q?dJS!-H7#sST-%yCt?Ngu6Ja#_=;J?(jW7an#J%L{vLZFVVo%ME z#Qn!8YV)4>D8(o%-l%}n+6ZrDW~5!nidfi$w}>B6IG`8@qv)4GBtR82ZZHet!xeL> zc&Ws@Cw9CD-5J9`VFn z$Z!?(VkJk<3(ra6o!gA!6-Qf%(NWa~#4cM987jp1i_c6NL#&D!tS;eX!k#4c;vtmI zQKhBc;=(cdPZTsOP>hS6b^Nj9?Pzg zWgX!g7H_&fSCB6;@M>PQgLxP)NzEf#AdWm;B@9b^VOpJ0To+G|wT3IQhQ+d-jh0E5 zXl-3`*86#SFIH|bGfTURu`-YIj0l6JW=h%aieJb&5JPDO{Sad5;%Y=;= z-7CodCBsEnZM9zcf8qd5r59qe)DvYT z=@~A1Zqg!+uh>N;UE=Az&8O4@?HSTlV#|wX7R7h17*~W@S*;dlsrGlp%f#s`J5!AR zVucjCrg;&|a1O>VhSegLTGiDMcbY8D`?OZr*DHKly!fhcQi7QgFPTQAPr!O)48qB`5hB&je2E>f#Wt6ipPTA;BR>n@ekXq?tbJO}gPcN?1sz@~jMU1qj zUZri?wbU*l<`Kp=wLr6)l`$2cavW{fZ_+E`cJ=YDc(66o&v-^Uch!0nLv2JB)f24< z#TTTxwBJNne8ros3K3UmkyeQ8H%W1Xak&udq7<)kjF)!y+&o(-yd=@*NTi}-5pL0# z|JUS^RUi~pt@&@<#FG18MF;(^JzI8$FyUx=oW+?B*-o-!#7Z2+7=)c(JmEeM=$A%A zc87MgoP1KRIA@H-;x3l|WO{HGy?=u5;xCkiC4P6++7YfT+q0^p<5Vjpw=>6S%)5Bg z6_L^B#ozmqk<+M4l4UDMHpD!r6{np#omo~)L(vJzPXz6iv}opKM`%}x>@L!VVl<4R zSCSZ6YU*EP*H7hn;-bC9EQp~`no0bA;*C^1L9-_GL9Eg@kmuWcKE+v&V#AaiNWQeP zq+N6`jh1#vVg1FBCowaMn^Bb|4DO}XcaimTnWqZ-mR{GMC^;4yFHY?+b0h0d)}Z!l z*;K;zC5PGr)q`A4FT}|ou^7czoyy&wF;*`aE3Ih`opL9`xu?cUV=3F`G4DR(cS)hR zjHUCna>dsxJ4)3uuJO9X6=JL`N)PH_{peMW9W)OulSUQ$>ly5I`5}sHNweo=t`*&{ ziEU5<`N-^812>Rx@n7cU4*iK(ZY83)6om5{INKQVYQ}{6avriWreT!?FqSUYlu14^_HDCSlRzDV_3%3jN1O! zg4^uc#waVnlSnT6tKQn=GUqjmx~kjX1m6gJ>MulA_jmrpz^%abU?#gyIN3GGOtQ** zUWKD?leen3t|!T=We#zzvNMIY29Em&_-Fd71S$mIA^&y?Cx8AX_hAAvAuU{(tdG`4 zA@i*H0TnR2SqIFM{Kit!Gk@KXt@qCxVYV>KH7}@VRo!fIOT5)hB{-O=q53qP0}1 zLoZcjxy}0%z;DyZja`jw7-S3F4EHC8t`7_q`{Cy3N;@WT)oM_?qMXOcOK!`!a{s4>33p#$B_|FUv|ep89VXG=DM;HJ=(DX{)0mU*MPYvE z3SxH48ILXCX*tLneT7WXU1UeSgGM_BiuMMrK4l*x<1>~_vX$uOVW5-+h|s-5hGS0S z2&iLG_-h6e2MLk^eSkc`BNfKjdhg&ITFMSXU0Kku#rryd6KJCun2Ds*TJHgFdZ z&559|0~ysS=vY}SszD^1`3^hAJ-(#5RX?aScYlvojpH?z*)0P~JDm}+Y5h7{a+uR^ zbr|&%w4*g>?;l|1YeD$uph3O^FP#VSxs9CqxuCQa@Do%O@hdQ@1t34EXz4nPcwJ`V z1$fza#5Nlc(OkMFrShBXy~2;JfxKQ3B#LND73vXGN=sZxznIKEb$kAC$c_s2>E-@NA!IHM)<6dTEsK%34l8?UMaBL;n zT3NYYWuC0F!lRhIFNx{51`8;NOl4+A6c@WJ-XK>TLn|!jNh`qeRXIvX;Uj0KlwG5- zl{G9s;~{_bA_k$(FWB9Q`SX&JoJ`iYqUWMRJE!EPkh0e z_!~rYj)PSH>frOr^vLX3(?a!Yab(%o?qJ8J7buc z3(Ux$%+54c!ZJ{(=d8L0=$FyV;*ZGJSg`N5+_x~#*Z9gyRfPrNRjTRsEw4$8^g>#8 zoZbrQ5-+w!$HHq?bpzQOLfe$JBVOg^JVDtz_34+YoFy`M(Re*~83W;t%DR$ABx_1l zdsJ&e=z!{VZDmG<_Rj}XUdax;={*FLL ze$1yU@hqVzryV?E8=pGj^gtOY`50+g{>p9eF>aUnlxjg;VNTMJvpBAX7V z0X|cMnG_n`lo>3^=WS;1CNd{fT?k;b<6G2WHs0j96&M56f{HNUE8Ai(zpL_zyam;* zid39XRSe}6rSTG;Af2S#6mewxX`}G6H=Q}EOD`%jzImOQ6fUE>j6!Qwoj~?(Zbnj- zfa3Y7tgg)THihvQ$GfTo9zxQt@>$8IxYAX3tR}m(s^h8hmXN7*W+*qUujI(p>x^4Y zMoksSc7T_yLf0!sCcbm!2`a}+HN$GKYQ^X!j{Y{>Gm*Jb4$$9xT4O1MZ9Q1Mu+x*Y zN44fGt}IC#nu30RjCT9Pk%vY+yCm`(iMhxZm;Wxm`a0usnbAJS3OLDkm~tH(SlUbV zJ>-+f7m3tsQtek^22bdd{8BNVr{KqCXO=1=8TGIyq+{ag`wK?BmY4jhEU~5c9(b%>+$^J zXhF44o{H+C6OVrjCO; zm0-?1^!)*!moKPVFA-jO)f7{;4XrR$*SpFcR8dd}+(p`aiJwBK6!D5hC)7nhea3D( ziTz+0CqNXNDZuWLgbc4@KN2g__xxPIuAm%^Fm{2eLNsG+-eZKCvL=er7S-|G!*02l zsQNGH)1~xSxqDd{4aNTkV{?3t{I};?WoX^u-Q8TV4K(y5tx}ag<=JaTiR3buW?Z!M zRp+}jZNv-K4lIvbKEKeRBzkkz`K}6TkB~=srt-d3k1AReJs)8_F2+X)Uc^rq z>KLh05|MvNo)9@`54%Fv3Vaq~h1Y=ORdgG8|QFM^6)KB;Q`%zp8Huof8(I zyh2sTlE%}FXeJbQP2sMp2PKp@a)nSn<=Y9@(q63Dm94F6fU2gc{UFZKe5!nrpWoF( zp@%-c)DGD&`Yz8tK%0eJ{g=(B2!=30;XCS|a2@55+WhZ7L`NuIF`iHgX)nS&3D3~l zReq%^F{xgI>Mf~{LLjxaRmnklDFNaQ_!6H+9^u^Q5% zn4fk*)f-FU-4pBus{3)AmOWw=Wl@zvFVt~fHCO=&v`RRzat2l1@oy(P@o%K_m?L3| zg9;OsPEmyn*)+01RB1-_{jMPSN6;dw)o_dU#&Y+Xtg0^P`fjYJMqHPd*?CB7^|_sV z?cv^vYdoi~s;Z{_tPm|zwv0ZhN-+m$$5wQeETLrXn-h&u1KY7F*6UkN9}96`?W-CM z;b*E@vjbhTmlc)77)IjKk*IW6+R==blwjngf1f%UMw(sGVAZ|2%u`cYA^GT`>UY*d zH_4uiVc%BW%YV7E(3*>A4`p&F2BfD8g9;(Z!j6SCD@G#ir>caCTSy9(SE-#_5gXMu z6IQE8p6cx=ilEvrs#=!H`WFJFh@Y|tbULCGt=3ry?cK^Cl?|l2->P?`SeqBQ$jNiH zj)g#K#c7|A>?#HnMrt22lUJA@MNMz=1nCGxTO$?6gq13DP%*(G^j?+KB=4#^tZZVT zZaQxu+)LHY6j4wQBG!#+*yW+6TK&?zX~={$xN5ZtVbm_AEPdgKl3hg{xR~FC|K;Q^ zs)D8KQ~^eDWvxwJsrZ{LbLAzgN}H-)Dte`Ou`FJp&x+M4HX{us%vhgRopME8Z##Nk zwag60Tyd%5^jMV?i!xr)r!Q&ebw)CoanXv4*Z`^<7NQlZ!Y4iZ#94`oct)aVxmYm? zjF~deUquV(vsc(1_Of=iIWnReJEk)#+J~z<`*2yFo8OuD`;6xeKCg@o)n?WXrU-~~ zdCRk33+pXM8^wbsk3RY6l$s%jkSpQ3q+SIQrWM9)JiV|l9@sie68&r^1}3Dw%6kB~SRc^pxs~DgLC<7S^m4q4CnHP{lsIw4!xB zCxZLStB&Sc#X%JN*C_(!!D}B?lwQ%Q+qC~Ktrz>2&}d=ux+=1ZXXd^_vm-Ty6s=Jv zgEX`Ba2D>Xy+KjLNR&nUm?GIi{1qFx0N*YPzPzR3SBMDZk;0 zAwntIs7sLCkWw{VV`HXjNDxD&BPVC?{jGJs`#+vma%ZDhGlPQTRDV+M# zF`lHpnt}ab2*ltaDC7Xhf;QL}f5HS2F0!FMXUkpo5c!a&;8Oe*|Bf4ZxU6qS%hj9> z(=kxohdL~2H;2L=_!@1z3{jj6{}O-TTs}q3c@OvG6w+aqh!UxgNh|FomToPyB6x|m zP2a5T#cCWPd&>o?!p+=6gc&>aD!wN}xi*H1OzgyN+p;E6XXq%pXptDi;glrL$k)^p zYKxySj~dJ4GMdXF4R=5&uOpNDVjH{-UvZIiQ7jk3F0oC-flI!!9?^b$g~!BQt-6>% zAKICA5k-oD4%@LozYp(Q>As%SPVC245Rc!9h1ATvZ=I8iWgp1Xr#S-gFLEjU6+(Cs zjhDmiPiP-zIUYNk8kPEetqTm056wQNi|c4E{h#_&;Rj<>7pAkHT;#LLSG+k>9&TSV zW```Sr3JiePJ4d);g#Z5yuL<$-Lo~`lUqyPFI{E6hA&`+^F+0)dez(fvUycM8r_3B z1Qt4e;Zb&Vo~}JI!h>ej-5xT~+WPG9vsRV!obJ#zH7ENG;$yz5@=hfqD;JYL9Hu~D zR>gJSOve%TEk_}bwZ~TtEDbB!YCrRT85&-%VORmD7XS8aT}3%Ja^(ddtR3urUb^x5 zwi1TLVL|mb1f|f+H!q5RtGw;p6cSx)NJt;|Aya=-_tja?c#hRyvBxvKB-k4Q2kC!XcDuFlSO`ZaxvQPV%S`pFN#(iV7=A@_INu}?-3M&ou4b(;kE(qx!+}m%jDB!(vyVYJc#G|^uaZ-OJB)-rL z*GtzkJym{QxxjPcZMOHZ%+b3V=Y(6aX(AU;3Osb&a6Z%`WnXi-V*D&>rLn`~DAnV% z-r{pkw^$$&R|lIQ_f`)P8WhHlmD%S}2{gCR)?2IJtoC+KtVf z-b0nmz5RVltP`f&+-nXrADfw0usxQ;wF8bc=Of2WaShhXBzrCw>(K!%f)j#k1Q1-S z@>Lz9>kfbS5MvLz?SbC5-qU6@4tF*1n`6|3)>VTm>UdUFJ)!ejGkqpc^v0J(mkp@g zZs)*brHa#5x;MFMjd_x?wavy*rxZzcck2+PiV9(Jeaf-d$XW&lC57Crma8AI+f){p z=2zBptO;rt@^AN7a%JVJvVG+#<}w;)-S&p?D!0=S#h_=3i*}LK!o2PqFPG|xfg@bG zRk@X3zUi1`T*NXfrs}84METOayZV}ddyZJ%;!CUOQl4fNxPPos^Im_j{9<$tS8dSrcZ_VaTS|dl4;nY62ADCHi%+Vh|s%q$+X)m|GFc-ll_ci~$ z?&ro#F;Px16J&tniffp2oE{F3WNkU$t_z#7pEcS$!JGz$!=pR20-EmiR&4ZK^A$RF z1*~%I5ao7jbGcPwdFYKU^%Qtwe`&7v1zWe^f@_7}V(q*&+1E`O6$$P%)cR5-#a2(eXsiRq84ud&*j`j)uMCv4}>?C|XRp6wiU!QpDmI ze2rt_HnpR}6ajVc0Dg&q@F~o}Y`l;DVwe~sPD8xX%||qYX24q!rneSNxtF|Ttu+hH zM^=h`Nw$N#xC>8kTZP|PImq536R@5m*dV>5USGR``*0;T!3;=+S9n%*5sO8(Ae;oB z&~y8cHQRh@mRfV|FV!wM55v_i+Q&C(iCx={u@~A-`4_oWZNjZ`49({Z@W)Num)6K= zd4;CI1oRUh;7BNj9(WM1h*GVyF0^%OFXUrOZL|JVAFR!RBQ%JH(Q7)v4d4gxz%kGv zN$ulLsh`|!r`t%?)HeJcyW?K&p|qp3f4j_%u=Wf#UCJ2?dhiQ2QTG*e3B!S zTbQA~@`tLZt8i%_YYT*hFJU^ohlTjDc1PPUKEzKsL6ZG}bW=y3&pp(RE}{+mCnrE} zwYM_(TRJXp$)j|TkHQPMuKYz7_~B$6hc)p_=m7r*zr${PPYcpdYuREF7H|VflzZeg znLwGG4(A~g?(tj7qPJAW?_h6S2M4%}E)%FcqaYae@mO9@@w9?_;UJNW+juS=k^Z!U zbv%OKU>;oSGvF}VFcV}wZpL$CMXY507tnlH{n8l z3>j#m57W@V#?X&zadV}o)~fq?+){ZijpKPWTgt1X^D&aL1NBwN4aT1_3O|EMyo?^m z$1<5R$wQ}DgP9z}p&Y67ctfsIJ#45@ILkd0M(ZF>anFJo_#IxvIB`-O7BfW)QAdP{ zJIEL&QqTjp6yCA0M0H{lEa07rG4E3{={!*3Fdn{EuFnBeRE(~Q0ik?BRo9ii!Lzrc?WhDkU|xyeiz2k$~2 zPvuVhhHfdQtm7Np8s3349?DzzFcYtbKj8_SQ(T+}m*5fXR`qmO`Lu^NupgSL?p4Dg zm0>2YqAI16y#J5iOQHOX9#AAN=Vg4FT`(4OoPb>s@i)b`a`<2OAE;bX-~^Px_fQS; zc@3v3)O_rOFzBmTJ`=>*l{4eDJ47g7$bq)WQZ*qhZ<8n1Y9QT9@}_26&Rn@q*~2p-Ab z^LC!0{ue0x9&j(%4(lOaRRroh0C!ZiK9KMmd<%(CU&TpOSo{a}DL!vi$ahxV&!r}O zg!{u3mDA^ZkDk##xUrfXrEpN8?od4&0&~^<{faG#%Jm;t%I}L2SOF8@SH;{Ze4Qg< zi(*|9Rcp4IslW4AypVt3DqaHBuo0ewkKqg_Dp!4lZqhiGN^5!ShRZ722zo)e9INuX z4U1qt*WkGv1S3_iI%5pB1DDd|Ag&HCVT9sP3rOVx{vH})bH#&hilq;!KELA2&>jb2 n2iyz`xsGDM83@Irii4xzJU3>dwhFOlD&|^F;$SroH}QV~GR=dv literal 0 HcmV?d00001 diff --git a/src/data/sound/tock.wav b/src/data/sound/tock.wav new file mode 100644 index 0000000000000000000000000000000000000000..8d4d6169e88d4e56a97106932b55a20563c7a02c GIT binary patch literal 6220 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 y>RLJ~zCQCYy6{Tgd;E0M>l4p0uKPzMvxz*|-T literal 0 HcmV?d00001 diff --git a/src/data/sound/winding.wav b/src/data/sound/winding.wav new file mode 100644 index 0000000000000000000000000000000000000000..8ecfa4ae21600351fd3520fc43531ba12c3cce78 GIT binary patch literal 78072 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

^7lh~jHGJB1<^eY$*{N!m~;+0zB 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 literal 0 HcmV?d00001 diff --git a/src/ext/FiraMono-Bold.woff b/src/ext/FiraMono-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..0155c4800ad5c068e10c9afcc96824f5e50a4e45 GIT binary patch literal 70896 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±#18L#{O|O`oPyXCyWS$VC7m1Y+!f?;f~n z*RBKmcduLLuUltzI&JvdirVhJ`s(}dyXNY<*PM81*1{9pomQ*MWwp2n?}q6e&q-MS zw@UQ?Kdt5yYI!?1`R=P4e|qiqO|USs{0goHgO=j2b1l0z7M6Gl>vCrIA4P2y{l3bs!N$#N24_#ocNW^+9h<2= zk~6jksWGkvpd;Ms#5&x;>u~Z?N=Y2VQp!dzslQL*E{b3YAfxjm=w__P3x|i8w^zTgsaLg8}Swu6xa04rnr}l z-H0kM?inB$u9E28i|EyFP^y2t4RXKv{+0Ld*6r)CU3={k_?n;Fb>Drwe^EE4RW_;v zIiNG#7OPh;S@+@e9FU{YI4`dE3KA;5CTF0fvV>|r4SeS&V_;EZ>ng1IB02V^s+y1q zu3iiNSNA2KRL!Yx`U`gk{@dPiWZkq3 z{I8A^bleWC-w6Z6Nl`3 zug}bHEhb8Aefym90$+JS5Ua4Zmdkr~J-#}3b^d~$+?>Gty4IET+^?%Viw5f_#jktG z3(#H9TC&u#=t!9r^ze)7-wq`lH&{k`1TAp3WV~!K8Dz+mk{BdIVI!~JYz8Y)ZdA3Y z60CAfIvT6SU*(n=qsv==h4PV9ht*$>?$H;B_$Iz+<&nbBvLfF;-I(av&dUXddWfB2|+>QPLPlxv*d`4)fsG&roJj~}9 zW(lolbZj{fQ^~^|=3zd>ZH@Bv6!9?W6lMc>l81Q{!yM%C3Ggs(9_B3`=BF5D7vEMN z4`bkAp5b9mVVDExMVz;t+;NxmeFO1eM`6xmn7KSY0!$Hw*$8d`LaZVIX2;k{9>x;~ z^Lq)M{X9%Ah1m@5 z=bORJR6bol_7!{^w$uHth6yBZ^~EJGdw!&v`1uihdwNIbj2WFB(>G{MW}V(-()JAu z^!5x5L@EnB<)wx0a%wX?g?~H%8?oLAJgX!g4uCK-Q)5g&^*D>~7*j<-VrM%1XR8j) zTl4MqUhd@|(Ry#fKThI48bNP3Lqqpm$mxjH-y+bcZT_9Rt)eyQJT3u-bnnYPCC6l=P=+DH0_+dc&+v;7_!wIvjC zgoOPb8S(u}cBRR)PQ?te-Bqoi`#lIM(A4qSNFm+t!L}*sh~4k-2Tdwwm^ut_((%jZ zEo{mh@Ondy@8><#+dCyhNWgf#5m>=rraX~Fu6r1W-Ai4R11M{^iU~57FvRZ2=L6!q zMoF%E5UduG=c7vUd{i<3tU^aDBwU^tw1hgbdNMq6Z8iRHIU}m~DGcV

;L#`pG!0F7-BZKV3m`ef&vP<986dXLR&U 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 Nk%_?t0Jowit^h5Ul{^3d literal 0 HcmV?d00001 diff --git a/src/ext/FiraMono-Regular.woff b/src/ext/FiraMono-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..29db168f420bb53dce7e8c601bac2d0d6a0ca696 GIT binary patch literal 66176 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%0AT`)YjLNVb_?k>0G2m}TN)y_I#A+ZamyR+hVmSC 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π8f>?%S>0crUF#}o)BM@+_Am60 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

yBF|FlKjXWsm3j(!meMZd^-)hH&r*6Cd41H= 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�x|H*&wF=Vh~e*)pTb-{f!rf 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 z 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 jBe|tyZ)`=hChmu|J_!|5x`iIFBdp_fNQkJR5 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%0D%1v!RBj{9)?R@U`V5Xh=l z15tk;@kwyU@|BfwbyMUs;F=??yL)DAC_ggdR^q1dFP^b_cP`Q0)m+GrSBvGsN~chC z^XBFu(Ub1*zpA@@F`es9a<{n$PYh&Rt8O9KnJq)^2!9P~G3a{thJj|7FBJtY;5eHr z$yocdu*Ry~16y6qY^`OsS1TOx@Ks0Gf84ym%@=De=B=(imd!hCEt+v9wgvCM^&L*+ zb+OXh!>{T3e#gEI)*$BnvA(fuc-^hX9d>6Wz%sJ>kM6+s)#(H?9+pAg8%aa@!x*c`A!G z#xz_ppt-yK=I@T0gO29l#{$j4i}V)zBZKyaH}Wk3ye|ge>W43pAF@PW!8Zr5>^r~l z`+|7n=NZAT3!3=H1@ZUd)HXG{&^=tQU{$kS=7$D;+s$nc zw~7A)vrj!2000310ssF14|v*RU?37C0-+~^CzA;S1B=wZMND@8zk+CFafk>=1}c{f zgkB6@OdA;(nD~M6+F<#;|GzLv|NjEvp{RM!#19h(t9p+^-8)p%n0XND0QCetL3rA& zR%v(BMid=+$x4=zg%-6iV&XJdBNMg|z=R;#F_13K)=JPtik)=d_{49}uX!@D z9a@iUNvn)jqey05Qqra+sCp|&%e=qL%va4&!iY4HG}a7bXe95AF;p3Z(=F6@z9-Mdj0w@?m~NR_swhE7&F5S#jT&ywkm$#sVtFb;_3= zXakwb6enlP#ZtNz#!WlfjzSe-Z+$1khRqK3ZuO|BX*h5@BG(Pe5SGeU2(R)J%IzPL z)xzCWEPFJpB^x*%v|bj(zT^{VJ&u?X*NlN9x-&d3g1TRJ27w;c#{)msJ;iciLI7`L zSx;5MNib0oHb;`A4I}$jQof{;TK9_aQ$D8!d?oDHt{wg8j5ZE+#>evY(6N;hl^u^J zbe7B2sh!k3n$#dlNoRt`{5gQ~BbwmVHdYf@c{GJ%rcFpBBGAIUG#SJ)jU`PYXdX@L z&D}67v}@4W)z|okXY+j zmSu7^qeUii_1%!BlrQTvj)ELhC^lclxc;x{X-iBB-%sQ0?2t>(T>BEjGz;HmT#x2- zX0e<{oLQdJS)S$lIxDdJKxajk=XEy3($?89%MW!n!tx`Xjk3I;1x>i`V8}%nasdZO z7{bzlAuKP!5S9vtuv~y4EK4wiZ|>Zz=8?Q|>yBq0t=%+Vv4 zxu{%CWtYlm7mZ47$Wy|tl2rjm1GxOfbLw9is27jCK@O~W(q*#dmW^|jqft4&bw$gY z#?EDMtoqxBqkT@il=Wi%Pr?6cYic#SV$H#mtMD6!o@^(oHd*!Pny#FydUXB2sHm_O z=r@oGF<+7u+2GDZ2p^?sLp9LKA?7va9oqG}WzEgv{+k#f^QeCOHxwET+=H~Dq^zbm zYvuK}taQ(y0?q_WQq0Y~z7@X6$-J~*s-#a}Ef_`dZes|w=v7gGjTFDAWZ39!c8dWma znnmMP2kPcg^}XZl6FF;|Zn`HPdSBCuo8n?F7Fhc>2WhF03+noy!urwW;!-H}3Yw&Q z+ye{?4Cr?##m4_teQZ9@m8!z%IFfHC>e=XXF#7%n?7yRW0qFTLaJdGT=eo^_ryG4Z zQ=zNq#ri4w4a{0=c80D2H#FUVc*s$!Bd&4-?^Hidk2IGfJp_ELJ3>4F*aWZ`e4;y+ z(R>PEG@miY2l$*h44TYgu*Dn(+ss)5*kKNXUFI;@V-ABan6nP>C36^r%wZ5Qhrtu( z1OQK&!{96CF!-7|48CE`eSmM7!ysl3gM>K@_BGuagt^5Fx(n1cs0wso>IsW`SR86v z9k9RSg<*eh5VL!�x|H*&wF=Vh~e*)pTb-{f!rf`ny3){lg%pKGQEo z3%UMZM!riU2b5oEKIiwu`v;`NKoEG^WANU=a3UyTBO_y9>d z`&(-=urg?YI1W5v98Met>`JU+EUX+*p#(M`HcM7bW*H{15SPOhhz$-M5gVCPTsEqKc)K_n7#LX`I+8;oKuRKkz=0=% h!-d0$U4>PGg_TEZ2jl6Vt+UsA-nG}Wdo}r0 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%0AyyvU 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�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

yBF|FlKjXWsm3j(! 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�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%0D%8GQ!Ai?6y^fVUY%4hi>cI9O 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 tag) is all that's + necessary to enable these. + + Because the underlying API is poll-based, events will be + dispatched at most at the animation refresh rate. Inputs that + exist for less than this time may be dropped. + */ + + function empty () { return []; } + + if (!navigator.getGamepads) + navigator.getGamepads = ( + navigator.webkitGetGamepads + || navigator.mozGetGamepads + || empty); + if (navigator.getGamepads === empty) + return; + + var requestFrame = window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame; + + var PLATFORM = (navigator.platform || "Unknown") + "."; + + var MAPPINGS = { + // Maps the logical controller button/axis (the index) to the + // equivalent standard controller button/axis (the value), + // based on ID. + // + // This needs to be keyed to the underlying platform as well + // because mapping varies based on the USB stack in question. + // In theory this can go as far as multiple drivers for one OS + // with different mappings, but most platforms / devices have + // one canonical driver. + 'MacIntel.54c-268-PLAYSTATION(R)3 Controller': { + buttons: [8, 10, 11, 9, 12, 15, 13, 14, 6, 7, + 4, 5, 3, 1, 0, 2, 16], + axes: [0, 1, 2, 3] + } + }; + + var states = {}; + + function isPressed (button) { + return isFinite(button) ? button > 0.1 : button.pressed; + } + + function isAppropriateState (state, gamepad) { + return state + && state.id === gamepad.id + && state.buttons.length === gamepad.buttons.length + && state.axes.length === gamepad.axes.length; + } + + function makeState (gamepad) { + var buttons = []; + for (var i = 0; i < gamepad.buttons.length; ++i) + buttons.push(isPressed(gamepad.buttons[i])); + return { + buttons: buttons, + axes: gamepad.axes.slice(), + id: gamepad.id + }; + } + + function getState (gamepad) { + var state = states[gamepad.index]; + // Browsers that do not support the connected/disconnected + // events will silently swap in a new gamepad. Try to detect + // that and reset the state. + if (!isAppropriateState(state, gamepad)) + state = states[gamepad.index] = makeState(gamepad); + return state; + } + + function connected (event) { + states[event.gamepad.index] = makeState(event.gamepad); + } + + function disconnected (event) { + delete states[event.gamepad.index]; + } + + function buttonEvent (gamepad, button, pressed) { + var mapping = MAPPINGS[PLATFORM + gamepad.id]; + var mapped = gamepad.mapping === "standard" || !!mapping; + if (gamepad.mapping !== "standard" && mapping) + button = mapping.buttons[button]; + + return new CustomEvent( + pressed ? 'yuugamepadbuttondown' : 'yuugamepadbuttonup', + { detail: { gamepad: gamepad, mapped: mapped, button: button } }); + } + + function axisEvent (gamepad, axis, value) { + var mapping = MAPPINGS[PLATFORM + gamepad.id]; + var mapped = gamepad.mapping === "standard" || !!mapping; + if (gamepad.mapping !== "standard" && mapping) + axis = mapping.axes[axis]; + + return new CustomEvent( + 'yuugamepadaxismove', + { detail: { gamepad: gamepad, mapped: mapped, + axis: axis, value: value } }); + } + + function pumpGamepad (gamepad) { + var state = getState(gamepad); + for (var b = 0; b < gamepad.buttons.length; ++b) { + var wasPressed = isPressed(state.buttons[b]); + var nowPressed = isPressed(gamepad.buttons[b]); + if (wasPressed !== nowPressed) { + state.buttons[b] = nowPressed; + window.dispatchEvent(buttonEvent(gamepad, b, nowPressed)); + } + } + for (var a = 0; a < gamepad.axes.length; ++a) { + if (gamepad.axes[a] !== state.axes[a]) { + var value = state.axes[a] = gamepad.axes[a]; + window.dispatchEvent(axisEvent(gamepad, a, value)); + } + } + } + + function pump () { + var gamepads = navigator.getGamepads(); + for (var i = 0; i < gamepads.length; ++i) { + var gamepad = gamepads[i]; + if (!gamepad) + continue; + pumpGamepad(gamepad); + } + } + + requestFrame.call(window, function _ () { + pump(); + requestFrame.call(window, _); + }); + + window.addEventListener('gamepadconnected', connected); + window.addEventListener('gamepaddisconnected', disconnected); + +})(); diff --git a/src/ext/gl-matrix.js b/src/ext/gl-matrix.js new file mode 100644 index 0000000..3965a55 --- /dev/null +++ b/src/ext/gl-matrix.js @@ -0,0 +1,4248 @@ +/** + * @fileoverview gl-matrix - High performance matrix and vector operations + * @author Brandon Jones + * @author Colin MacKenzie IV + * @version 2.2.1 + */ + +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + + +(function(_global) { + "use strict"; + + var shim = {}; + if (typeof(exports) === 'undefined') { + if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + shim.exports = {}; + define(function() { + return shim.exports; + }); + } else { + // gl-matrix lives in a browser, define its namespaces in global + shim.exports = typeof(window) !== 'undefined' ? window : _global; + } + } + else { + // gl-matrix lives in commonjs, define its namespaces in exports + shim.exports = exports; + } + + (function(exports) { + /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + + +if(!GLMAT_EPSILON) { + var GLMAT_EPSILON = 0.000001; +} + +if(!GLMAT_ARRAY_TYPE) { + var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array; +} + +if(!GLMAT_RANDOM) { + var GLMAT_RANDOM = Math.random; +} + +/** + * @class Common utilities + * @name glMatrix + */ +var glMatrix = {}; + +/** + * Sets the type of array used when creating new vectors and matricies + * + * @param {Type} type Array type, such as Float32Array or Array + */ +glMatrix.setMatrixArrayType = function(type) { + GLMAT_ARRAY_TYPE = type; +} + +if(typeof(exports) !== 'undefined') { + exports.glMatrix = glMatrix; +} + +var degree = Math.PI / 180; + +/** +* Convert Degree To Radian +* +* @param {Number} Angle in Degrees +*/ +glMatrix.toRadian = function(a){ + return a * degree; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 2 Dimensional Vector + * @name vec2 + */ + +var vec2 = {}; + +/** + * Creates a new, empty vec2 + * + * @returns {vec2} a new 2D vector + */ +vec2.create = function() { + var out = new GLMAT_ARRAY_TYPE(2); + out[0] = 0; + out[1] = 0; + return out; +}; + +/** + * Creates a new vec2 initialized with values from an existing vector + * + * @param {vec2} a vector to clone + * @returns {vec2} a new 2D vector + */ +vec2.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(2); + out[0] = a[0]; + out[1] = a[1]; + return out; +}; + +/** + * Creates a new vec2 initialized with the given values + * + * @param {Number} x X component + * @param {Number} y Y component + * @returns {vec2} a new 2D vector + */ +vec2.fromValues = function(x, y) { + var out = new GLMAT_ARRAY_TYPE(2); + out[0] = x; + out[1] = y; + return out; +}; + +/** + * Copy the values from one vec2 to another + * + * @param {vec2} out the receiving vector + * @param {vec2} a the source vector + * @returns {vec2} out + */ +vec2.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + return out; +}; + +/** + * Set the components of a vec2 to the given values + * + * @param {vec2} out the receiving vector + * @param {Number} x X component + * @param {Number} y Y component + * @returns {vec2} out + */ +vec2.set = function(out, x, y) { + out[0] = x; + out[1] = y; + return out; +}; + +/** + * Adds two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.add = function(out, a, b) { + out[0] = a[0] + b[0]; + out[1] = a[1] + b[1]; + return out; +}; + +/** + * Subtracts vector b from vector a + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.subtract = function(out, a, b) { + out[0] = a[0] - b[0]; + out[1] = a[1] - b[1]; + return out; +}; + +/** + * Alias for {@link vec2.subtract} + * @function + */ +vec2.sub = vec2.subtract; + +/** + * Multiplies two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.multiply = function(out, a, b) { + out[0] = a[0] * b[0]; + out[1] = a[1] * b[1]; + return out; +}; + +/** + * Alias for {@link vec2.multiply} + * @function + */ +vec2.mul = vec2.multiply; + +/** + * Divides two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.divide = function(out, a, b) { + out[0] = a[0] / b[0]; + out[1] = a[1] / b[1]; + return out; +}; + +/** + * Alias for {@link vec2.divide} + * @function + */ +vec2.div = vec2.divide; + +/** + * Returns the minimum of two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.min = function(out, a, b) { + out[0] = Math.min(a[0], b[0]); + out[1] = Math.min(a[1], b[1]); + return out; +}; + +/** + * Returns the maximum of two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec2} out + */ +vec2.max = function(out, a, b) { + out[0] = Math.max(a[0], b[0]); + out[1] = Math.max(a[1], b[1]); + return out; +}; + +/** + * Scales a vec2 by a scalar number + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to scale + * @param {Number} b amount to scale the vector by + * @returns {vec2} out + */ +vec2.scale = function(out, a, b) { + out[0] = a[0] * b; + out[1] = a[1] * b; + return out; +}; + +/** + * Adds two vec2's after scaling the second operand by a scalar value + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @param {Number} scale the amount to scale b by before adding + * @returns {vec2} out + */ +vec2.scaleAndAdd = function(out, a, b, scale) { + out[0] = a[0] + (b[0] * scale); + out[1] = a[1] + (b[1] * scale); + return out; +}; + +/** + * Calculates the euclidian distance between two vec2's + * + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {Number} distance between a and b + */ +vec2.distance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1]; + return Math.sqrt(x*x + y*y); +}; + +/** + * Alias for {@link vec2.distance} + * @function + */ +vec2.dist = vec2.distance; + +/** + * Calculates the squared euclidian distance between two vec2's + * + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {Number} squared distance between a and b + */ +vec2.squaredDistance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1]; + return x*x + y*y; +}; + +/** + * Alias for {@link vec2.squaredDistance} + * @function + */ +vec2.sqrDist = vec2.squaredDistance; + +/** + * Calculates the length of a vec2 + * + * @param {vec2} a vector to calculate length of + * @returns {Number} length of a + */ +vec2.length = function (a) { + var x = a[0], + y = a[1]; + return Math.sqrt(x*x + y*y); +}; + +/** + * Alias for {@link vec2.length} + * @function + */ +vec2.len = vec2.length; + +/** + * Calculates the squared length of a vec2 + * + * @param {vec2} a vector to calculate squared length of + * @returns {Number} squared length of a + */ +vec2.squaredLength = function (a) { + var x = a[0], + y = a[1]; + return x*x + y*y; +}; + +/** + * Alias for {@link vec2.squaredLength} + * @function + */ +vec2.sqrLen = vec2.squaredLength; + +/** + * Negates the components of a vec2 + * + * @param {vec2} out the receiving vector + * @param {vec2} a vector to negate + * @returns {vec2} out + */ +vec2.negate = function(out, a) { + out[0] = -a[0]; + out[1] = -a[1]; + return out; +}; + +/** + * Normalize a vec2 + * + * @param {vec2} out the receiving vector + * @param {vec2} a vector to normalize + * @returns {vec2} out + */ +vec2.normalize = function(out, a) { + var x = a[0], + y = a[1]; + var len = x*x + y*y; + if (len > 0) { + //TODO: evaluate use of glm_invsqrt here? + len = 1 / Math.sqrt(len); + out[0] = a[0] * len; + out[1] = a[1] * len; + } + return out; +}; + +/** + * Calculates the dot product of two vec2's + * + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {Number} dot product of a and b + */ +vec2.dot = function (a, b) { + return a[0] * b[0] + a[1] * b[1]; +}; + +/** + * Computes the cross product of two vec2's + * Note that the cross product must by definition produce a 3D vector + * + * @param {vec3} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {vec3} out + */ +vec2.cross = function(out, a, b) { + var z = a[0] * b[1] - a[1] * b[0]; + out[0] = out[1] = 0; + out[2] = z; + return out; +}; + +/** + * Performs a linear interpolation between two vec2's + * + * @param {vec2} out the receiving vector + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @param {Number} t interpolation amount between the two inputs + * @returns {vec2} out + */ +vec2.lerp = function (out, a, b, t) { + var ax = a[0], + ay = a[1]; + out[0] = ax + t * (b[0] - ax); + out[1] = ay + t * (b[1] - ay); + return out; +}; + +/** + * Generates a random vector with the given scale + * + * @param {vec2} out the receiving vector + * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned + * @returns {vec2} out + */ +vec2.random = function (out, scale) { + scale = scale || 1.0; + var r = GLMAT_RANDOM() * 2.0 * Math.PI; + out[0] = Math.cos(r) * scale; + out[1] = Math.sin(r) * scale; + return out; +}; + +/** + * Transforms the vec2 with a mat2 + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to transform + * @param {mat2} m matrix to transform with + * @returns {vec2} out + */ +vec2.transformMat2 = function(out, a, m) { + var x = a[0], + y = a[1]; + out[0] = m[0] * x + m[2] * y; + out[1] = m[1] * x + m[3] * y; + return out; +}; + +/** + * Transforms the vec2 with a mat2d + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to transform + * @param {mat2d} m matrix to transform with + * @returns {vec2} out + */ +vec2.transformMat2d = function(out, a, m) { + var x = a[0], + y = a[1]; + out[0] = m[0] * x + m[2] * y + m[4]; + out[1] = m[1] * x + m[3] * y + m[5]; + return out; +}; + +/** + * Transforms the vec2 with a mat3 + * 3rd vector component is implicitly '1' + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to transform + * @param {mat3} m matrix to transform with + * @returns {vec2} out + */ +vec2.transformMat3 = function(out, a, m) { + var x = a[0], + y = a[1]; + out[0] = m[0] * x + m[3] * y + m[6]; + out[1] = m[1] * x + m[4] * y + m[7]; + return out; +}; + +/** + * Transforms the vec2 with a mat4 + * 3rd vector component is implicitly '0' + * 4th vector component is implicitly '1' + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to transform + * @param {mat4} m matrix to transform with + * @returns {vec2} out + */ +vec2.transformMat4 = function(out, a, m) { + var x = a[0], + y = a[1]; + out[0] = m[0] * x + m[4] * y + m[12]; + out[1] = m[1] * x + m[5] * y + m[13]; + return out; +}; + +/** + * Perform some operation over an array of vec2s. + * + * @param {Array} a the array of vectors to iterate over + * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed + * @param {Number} offset Number of elements to skip at the beginning of the array + * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array + * @param {Function} fn Function to call for each vector in the array + * @param {Object} [arg] additional argument to pass to fn + * @returns {Array} a + * @function + */ +vec2.forEach = (function() { + var vec = vec2.create(); + + return function(a, stride, offset, count, fn, arg) { + var i, l; + if(!stride) { + stride = 2; + } + + if(!offset) { + offset = 0; + } + + if(count) { + l = Math.min((count * stride) + offset, a.length); + } else { + l = a.length; + } + + for(i = offset; i < l; i += stride) { + vec[0] = a[i]; vec[1] = a[i+1]; + fn(vec, vec, arg); + a[i] = vec[0]; a[i+1] = vec[1]; + } + + return a; + }; +})(); + +/** + * Returns a string representation of a vector + * + * @param {vec2} vec vector to represent as a string + * @returns {String} string representation of the vector + */ +vec2.str = function (a) { + return 'vec2(' + a[0] + ', ' + a[1] + ')'; +}; + +if(typeof(exports) !== 'undefined') { + exports.vec2 = vec2; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 3 Dimensional Vector + * @name vec3 + */ + +var vec3 = {}; + +/** + * Creates a new, empty vec3 + * + * @returns {vec3} a new 3D vector + */ +vec3.create = function() { + var out = new GLMAT_ARRAY_TYPE(3); + out[0] = 0; + out[1] = 0; + out[2] = 0; + return out; +}; + +/** + * Creates a new vec3 initialized with values from an existing vector + * + * @param {vec3} a vector to clone + * @returns {vec3} a new 3D vector + */ +vec3.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(3); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + return out; +}; + +/** + * Creates a new vec3 initialized with the given values + * + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @returns {vec3} a new 3D vector + */ +vec3.fromValues = function(x, y, z) { + var out = new GLMAT_ARRAY_TYPE(3); + out[0] = x; + out[1] = y; + out[2] = z; + return out; +}; + +/** + * Copy the values from one vec3 to another + * + * @param {vec3} out the receiving vector + * @param {vec3} a the source vector + * @returns {vec3} out + */ +vec3.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + return out; +}; + +/** + * Set the components of a vec3 to the given values + * + * @param {vec3} out the receiving vector + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @returns {vec3} out + */ +vec3.set = function(out, x, y, z) { + out[0] = x; + out[1] = y; + out[2] = z; + return out; +}; + +/** + * Adds two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.add = function(out, a, b) { + out[0] = a[0] + b[0]; + out[1] = a[1] + b[1]; + out[2] = a[2] + b[2]; + return out; +}; + +/** + * Subtracts vector b from vector a + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.subtract = function(out, a, b) { + out[0] = a[0] - b[0]; + out[1] = a[1] - b[1]; + out[2] = a[2] - b[2]; + return out; +}; + +/** + * Alias for {@link vec3.subtract} + * @function + */ +vec3.sub = vec3.subtract; + +/** + * Multiplies two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.multiply = function(out, a, b) { + out[0] = a[0] * b[0]; + out[1] = a[1] * b[1]; + out[2] = a[2] * b[2]; + return out; +}; + +/** + * Alias for {@link vec3.multiply} + * @function + */ +vec3.mul = vec3.multiply; + +/** + * Divides two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.divide = function(out, a, b) { + out[0] = a[0] / b[0]; + out[1] = a[1] / b[1]; + out[2] = a[2] / b[2]; + return out; +}; + +/** + * Alias for {@link vec3.divide} + * @function + */ +vec3.div = vec3.divide; + +/** + * Returns the minimum of two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.min = function(out, a, b) { + out[0] = Math.min(a[0], b[0]); + out[1] = Math.min(a[1], b[1]); + out[2] = Math.min(a[2], b[2]); + return out; +}; + +/** + * Returns the maximum of two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.max = function(out, a, b) { + out[0] = Math.max(a[0], b[0]); + out[1] = Math.max(a[1], b[1]); + out[2] = Math.max(a[2], b[2]); + return out; +}; + +/** + * Scales a vec3 by a scalar number + * + * @param {vec3} out the receiving vector + * @param {vec3} a the vector to scale + * @param {Number} b amount to scale the vector by + * @returns {vec3} out + */ +vec3.scale = function(out, a, b) { + out[0] = a[0] * b; + out[1] = a[1] * b; + out[2] = a[2] * b; + return out; +}; + +/** + * Adds two vec3's after scaling the second operand by a scalar value + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @param {Number} scale the amount to scale b by before adding + * @returns {vec3} out + */ +vec3.scaleAndAdd = function(out, a, b, scale) { + out[0] = a[0] + (b[0] * scale); + out[1] = a[1] + (b[1] * scale); + out[2] = a[2] + (b[2] * scale); + return out; +}; + +/** + * Calculates the euclidian distance between two vec3's + * + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {Number} distance between a and b + */ +vec3.distance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1], + z = b[2] - a[2]; + return Math.sqrt(x*x + y*y + z*z); +}; + +/** + * Alias for {@link vec3.distance} + * @function + */ +vec3.dist = vec3.distance; + +/** + * Calculates the squared euclidian distance between two vec3's + * + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {Number} squared distance between a and b + */ +vec3.squaredDistance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1], + z = b[2] - a[2]; + return x*x + y*y + z*z; +}; + +/** + * Alias for {@link vec3.squaredDistance} + * @function + */ +vec3.sqrDist = vec3.squaredDistance; + +/** + * Calculates the length of a vec3 + * + * @param {vec3} a vector to calculate length of + * @returns {Number} length of a + */ +vec3.length = function (a) { + var x = a[0], + y = a[1], + z = a[2]; + return Math.sqrt(x*x + y*y + z*z); +}; + +/** + * Alias for {@link vec3.length} + * @function + */ +vec3.len = vec3.length; + +/** + * Calculates the squared length of a vec3 + * + * @param {vec3} a vector to calculate squared length of + * @returns {Number} squared length of a + */ +vec3.squaredLength = function (a) { + var x = a[0], + y = a[1], + z = a[2]; + return x*x + y*y + z*z; +}; + +/** + * Alias for {@link vec3.squaredLength} + * @function + */ +vec3.sqrLen = vec3.squaredLength; + +/** + * Negates the components of a vec3 + * + * @param {vec3} out the receiving vector + * @param {vec3} a vector to negate + * @returns {vec3} out + */ +vec3.negate = function(out, a) { + out[0] = -a[0]; + out[1] = -a[1]; + out[2] = -a[2]; + return out; +}; + +/** + * Normalize a vec3 + * + * @param {vec3} out the receiving vector + * @param {vec3} a vector to normalize + * @returns {vec3} out + */ +vec3.normalize = function(out, a) { + var x = a[0], + y = a[1], + z = a[2]; + var len = x*x + y*y + z*z; + if (len > 0) { + //TODO: evaluate use of glm_invsqrt here? + len = 1 / Math.sqrt(len); + out[0] = a[0] * len; + out[1] = a[1] * len; + out[2] = a[2] * len; + } + return out; +}; + +/** + * Calculates the dot product of two vec3's + * + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {Number} dot product of a and b + */ +vec3.dot = function (a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +}; + +/** + * Computes the cross product of two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @returns {vec3} out + */ +vec3.cross = function(out, a, b) { + var ax = a[0], ay = a[1], az = a[2], + bx = b[0], by = b[1], bz = b[2]; + + out[0] = ay * bz - az * by; + out[1] = az * bx - ax * bz; + out[2] = ax * by - ay * bx; + return out; +}; + +/** + * Performs a linear interpolation between two vec3's + * + * @param {vec3} out the receiving vector + * @param {vec3} a the first operand + * @param {vec3} b the second operand + * @param {Number} t interpolation amount between the two inputs + * @returns {vec3} out + */ +vec3.lerp = function (out, a, b, t) { + var ax = a[0], + ay = a[1], + az = a[2]; + out[0] = ax + t * (b[0] - ax); + out[1] = ay + t * (b[1] - ay); + out[2] = az + t * (b[2] - az); + return out; +}; + +/** + * Generates a random vector with the given scale + * + * @param {vec3} out the receiving vector + * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned + * @returns {vec3} out + */ +vec3.random = function (out, scale) { + scale = scale || 1.0; + + var r = GLMAT_RANDOM() * 2.0 * Math.PI; + var z = (GLMAT_RANDOM() * 2.0) - 1.0; + var zScale = Math.sqrt(1.0-z*z) * scale; + + out[0] = Math.cos(r) * zScale; + out[1] = Math.sin(r) * zScale; + out[2] = z * scale; + return out; +}; + +/** + * Transforms the vec3 with a mat4. + * 4th vector component is implicitly '1' + * + * @param {vec3} out the receiving vector + * @param {vec3} a the vector to transform + * @param {mat4} m matrix to transform with + * @returns {vec3} out + */ +vec3.transformMat4 = function(out, a, m) { + var x = a[0], y = a[1], z = a[2]; + out[0] = m[0] * x + m[4] * y + m[8] * z + m[12]; + out[1] = m[1] * x + m[5] * y + m[9] * z + m[13]; + out[2] = m[2] * x + m[6] * y + m[10] * z + m[14]; + return out; +}; + +/** + * Transforms the vec3 with a mat3. + * + * @param {vec3} out the receiving vector + * @param {vec3} a the vector to transform + * @param {mat4} m the 3x3 matrix to transform with + * @returns {vec3} out + */ +vec3.transformMat3 = function(out, a, m) { + var x = a[0], y = a[1], z = a[2]; + out[0] = x * m[0] + y * m[3] + z * m[6]; + out[1] = x * m[1] + y * m[4] + z * m[7]; + out[2] = x * m[2] + y * m[5] + z * m[8]; + return out; +}; + +/** + * Transforms the vec3 with a quat + * + * @param {vec3} out the receiving vector + * @param {vec3} a the vector to transform + * @param {quat} q quaternion to transform with + * @returns {vec3} out + */ +vec3.transformQuat = function(out, a, q) { + // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations + + var x = a[0], y = a[1], z = a[2], + qx = q[0], qy = q[1], qz = q[2], qw = q[3], + + // calculate quat * vec + ix = qw * x + qy * z - qz * y, + iy = qw * y + qz * x - qx * z, + iz = qw * z + qx * y - qy * x, + iw = -qx * x - qy * y - qz * z; + + // calculate result * inverse quat + out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy; + out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz; + out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx; + return out; +}; + +/* +* Rotate a 3D vector around the x-axis +* @param {vec3} out The receiving vec3 +* @param {vec3} a The vec3 point to rotate +* @param {vec3} b The origin of the rotation +* @param {Number} c The angle of rotation +* @returns {vec3} out +*/ +vec3.rotateX = function(out, a, b, c){ + var p = [], r=[]; + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + //perform rotation + r[0] = p[0]; + r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c); + r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c); + + //translate to correct position + out[0] = r[0] + b[0]; + out[1] = r[1] + b[1]; + out[2] = r[2] + b[2]; + + return out; +}; + +/* +* Rotate a 3D vector around the y-axis +* @param {vec3} out The receiving vec3 +* @param {vec3} a The vec3 point to rotate +* @param {vec3} b The origin of the rotation +* @param {Number} c The angle of rotation +* @returns {vec3} out +*/ +vec3.rotateY = function(out, a, b, c){ + var p = [], r=[]; + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + //perform rotation + r[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c); + r[1] = p[1]; + r[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c); + + //translate to correct position + out[0] = r[0] + b[0]; + out[1] = r[1] + b[1]; + out[2] = r[2] + b[2]; + + return out; +}; + +/* +* Rotate a 3D vector around the z-axis +* @param {vec3} out The receiving vec3 +* @param {vec3} a The vec3 point to rotate +* @param {vec3} b The origin of the rotation +* @param {Number} c The angle of rotation +* @returns {vec3} out +*/ +vec3.rotateZ = function(out, a, b, c){ + var p = [], r=[]; + //Translate point to the origin + p[0] = a[0] - b[0]; + p[1] = a[1] - b[1]; + p[2] = a[2] - b[2]; + + //perform rotation + r[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c); + r[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c); + r[2] = p[2]; + + //translate to correct position + out[0] = r[0] + b[0]; + out[1] = r[1] + b[1]; + out[2] = r[2] + b[2]; + + return out; +}; + +/** + * Perform some operation over an array of vec3s. + * + * @param {Array} a the array of vectors to iterate over + * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed + * @param {Number} offset Number of elements to skip at the beginning of the array + * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array + * @param {Function} fn Function to call for each vector in the array + * @param {Object} [arg] additional argument to pass to fn + * @returns {Array} a + * @function + */ +vec3.forEach = (function() { + var vec = vec3.create(); + + return function(a, stride, offset, count, fn, arg) { + var i, l; + if(!stride) { + stride = 3; + } + + if(!offset) { + offset = 0; + } + + if(count) { + l = Math.min((count * stride) + offset, a.length); + } else { + l = a.length; + } + + for(i = offset; i < l; i += stride) { + vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; + fn(vec, vec, arg); + a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; + } + + return a; + }; +})(); + +/** + * Returns a string representation of a vector + * + * @param {vec3} vec vector to represent as a string + * @returns {String} string representation of the vector + */ +vec3.str = function (a) { + return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')'; +}; + +if(typeof(exports) !== 'undefined') { + exports.vec3 = vec3; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 4 Dimensional Vector + * @name vec4 + */ + +var vec4 = {}; + +/** + * Creates a new, empty vec4 + * + * @returns {vec4} a new 4D vector + */ +vec4.create = function() { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 0; + return out; +}; + +/** + * Creates a new vec4 initialized with values from an existing vector + * + * @param {vec4} a vector to clone + * @returns {vec4} a new 4D vector + */ +vec4.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + return out; +}; + +/** + * Creates a new vec4 initialized with the given values + * + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @param {Number} w W component + * @returns {vec4} a new 4D vector + */ +vec4.fromValues = function(x, y, z, w) { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = x; + out[1] = y; + out[2] = z; + out[3] = w; + return out; +}; + +/** + * Copy the values from one vec4 to another + * + * @param {vec4} out the receiving vector + * @param {vec4} a the source vector + * @returns {vec4} out + */ +vec4.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + return out; +}; + +/** + * Set the components of a vec4 to the given values + * + * @param {vec4} out the receiving vector + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @param {Number} w W component + * @returns {vec4} out + */ +vec4.set = function(out, x, y, z, w) { + out[0] = x; + out[1] = y; + out[2] = z; + out[3] = w; + return out; +}; + +/** + * Adds two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.add = function(out, a, b) { + out[0] = a[0] + b[0]; + out[1] = a[1] + b[1]; + out[2] = a[2] + b[2]; + out[3] = a[3] + b[3]; + return out; +}; + +/** + * Subtracts vector b from vector a + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.subtract = function(out, a, b) { + out[0] = a[0] - b[0]; + out[1] = a[1] - b[1]; + out[2] = a[2] - b[2]; + out[3] = a[3] - b[3]; + return out; +}; + +/** + * Alias for {@link vec4.subtract} + * @function + */ +vec4.sub = vec4.subtract; + +/** + * Multiplies two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.multiply = function(out, a, b) { + out[0] = a[0] * b[0]; + out[1] = a[1] * b[1]; + out[2] = a[2] * b[2]; + out[3] = a[3] * b[3]; + return out; +}; + +/** + * Alias for {@link vec4.multiply} + * @function + */ +vec4.mul = vec4.multiply; + +/** + * Divides two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.divide = function(out, a, b) { + out[0] = a[0] / b[0]; + out[1] = a[1] / b[1]; + out[2] = a[2] / b[2]; + out[3] = a[3] / b[3]; + return out; +}; + +/** + * Alias for {@link vec4.divide} + * @function + */ +vec4.div = vec4.divide; + +/** + * Returns the minimum of two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.min = function(out, a, b) { + out[0] = Math.min(a[0], b[0]); + out[1] = Math.min(a[1], b[1]); + out[2] = Math.min(a[2], b[2]); + out[3] = Math.min(a[3], b[3]); + return out; +}; + +/** + * Returns the maximum of two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {vec4} out + */ +vec4.max = function(out, a, b) { + out[0] = Math.max(a[0], b[0]); + out[1] = Math.max(a[1], b[1]); + out[2] = Math.max(a[2], b[2]); + out[3] = Math.max(a[3], b[3]); + return out; +}; + +/** + * Scales a vec4 by a scalar number + * + * @param {vec4} out the receiving vector + * @param {vec4} a the vector to scale + * @param {Number} b amount to scale the vector by + * @returns {vec4} out + */ +vec4.scale = function(out, a, b) { + out[0] = a[0] * b; + out[1] = a[1] * b; + out[2] = a[2] * b; + out[3] = a[3] * b; + return out; +}; + +/** + * Adds two vec4's after scaling the second operand by a scalar value + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @param {Number} scale the amount to scale b by before adding + * @returns {vec4} out + */ +vec4.scaleAndAdd = function(out, a, b, scale) { + out[0] = a[0] + (b[0] * scale); + out[1] = a[1] + (b[1] * scale); + out[2] = a[2] + (b[2] * scale); + out[3] = a[3] + (b[3] * scale); + return out; +}; + +/** + * Calculates the euclidian distance between two vec4's + * + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {Number} distance between a and b + */ +vec4.distance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1], + z = b[2] - a[2], + w = b[3] - a[3]; + return Math.sqrt(x*x + y*y + z*z + w*w); +}; + +/** + * Alias for {@link vec4.distance} + * @function + */ +vec4.dist = vec4.distance; + +/** + * Calculates the squared euclidian distance between two vec4's + * + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {Number} squared distance between a and b + */ +vec4.squaredDistance = function(a, b) { + var x = b[0] - a[0], + y = b[1] - a[1], + z = b[2] - a[2], + w = b[3] - a[3]; + return x*x + y*y + z*z + w*w; +}; + +/** + * Alias for {@link vec4.squaredDistance} + * @function + */ +vec4.sqrDist = vec4.squaredDistance; + +/** + * Calculates the length of a vec4 + * + * @param {vec4} a vector to calculate length of + * @returns {Number} length of a + */ +vec4.length = function (a) { + var x = a[0], + y = a[1], + z = a[2], + w = a[3]; + return Math.sqrt(x*x + y*y + z*z + w*w); +}; + +/** + * Alias for {@link vec4.length} + * @function + */ +vec4.len = vec4.length; + +/** + * Calculates the squared length of a vec4 + * + * @param {vec4} a vector to calculate squared length of + * @returns {Number} squared length of a + */ +vec4.squaredLength = function (a) { + var x = a[0], + y = a[1], + z = a[2], + w = a[3]; + return x*x + y*y + z*z + w*w; +}; + +/** + * Alias for {@link vec4.squaredLength} + * @function + */ +vec4.sqrLen = vec4.squaredLength; + +/** + * Negates the components of a vec4 + * + * @param {vec4} out the receiving vector + * @param {vec4} a vector to negate + * @returns {vec4} out + */ +vec4.negate = function(out, a) { + out[0] = -a[0]; + out[1] = -a[1]; + out[2] = -a[2]; + out[3] = -a[3]; + return out; +}; + +/** + * Normalize a vec4 + * + * @param {vec4} out the receiving vector + * @param {vec4} a vector to normalize + * @returns {vec4} out + */ +vec4.normalize = function(out, a) { + var x = a[0], + y = a[1], + z = a[2], + w = a[3]; + var len = x*x + y*y + z*z + w*w; + if (len > 0) { + len = 1 / Math.sqrt(len); + out[0] = a[0] * len; + out[1] = a[1] * len; + out[2] = a[2] * len; + out[3] = a[3] * len; + } + return out; +}; + +/** + * Calculates the dot product of two vec4's + * + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @returns {Number} dot product of a and b + */ +vec4.dot = function (a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; +}; + +/** + * Performs a linear interpolation between two vec4's + * + * @param {vec4} out the receiving vector + * @param {vec4} a the first operand + * @param {vec4} b the second operand + * @param {Number} t interpolation amount between the two inputs + * @returns {vec4} out + */ +vec4.lerp = function (out, a, b, t) { + var ax = a[0], + ay = a[1], + az = a[2], + aw = a[3]; + out[0] = ax + t * (b[0] - ax); + out[1] = ay + t * (b[1] - ay); + out[2] = az + t * (b[2] - az); + out[3] = aw + t * (b[3] - aw); + return out; +}; + +/** + * Generates a random vector with the given scale + * + * @param {vec4} out the receiving vector + * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned + * @returns {vec4} out + */ +vec4.random = function (out, scale) { + scale = scale || 1.0; + + //TODO: This is a pretty awful way of doing this. Find something better. + out[0] = GLMAT_RANDOM(); + out[1] = GLMAT_RANDOM(); + out[2] = GLMAT_RANDOM(); + out[3] = GLMAT_RANDOM(); + vec4.normalize(out, out); + vec4.scale(out, out, scale); + return out; +}; + +/** + * Transforms the vec4 with a mat4. + * + * @param {vec4} out the receiving vector + * @param {vec4} a the vector to transform + * @param {mat4} m matrix to transform with + * @returns {vec4} out + */ +vec4.transformMat4 = function(out, a, m) { + var x = a[0], y = a[1], z = a[2], w = a[3]; + out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w; + out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w; + out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w; + out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w; + return out; +}; + +/** + * Transforms the vec4 with a quat + * + * @param {vec4} out the receiving vector + * @param {vec4} a the vector to transform + * @param {quat} q quaternion to transform with + * @returns {vec4} out + */ +vec4.transformQuat = function(out, a, q) { + var x = a[0], y = a[1], z = a[2], + qx = q[0], qy = q[1], qz = q[2], qw = q[3], + + // calculate quat * vec + ix = qw * x + qy * z - qz * y, + iy = qw * y + qz * x - qx * z, + iz = qw * z + qx * y - qy * x, + iw = -qx * x - qy * y - qz * z; + + // calculate result * inverse quat + out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy; + out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz; + out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx; + return out; +}; + +/** + * Perform some operation over an array of vec4s. + * + * @param {Array} a the array of vectors to iterate over + * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed + * @param {Number} offset Number of elements to skip at the beginning of the array + * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array + * @param {Function} fn Function to call for each vector in the array + * @param {Object} [arg] additional argument to pass to fn + * @returns {Array} a + * @function + */ +vec4.forEach = (function() { + var vec = vec4.create(); + + return function(a, stride, offset, count, fn, arg) { + var i, l; + if(!stride) { + stride = 4; + } + + if(!offset) { + offset = 0; + } + + if(count) { + l = Math.min((count * stride) + offset, a.length); + } else { + l = a.length; + } + + for(i = offset; i < l; i += stride) { + vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; vec[3] = a[i+3]; + fn(vec, vec, arg); + a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; a[i+3] = vec[3]; + } + + return a; + }; +})(); + +/** + * Returns a string representation of a vector + * + * @param {vec4} vec vector to represent as a string + * @returns {String} string representation of the vector + */ +vec4.str = function (a) { + return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')'; +}; + +if(typeof(exports) !== 'undefined') { + exports.vec4 = vec4; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 2x2 Matrix + * @name mat2 + */ + +var mat2 = {}; + +/** + * Creates a new identity mat2 + * + * @returns {mat2} a new 2x2 matrix + */ +mat2.create = function() { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + return out; +}; + +/** + * Creates a new mat2 initialized with values from an existing matrix + * + * @param {mat2} a matrix to clone + * @returns {mat2} a new 2x2 matrix + */ +mat2.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + return out; +}; + +/** + * Copy the values from one mat2 to another + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +mat2.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + return out; +}; + +/** + * Set a mat2 to the identity matrix + * + * @param {mat2} out the receiving matrix + * @returns {mat2} out + */ +mat2.identity = function(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + return out; +}; + +/** + * Transpose the values of a mat2 + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +mat2.transpose = function(out, a) { + // If we are transposing ourselves we can skip a few steps but have to cache some values + if (out === a) { + var a1 = a[1]; + out[1] = a[2]; + out[2] = a1; + } else { + out[0] = a[0]; + out[1] = a[2]; + out[2] = a[1]; + out[3] = a[3]; + } + + return out; +}; + +/** + * Inverts a mat2 + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +mat2.invert = function(out, a) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], + + // Calculate the determinant + det = a0 * a3 - a2 * a1; + + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = a3 * det; + out[1] = -a1 * det; + out[2] = -a2 * det; + out[3] = a0 * det; + + return out; +}; + +/** + * Calculates the adjugate of a mat2 + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +mat2.adjoint = function(out, a) { + // Caching this value is nessecary if out == a + var a0 = a[0]; + out[0] = a[3]; + out[1] = -a[1]; + out[2] = -a[2]; + out[3] = a0; + + return out; +}; + +/** + * Calculates the determinant of a mat2 + * + * @param {mat2} a the source matrix + * @returns {Number} determinant of a + */ +mat2.determinant = function (a) { + return a[0] * a[3] - a[2] * a[1]; +}; + +/** + * Multiplies two mat2's + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the first operand + * @param {mat2} b the second operand + * @returns {mat2} out + */ +mat2.multiply = function (out, a, b) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3]; + var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; + out[0] = a0 * b0 + a2 * b1; + out[1] = a1 * b0 + a3 * b1; + out[2] = a0 * b2 + a2 * b3; + out[3] = a1 * b2 + a3 * b3; + return out; +}; + +/** + * Alias for {@link mat2.multiply} + * @function + */ +mat2.mul = mat2.multiply; + +/** + * Rotates a mat2 by the given angle + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat2} out + */ +mat2.rotate = function (out, a, rad) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], + s = Math.sin(rad), + c = Math.cos(rad); + out[0] = a0 * c + a2 * s; + out[1] = a1 * c + a3 * s; + out[2] = a0 * -s + a2 * c; + out[3] = a1 * -s + a3 * c; + return out; +}; + +/** + * Scales the mat2 by the dimensions in the given vec2 + * + * @param {mat2} out the receiving matrix + * @param {mat2} a the matrix to rotate + * @param {vec2} v the vec2 to scale the matrix by + * @returns {mat2} out + **/ +mat2.scale = function(out, a, v) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], + v0 = v[0], v1 = v[1]; + out[0] = a0 * v0; + out[1] = a1 * v0; + out[2] = a2 * v1; + out[3] = a3 * v1; + return out; +}; + +/** + * Returns a string representation of a mat2 + * + * @param {mat2} mat matrix to represent as a string + * @returns {String} string representation of the matrix + */ +mat2.str = function (a) { + return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')'; +}; + +/** + * Returns Frobenius norm of a mat2 + * + * @param {mat2} a the matrix to calculate Frobenius norm of + * @returns {Number} Frobenius norm + */ +mat2.frob = function (a) { + return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2))) +}; + +/** + * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix + * @param {mat2} L the lower triangular matrix + * @param {mat2} D the diagonal matrix + * @param {mat2} U the upper triangular matrix + * @param {mat2} a the input matrix to factorize + */ + +mat2.LDU = function (L, D, U, a) { + L[2] = a[2]/a[0]; + U[0] = a[0]; + U[1] = a[1]; + U[3] = a[3] - L[2] * U[1]; + return [L, D, U]; +}; + +if(typeof(exports) !== 'undefined') { + exports.mat2 = mat2; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 2x3 Matrix + * @name mat2d + * + * @description + * A mat2d contains six elements defined as: + *
+ * [a, c, tx,
+ *  b, d, ty]
+ * 
+ * This is a short form for the 3x3 matrix: + *
+ * [a, c, tx,
+ *  b, d, ty,
+ *  0, 0, 1]
+ * 
+ * The last row is ignored so the array is shorter and operations are faster. + */ + +var mat2d = {}; + +/** + * Creates a new identity mat2d + * + * @returns {mat2d} a new 2x3 matrix + */ +mat2d.create = function() { + var out = new GLMAT_ARRAY_TYPE(6); + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + out[4] = 0; + out[5] = 0; + return out; +}; + +/** + * Creates a new mat2d initialized with values from an existing matrix + * + * @param {mat2d} a matrix to clone + * @returns {mat2d} a new 2x3 matrix + */ +mat2d.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(6); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + return out; +}; + +/** + * Copy the values from one mat2d to another + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the source matrix + * @returns {mat2d} out + */ +mat2d.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + return out; +}; + +/** + * Set a mat2d to the identity matrix + * + * @param {mat2d} out the receiving matrix + * @returns {mat2d} out + */ +mat2d.identity = function(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + out[4] = 0; + out[5] = 0; + return out; +}; + +/** + * Inverts a mat2d + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the source matrix + * @returns {mat2d} out + */ +mat2d.invert = function(out, a) { + var aa = a[0], ab = a[1], ac = a[2], ad = a[3], + atx = a[4], aty = a[5]; + + var det = aa * ad - ab * ac; + if(!det){ + return null; + } + det = 1.0 / det; + + out[0] = ad * det; + out[1] = -ab * det; + out[2] = -ac * det; + out[3] = aa * det; + out[4] = (ac * aty - ad * atx) * det; + out[5] = (ab * atx - aa * aty) * det; + return out; +}; + +/** + * Calculates the determinant of a mat2d + * + * @param {mat2d} a the source matrix + * @returns {Number} determinant of a + */ +mat2d.determinant = function (a) { + return a[0] * a[3] - a[1] * a[2]; +}; + +/** + * Multiplies two mat2d's + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the first operand + * @param {mat2d} b the second operand + * @returns {mat2d} out + */ +mat2d.multiply = function (out, a, b) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], + b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5]; + out[0] = a0 * b0 + a2 * b1; + out[1] = a1 * b0 + a3 * b1; + out[2] = a0 * b2 + a2 * b3; + out[3] = a1 * b2 + a3 * b3; + out[4] = a0 * b4 + a2 * b5 + a4; + out[5] = a1 * b4 + a3 * b5 + a5; + return out; +}; + +/** + * Alias for {@link mat2d.multiply} + * @function + */ +mat2d.mul = mat2d.multiply; + + +/** + * Rotates a mat2d by the given angle + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat2d} out + */ +mat2d.rotate = function (out, a, rad) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], + s = Math.sin(rad), + c = Math.cos(rad); + out[0] = a0 * c + a2 * s; + out[1] = a1 * c + a3 * s; + out[2] = a0 * -s + a2 * c; + out[3] = a1 * -s + a3 * c; + out[4] = a4; + out[5] = a5; + return out; +}; + +/** + * Scales the mat2d by the dimensions in the given vec2 + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the matrix to translate + * @param {vec2} v the vec2 to scale the matrix by + * @returns {mat2d} out + **/ +mat2d.scale = function(out, a, v) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], + v0 = v[0], v1 = v[1]; + out[0] = a0 * v0; + out[1] = a1 * v0; + out[2] = a2 * v1; + out[3] = a3 * v1; + out[4] = a4; + out[5] = a5; + return out; +}; + +/** + * Translates the mat2d by the dimensions in the given vec2 + * + * @param {mat2d} out the receiving matrix + * @param {mat2d} a the matrix to translate + * @param {vec2} v the vec2 to translate the matrix by + * @returns {mat2d} out + **/ +mat2d.translate = function(out, a, v) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5], + v0 = v[0], v1 = v[1]; + out[0] = a0; + out[1] = a1; + out[2] = a2; + out[3] = a3; + out[4] = a0 * v0 + a2 * v1 + a4; + out[5] = a1 * v0 + a3 * v1 + a5; + return out; +}; + +/** + * Returns a string representation of a mat2d + * + * @param {mat2d} a matrix to represent as a string + * @returns {String} string representation of the matrix + */ +mat2d.str = function (a) { + return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + + a[3] + ', ' + a[4] + ', ' + a[5] + ')'; +}; + +/** + * Returns Frobenius norm of a mat2d + * + * @param {mat2d} a the matrix to calculate Frobenius norm of + * @returns {Number} Frobenius norm + */ +mat2d.frob = function (a) { + return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1)) +}; + +if(typeof(exports) !== 'undefined') { + exports.mat2d = mat2d; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 3x3 Matrix + * @name mat3 + */ + +var mat3 = {}; + +/** + * Creates a new identity mat3 + * + * @returns {mat3} a new 3x3 matrix + */ +mat3.create = function() { + var out = new GLMAT_ARRAY_TYPE(9); + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 1; + out[5] = 0; + out[6] = 0; + out[7] = 0; + out[8] = 1; + return out; +}; + +/** + * Copies the upper-left 3x3 values into the given mat3. + * + * @param {mat3} out the receiving 3x3 matrix + * @param {mat4} a the source 4x4 matrix + * @returns {mat3} out + */ +mat3.fromMat4 = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[4]; + out[4] = a[5]; + out[5] = a[6]; + out[6] = a[8]; + out[7] = a[9]; + out[8] = a[10]; + return out; +}; + +/** + * Creates a new mat3 initialized with values from an existing matrix + * + * @param {mat3} a matrix to clone + * @returns {mat3} a new 3x3 matrix + */ +mat3.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(9); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + out[6] = a[6]; + out[7] = a[7]; + out[8] = a[8]; + return out; +}; + +/** + * Copy the values from one mat3 to another + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the source matrix + * @returns {mat3} out + */ +mat3.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + out[6] = a[6]; + out[7] = a[7]; + out[8] = a[8]; + return out; +}; + +/** + * Set a mat3 to the identity matrix + * + * @param {mat3} out the receiving matrix + * @returns {mat3} out + */ +mat3.identity = function(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 1; + out[5] = 0; + out[6] = 0; + out[7] = 0; + out[8] = 1; + return out; +}; + +/** + * Transpose the values of a mat3 + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the source matrix + * @returns {mat3} out + */ +mat3.transpose = function(out, a) { + // If we are transposing ourselves we can skip a few steps but have to cache some values + if (out === a) { + var a01 = a[1], a02 = a[2], a12 = a[5]; + out[1] = a[3]; + out[2] = a[6]; + out[3] = a01; + out[5] = a[7]; + out[6] = a02; + out[7] = a12; + } else { + out[0] = a[0]; + out[1] = a[3]; + out[2] = a[6]; + out[3] = a[1]; + out[4] = a[4]; + out[5] = a[7]; + out[6] = a[2]; + out[7] = a[5]; + out[8] = a[8]; + } + + return out; +}; + +/** + * Inverts a mat3 + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the source matrix + * @returns {mat3} out + */ +mat3.invert = function(out, a) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8], + + b01 = a22 * a11 - a12 * a21, + b11 = -a22 * a10 + a12 * a20, + b21 = a21 * a10 - a11 * a20, + + // Calculate the determinant + det = a00 * b01 + a01 * b11 + a02 * b21; + + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = b01 * det; + out[1] = (-a22 * a01 + a02 * a21) * det; + out[2] = (a12 * a01 - a02 * a11) * det; + out[3] = b11 * det; + out[4] = (a22 * a00 - a02 * a20) * det; + out[5] = (-a12 * a00 + a02 * a10) * det; + out[6] = b21 * det; + out[7] = (-a21 * a00 + a01 * a20) * det; + out[8] = (a11 * a00 - a01 * a10) * det; + return out; +}; + +/** + * Calculates the adjugate of a mat3 + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the source matrix + * @returns {mat3} out + */ +mat3.adjoint = function(out, a) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8]; + + out[0] = (a11 * a22 - a12 * a21); + out[1] = (a02 * a21 - a01 * a22); + out[2] = (a01 * a12 - a02 * a11); + out[3] = (a12 * a20 - a10 * a22); + out[4] = (a00 * a22 - a02 * a20); + out[5] = (a02 * a10 - a00 * a12); + out[6] = (a10 * a21 - a11 * a20); + out[7] = (a01 * a20 - a00 * a21); + out[8] = (a00 * a11 - a01 * a10); + return out; +}; + +/** + * Calculates the determinant of a mat3 + * + * @param {mat3} a the source matrix + * @returns {Number} determinant of a + */ +mat3.determinant = function (a) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8]; + + return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); +}; + +/** + * Multiplies two mat3's + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the first operand + * @param {mat3} b the second operand + * @returns {mat3} out + */ +mat3.multiply = function (out, a, b) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8], + + b00 = b[0], b01 = b[1], b02 = b[2], + b10 = b[3], b11 = b[4], b12 = b[5], + b20 = b[6], b21 = b[7], b22 = b[8]; + + out[0] = b00 * a00 + b01 * a10 + b02 * a20; + out[1] = b00 * a01 + b01 * a11 + b02 * a21; + out[2] = b00 * a02 + b01 * a12 + b02 * a22; + + out[3] = b10 * a00 + b11 * a10 + b12 * a20; + out[4] = b10 * a01 + b11 * a11 + b12 * a21; + out[5] = b10 * a02 + b11 * a12 + b12 * a22; + + out[6] = b20 * a00 + b21 * a10 + b22 * a20; + out[7] = b20 * a01 + b21 * a11 + b22 * a21; + out[8] = b20 * a02 + b21 * a12 + b22 * a22; + return out; +}; + +/** + * Alias for {@link mat3.multiply} + * @function + */ +mat3.mul = mat3.multiply; + +/** + * Translate a mat3 by the given vector + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the matrix to translate + * @param {vec2} v vector to translate by + * @returns {mat3} out + */ +mat3.translate = function(out, a, v) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8], + x = v[0], y = v[1]; + + out[0] = a00; + out[1] = a01; + out[2] = a02; + + out[3] = a10; + out[4] = a11; + out[5] = a12; + + out[6] = x * a00 + y * a10 + a20; + out[7] = x * a01 + y * a11 + a21; + out[8] = x * a02 + y * a12 + a22; + return out; +}; + +/** + * Rotates a mat3 by the given angle + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat3} out + */ +mat3.rotate = function (out, a, rad) { + var a00 = a[0], a01 = a[1], a02 = a[2], + a10 = a[3], a11 = a[4], a12 = a[5], + a20 = a[6], a21 = a[7], a22 = a[8], + + s = Math.sin(rad), + c = Math.cos(rad); + + out[0] = c * a00 + s * a10; + out[1] = c * a01 + s * a11; + out[2] = c * a02 + s * a12; + + out[3] = c * a10 - s * a00; + out[4] = c * a11 - s * a01; + out[5] = c * a12 - s * a02; + + out[6] = a20; + out[7] = a21; + out[8] = a22; + return out; +}; + +/** + * Scales the mat3 by the dimensions in the given vec2 + * + * @param {mat3} out the receiving matrix + * @param {mat3} a the matrix to rotate + * @param {vec2} v the vec2 to scale the matrix by + * @returns {mat3} out + **/ +mat3.scale = function(out, a, v) { + var x = v[0], y = v[1]; + + out[0] = x * a[0]; + out[1] = x * a[1]; + out[2] = x * a[2]; + + out[3] = y * a[3]; + out[4] = y * a[4]; + out[5] = y * a[5]; + + out[6] = a[6]; + out[7] = a[7]; + out[8] = a[8]; + return out; +}; + +/** + * Copies the values from a mat2d into a mat3 + * + * @param {mat3} out the receiving matrix + * @param {mat2d} a the matrix to copy + * @returns {mat3} out + **/ +mat3.fromMat2d = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = 0; + + out[3] = a[2]; + out[4] = a[3]; + out[5] = 0; + + out[6] = a[4]; + out[7] = a[5]; + out[8] = 1; + return out; +}; + +/** +* Calculates a 3x3 matrix from the given quaternion +* +* @param {mat3} out mat3 receiving operation result +* @param {quat} q Quaternion to create matrix from +* +* @returns {mat3} out +*/ +mat3.fromQuat = function (out, q) { + var x = q[0], y = q[1], z = q[2], w = q[3], + x2 = x + x, + y2 = y + y, + z2 = z + z, + + xx = x * x2, + yx = y * x2, + yy = y * y2, + zx = z * x2, + zy = z * y2, + zz = z * z2, + wx = w * x2, + wy = w * y2, + wz = w * z2; + + out[0] = 1 - yy - zz; + out[3] = yx - wz; + out[6] = zx + wy; + + out[1] = yx + wz; + out[4] = 1 - xx - zz; + out[7] = zy - wx; + + out[2] = zx - wy; + out[5] = zy + wx; + out[8] = 1 - xx - yy; + + return out; +}; + +/** +* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix +* +* @param {mat3} out mat3 receiving operation result +* @param {mat4} a Mat4 to derive the normal matrix from +* +* @returns {mat3} out +*/ +mat3.normalFromMat4 = function (out, a) { + var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15], + + b00 = a00 * a11 - a01 * a10, + b01 = a00 * a12 - a02 * a10, + b02 = a00 * a13 - a03 * a10, + b03 = a01 * a12 - a02 * a11, + b04 = a01 * a13 - a03 * a11, + b05 = a02 * a13 - a03 * a12, + b06 = a20 * a31 - a21 * a30, + b07 = a20 * a32 - a22 * a30, + b08 = a20 * a33 - a23 * a30, + b09 = a21 * a32 - a22 * a31, + b10 = a21 * a33 - a23 * a31, + b11 = a22 * a33 - a23 * a32, + + // Calculate the determinant + det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; + out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det; + out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det; + + out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det; + out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det; + out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det; + + out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det; + out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det; + out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det; + + return out; +}; + +/** + * Returns a string representation of a mat3 + * + * @param {mat3} mat matrix to represent as a string + * @returns {String} string representation of the matrix + */ +mat3.str = function (a) { + return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + + a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + + a[6] + ', ' + a[7] + ', ' + a[8] + ')'; +}; + +/** + * Returns Frobenius norm of a mat3 + * + * @param {mat3} a the matrix to calculate Frobenius norm of + * @returns {Number} Frobenius norm + */ +mat3.frob = function (a) { + return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2))) +}; + + +if(typeof(exports) !== 'undefined') { + exports.mat3 = mat3; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class 4x4 Matrix + * @name mat4 + */ + +var mat4 = {}; + +/** + * Creates a new identity mat4 + * + * @returns {mat4} a new 4x4 matrix + */ +mat4.create = function() { + var out = new GLMAT_ARRAY_TYPE(16); + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 0; + out[5] = 1; + out[6] = 0; + out[7] = 0; + out[8] = 0; + out[9] = 0; + out[10] = 1; + out[11] = 0; + out[12] = 0; + out[13] = 0; + out[14] = 0; + out[15] = 1; + return out; +}; + +/** + * Creates a new mat4 initialized with values from an existing matrix + * + * @param {mat4} a matrix to clone + * @returns {mat4} a new 4x4 matrix + */ +mat4.clone = function(a) { + var out = new GLMAT_ARRAY_TYPE(16); + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + out[6] = a[6]; + out[7] = a[7]; + out[8] = a[8]; + out[9] = a[9]; + out[10] = a[10]; + out[11] = a[11]; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + return out; +}; + +/** + * Copy the values from one mat4 to another + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the source matrix + * @returns {mat4} out + */ +mat4.copy = function(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4]; + out[5] = a[5]; + out[6] = a[6]; + out[7] = a[7]; + out[8] = a[8]; + out[9] = a[9]; + out[10] = a[10]; + out[11] = a[11]; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + return out; +}; + +/** + * Set a mat4 to the identity matrix + * + * @param {mat4} out the receiving matrix + * @returns {mat4} out + */ +mat4.identity = function(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 0; + out[5] = 1; + out[6] = 0; + out[7] = 0; + out[8] = 0; + out[9] = 0; + out[10] = 1; + out[11] = 0; + out[12] = 0; + out[13] = 0; + out[14] = 0; + out[15] = 1; + return out; +}; + +/** + * Transpose the values of a mat4 + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the source matrix + * @returns {mat4} out + */ +mat4.transpose = function(out, a) { + // If we are transposing ourselves we can skip a few steps but have to cache some values + if (out === a) { + var a01 = a[1], a02 = a[2], a03 = a[3], + a12 = a[6], a13 = a[7], + a23 = a[11]; + + out[1] = a[4]; + out[2] = a[8]; + out[3] = a[12]; + out[4] = a01; + out[6] = a[9]; + out[7] = a[13]; + out[8] = a02; + out[9] = a12; + out[11] = a[14]; + out[12] = a03; + out[13] = a13; + out[14] = a23; + } else { + out[0] = a[0]; + out[1] = a[4]; + out[2] = a[8]; + out[3] = a[12]; + out[4] = a[1]; + out[5] = a[5]; + out[6] = a[9]; + out[7] = a[13]; + out[8] = a[2]; + out[9] = a[6]; + out[10] = a[10]; + out[11] = a[14]; + out[12] = a[3]; + out[13] = a[7]; + out[14] = a[11]; + out[15] = a[15]; + } + + return out; +}; + +/** + * Inverts a mat4 + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the source matrix + * @returns {mat4} out + */ +mat4.invert = function(out, a) { + var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15], + + b00 = a00 * a11 - a01 * a10, + b01 = a00 * a12 - a02 * a10, + b02 = a00 * a13 - a03 * a10, + b03 = a01 * a12 - a02 * a11, + b04 = a01 * a13 - a03 * a11, + b05 = a02 * a13 - a03 * a12, + b06 = a20 * a31 - a21 * a30, + b07 = a20 * a32 - a22 * a30, + b08 = a20 * a33 - a23 * a30, + b09 = a21 * a32 - a22 * a31, + b10 = a21 * a33 - a23 * a31, + b11 = a22 * a33 - a23 * a32, + + // Calculate the determinant + det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + + if (!det) { + return null; + } + det = 1.0 / det; + + out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; + out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det; + out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det; + out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det; + out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det; + out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det; + out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det; + out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det; + out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det; + out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det; + out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det; + out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det; + out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det; + out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det; + out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det; + out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det; + + return out; +}; + +/** + * Calculates the adjugate of a mat4 + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the source matrix + * @returns {mat4} out + */ +mat4.adjoint = function(out, a) { + var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15]; + + out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22)); + out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22)); + out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12)); + out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12)); + out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22)); + out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22)); + out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12)); + out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12)); + out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21)); + out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21)); + out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11)); + out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11)); + out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21)); + out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21)); + out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11)); + out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11)); + return out; +}; + +/** + * Calculates the determinant of a mat4 + * + * @param {mat4} a the source matrix + * @returns {Number} determinant of a + */ +mat4.determinant = function (a) { + var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15], + + b00 = a00 * a11 - a01 * a10, + b01 = a00 * a12 - a02 * a10, + b02 = a00 * a13 - a03 * a10, + b03 = a01 * a12 - a02 * a11, + b04 = a01 * a13 - a03 * a11, + b05 = a02 * a13 - a03 * a12, + b06 = a20 * a31 - a21 * a30, + b07 = a20 * a32 - a22 * a30, + b08 = a20 * a33 - a23 * a30, + b09 = a21 * a32 - a22 * a31, + b10 = a21 * a33 - a23 * a31, + b11 = a22 * a33 - a23 * a32; + + // Calculate the determinant + return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; +}; + +/** + * Multiplies two mat4's + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the first operand + * @param {mat4} b the second operand + * @returns {mat4} out + */ +mat4.multiply = function (out, a, b) { + var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15]; + + // Cache only the current line of the second matrix + var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; + out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30; + out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31; + out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32; + out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33; + + b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7]; + out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30; + out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31; + out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32; + out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33; + + b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11]; + out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30; + out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31; + out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32; + out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33; + + b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15]; + out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30; + out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31; + out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32; + out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33; + return out; +}; + +/** + * Alias for {@link mat4.multiply} + * @function + */ +mat4.mul = mat4.multiply; + +/** + * Translate a mat4 by the given vector + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to translate + * @param {vec3} v vector to translate by + * @returns {mat4} out + */ +mat4.translate = function (out, a, v) { + var x = v[0], y = v[1], z = v[2], + a00, a01, a02, a03, + a10, a11, a12, a13, + a20, a21, a22, a23; + + if (a === out) { + out[12] = a[0] * x + a[4] * y + a[8] * z + a[12]; + out[13] = a[1] * x + a[5] * y + a[9] * z + a[13]; + out[14] = a[2] * x + a[6] * y + a[10] * z + a[14]; + out[15] = a[3] * x + a[7] * y + a[11] * z + a[15]; + } else { + a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3]; + a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7]; + a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11]; + + out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03; + out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13; + out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23; + + out[12] = a00 * x + a10 * y + a20 * z + a[12]; + out[13] = a01 * x + a11 * y + a21 * z + a[13]; + out[14] = a02 * x + a12 * y + a22 * z + a[14]; + out[15] = a03 * x + a13 * y + a23 * z + a[15]; + } + + return out; +}; + +/** + * Scales the mat4 by the dimensions in the given vec3 + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to scale + * @param {vec3} v the vec3 to scale the matrix by + * @returns {mat4} out + **/ +mat4.scale = function(out, a, v) { + var x = v[0], y = v[1], z = v[2]; + + out[0] = a[0] * x; + out[1] = a[1] * x; + out[2] = a[2] * x; + out[3] = a[3] * x; + out[4] = a[4] * y; + out[5] = a[5] * y; + out[6] = a[6] * y; + out[7] = a[7] * y; + out[8] = a[8] * z; + out[9] = a[9] * z; + out[10] = a[10] * z; + out[11] = a[11] * z; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + return out; +}; + +/** + * Rotates a mat4 by the given angle + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @param {vec3} axis the axis to rotate around + * @returns {mat4} out + */ +mat4.rotate = function (out, a, rad, axis) { + var x = axis[0], y = axis[1], z = axis[2], + len = Math.sqrt(x * x + y * y + z * z), + s, c, t, + a00, a01, a02, a03, + a10, a11, a12, a13, + a20, a21, a22, a23, + b00, b01, b02, + b10, b11, b12, + b20, b21, b22; + + if (Math.abs(len) < GLMAT_EPSILON) { return null; } + + len = 1 / len; + x *= len; + y *= len; + z *= len; + + s = Math.sin(rad); + c = Math.cos(rad); + t = 1 - c; + + a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3]; + a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7]; + a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11]; + + // Construct the elements of the rotation matrix + b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s; + b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s; + b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c; + + // Perform rotation-specific matrix multiplication + out[0] = a00 * b00 + a10 * b01 + a20 * b02; + out[1] = a01 * b00 + a11 * b01 + a21 * b02; + out[2] = a02 * b00 + a12 * b01 + a22 * b02; + out[3] = a03 * b00 + a13 * b01 + a23 * b02; + out[4] = a00 * b10 + a10 * b11 + a20 * b12; + out[5] = a01 * b10 + a11 * b11 + a21 * b12; + out[6] = a02 * b10 + a12 * b11 + a22 * b12; + out[7] = a03 * b10 + a13 * b11 + a23 * b12; + out[8] = a00 * b20 + a10 * b21 + a20 * b22; + out[9] = a01 * b20 + a11 * b21 + a21 * b22; + out[10] = a02 * b20 + a12 * b21 + a22 * b22; + out[11] = a03 * b20 + a13 * b21 + a23 * b22; + + if (a !== out) { // If the source and destination differ, copy the unchanged last row + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + } + return out; +}; + +/** + * Rotates a matrix by the given angle around the X axis + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat4} out + */ +mat4.rotateX = function (out, a, rad) { + var s = Math.sin(rad), + c = Math.cos(rad), + a10 = a[4], + a11 = a[5], + a12 = a[6], + a13 = a[7], + a20 = a[8], + a21 = a[9], + a22 = a[10], + a23 = a[11]; + + if (a !== out) { // If the source and destination differ, copy the unchanged rows + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + } + + // Perform axis-specific matrix multiplication + out[4] = a10 * c + a20 * s; + out[5] = a11 * c + a21 * s; + out[6] = a12 * c + a22 * s; + out[7] = a13 * c + a23 * s; + out[8] = a20 * c - a10 * s; + out[9] = a21 * c - a11 * s; + out[10] = a22 * c - a12 * s; + out[11] = a23 * c - a13 * s; + return out; +}; + +/** + * Rotates a matrix by the given angle around the Y axis + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat4} out + */ +mat4.rotateY = function (out, a, rad) { + var s = Math.sin(rad), + c = Math.cos(rad), + a00 = a[0], + a01 = a[1], + a02 = a[2], + a03 = a[3], + a20 = a[8], + a21 = a[9], + a22 = a[10], + a23 = a[11]; + + if (a !== out) { // If the source and destination differ, copy the unchanged rows + out[4] = a[4]; + out[5] = a[5]; + out[6] = a[6]; + out[7] = a[7]; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + } + + // Perform axis-specific matrix multiplication + out[0] = a00 * c - a20 * s; + out[1] = a01 * c - a21 * s; + out[2] = a02 * c - a22 * s; + out[3] = a03 * c - a23 * s; + out[8] = a00 * s + a20 * c; + out[9] = a01 * s + a21 * c; + out[10] = a02 * s + a22 * c; + out[11] = a03 * s + a23 * c; + return out; +}; + +/** + * Rotates a matrix by the given angle around the Z axis + * + * @param {mat4} out the receiving matrix + * @param {mat4} a the matrix to rotate + * @param {Number} rad the angle to rotate the matrix by + * @returns {mat4} out + */ +mat4.rotateZ = function (out, a, rad) { + var s = Math.sin(rad), + c = Math.cos(rad), + a00 = a[0], + a01 = a[1], + a02 = a[2], + a03 = a[3], + a10 = a[4], + a11 = a[5], + a12 = a[6], + a13 = a[7]; + + if (a !== out) { // If the source and destination differ, copy the unchanged last row + out[8] = a[8]; + out[9] = a[9]; + out[10] = a[10]; + out[11] = a[11]; + out[12] = a[12]; + out[13] = a[13]; + out[14] = a[14]; + out[15] = a[15]; + } + + // Perform axis-specific matrix multiplication + out[0] = a00 * c + a10 * s; + out[1] = a01 * c + a11 * s; + out[2] = a02 * c + a12 * s; + out[3] = a03 * c + a13 * s; + out[4] = a10 * c - a00 * s; + out[5] = a11 * c - a01 * s; + out[6] = a12 * c - a02 * s; + out[7] = a13 * c - a03 * s; + return out; +}; + +/** + * Creates a matrix from a quaternion rotation and vector translation + * This is equivalent to (but much faster than): + * + * mat4.identity(dest); + * mat4.translate(dest, vec); + * var quatMat = mat4.create(); + * quat4.toMat4(quat, quatMat); + * mat4.multiply(dest, quatMat); + * + * @param {mat4} out mat4 receiving operation result + * @param {quat4} q Rotation quaternion + * @param {vec3} v Translation vector + * @returns {mat4} out + */ +mat4.fromRotationTranslation = function (out, q, v) { + // Quaternion math + var x = q[0], y = q[1], z = q[2], w = q[3], + x2 = x + x, + y2 = y + y, + z2 = z + z, + + xx = x * x2, + xy = x * y2, + xz = x * z2, + yy = y * y2, + yz = y * z2, + zz = z * z2, + wx = w * x2, + wy = w * y2, + wz = w * z2; + + out[0] = 1 - (yy + zz); + out[1] = xy + wz; + out[2] = xz - wy; + out[3] = 0; + out[4] = xy - wz; + out[5] = 1 - (xx + zz); + out[6] = yz + wx; + out[7] = 0; + out[8] = xz + wy; + out[9] = yz - wx; + out[10] = 1 - (xx + yy); + out[11] = 0; + out[12] = v[0]; + out[13] = v[1]; + out[14] = v[2]; + out[15] = 1; + + return out; +}; + +mat4.fromQuat = function (out, q) { + var x = q[0], y = q[1], z = q[2], w = q[3], + x2 = x + x, + y2 = y + y, + z2 = z + z, + + xx = x * x2, + yx = y * x2, + yy = y * y2, + zx = z * x2, + zy = z * y2, + zz = z * z2, + wx = w * x2, + wy = w * y2, + wz = w * z2; + + out[0] = 1 - yy - zz; + out[1] = yx + wz; + out[2] = zx - wy; + out[3] = 0; + + out[4] = yx - wz; + out[5] = 1 - xx - zz; + out[6] = zy + wx; + out[7] = 0; + + out[8] = zx + wy; + out[9] = zy - wx; + out[10] = 1 - xx - yy; + out[11] = 0; + + out[12] = 0; + out[13] = 0; + out[14] = 0; + out[15] = 1; + + return out; +}; + +/** + * Generates a frustum matrix with the given bounds + * + * @param {mat4} out mat4 frustum matrix will be written into + * @param {Number} left Left bound of the frustum + * @param {Number} right Right bound of the frustum + * @param {Number} bottom Bottom bound of the frustum + * @param {Number} top Top bound of the frustum + * @param {Number} near Near bound of the frustum + * @param {Number} far Far bound of the frustum + * @returns {mat4} out + */ +mat4.frustum = function (out, left, right, bottom, top, near, far) { + var rl = 1 / (right - left), + tb = 1 / (top - bottom), + nf = 1 / (near - far); + out[0] = (near * 2) * rl; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 0; + out[5] = (near * 2) * tb; + out[6] = 0; + out[7] = 0; + out[8] = (right + left) * rl; + out[9] = (top + bottom) * tb; + out[10] = (far + near) * nf; + out[11] = -1; + out[12] = 0; + out[13] = 0; + out[14] = (far * near * 2) * nf; + out[15] = 0; + return out; +}; + +/** + * Generates a perspective projection matrix with the given bounds + * + * @param {mat4} out mat4 frustum matrix will be written into + * @param {number} fovy Vertical field of view in radians + * @param {number} aspect Aspect ratio. typically viewport width/height + * @param {number} near Near bound of the frustum + * @param {number} far Far bound of the frustum + * @returns {mat4} out + */ +mat4.perspective = function (out, fovy, aspect, near, far) { + var f = 1.0 / Math.tan(fovy / 2), + nf = 1 / (near - far); + out[0] = f / aspect; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 0; + out[5] = f; + out[6] = 0; + out[7] = 0; + out[8] = 0; + out[9] = 0; + out[10] = (far + near) * nf; + out[11] = -1; + out[12] = 0; + out[13] = 0; + out[14] = (2 * far * near) * nf; + out[15] = 0; + return out; +}; + +/** + * Generates a orthogonal projection matrix with the given bounds + * + * @param {mat4} out mat4 frustum matrix will be written into + * @param {number} left Left bound of the frustum + * @param {number} right Right bound of the frustum + * @param {number} bottom Bottom bound of the frustum + * @param {number} top Top bound of the frustum + * @param {number} near Near bound of the frustum + * @param {number} far Far bound of the frustum + * @returns {mat4} out + */ +mat4.ortho = function (out, left, right, bottom, top, near, far) { + var lr = 1 / (left - right), + bt = 1 / (bottom - top), + nf = 1 / (near - far); + out[0] = -2 * lr; + out[1] = 0; + out[2] = 0; + out[3] = 0; + out[4] = 0; + out[5] = -2 * bt; + out[6] = 0; + out[7] = 0; + out[8] = 0; + out[9] = 0; + out[10] = 2 * nf; + out[11] = 0; + out[12] = (left + right) * lr; + out[13] = (top + bottom) * bt; + out[14] = (far + near) * nf; + out[15] = 1; + return out; +}; + +/** + * Generates a look-at matrix with the given eye position, focal point, and up axis + * + * @param {mat4} out mat4 frustum matrix will be written into + * @param {vec3} eye Position of the viewer + * @param {vec3} center Point the viewer is looking at + * @param {vec3} up vec3 pointing up + * @returns {mat4} out + */ +mat4.lookAt = function (out, eye, center, up) { + var x0, x1, x2, y0, y1, y2, z0, z1, z2, len, + eyex = eye[0], + eyey = eye[1], + eyez = eye[2], + upx = up[0], + upy = up[1], + upz = up[2], + centerx = center[0], + centery = center[1], + centerz = center[2]; + + if (Math.abs(eyex - centerx) < GLMAT_EPSILON && + Math.abs(eyey - centery) < GLMAT_EPSILON && + Math.abs(eyez - centerz) < GLMAT_EPSILON) { + return mat4.identity(out); + } + + z0 = eyex - centerx; + z1 = eyey - centery; + z2 = eyez - centerz; + + len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2); + z0 *= len; + z1 *= len; + z2 *= len; + + x0 = upy * z2 - upz * z1; + x1 = upz * z0 - upx * z2; + x2 = upx * z1 - upy * z0; + len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2); + if (!len) { + x0 = 0; + x1 = 0; + x2 = 0; + } else { + len = 1 / len; + x0 *= len; + x1 *= len; + x2 *= len; + } + + y0 = z1 * x2 - z2 * x1; + y1 = z2 * x0 - z0 * x2; + y2 = z0 * x1 - z1 * x0; + + len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2); + if (!len) { + y0 = 0; + y1 = 0; + y2 = 0; + } else { + len = 1 / len; + y0 *= len; + y1 *= len; + y2 *= len; + } + + out[0] = x0; + out[1] = y0; + out[2] = z0; + out[3] = 0; + out[4] = x1; + out[5] = y1; + out[6] = z1; + out[7] = 0; + out[8] = x2; + out[9] = y2; + out[10] = z2; + out[11] = 0; + out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez); + out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez); + out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez); + out[15] = 1; + + return out; +}; + +/** + * Returns a string representation of a mat4 + * + * @param {mat4} mat matrix to represent as a string + * @returns {String} string representation of the matrix + */ +mat4.str = function (a) { + return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + + a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' + + a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + + a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')'; +}; + +/** + * Returns Frobenius norm of a mat4 + * + * @param {mat4} a the matrix to calculate Frobenius norm of + * @returns {Number} Frobenius norm + */ +mat4.frob = function (a) { + return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) )) +}; + + +if(typeof(exports) !== 'undefined') { + exports.mat4 = mat4; +} +; +/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/** + * @class Quaternion + * @name quat + */ + +var quat = {}; + +/** + * Creates a new identity quat + * + * @returns {quat} a new quaternion + */ +quat.create = function() { + var out = new GLMAT_ARRAY_TYPE(4); + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 1; + return out; +}; + +/** + * Sets a quaternion to represent the shortest rotation from one + * vector to another. + * + * Both vectors are assumed to be unit length. + * + * @param {quat} out the receiving quaternion. + * @param {vec3} a the initial vector + * @param {vec3} b the destination vector + * @returns {quat} out + */ +quat.rotationTo = (function() { + var tmpvec3 = vec3.create(); + var xUnitVec3 = vec3.fromValues(1,0,0); + var yUnitVec3 = vec3.fromValues(0,1,0); + + return function(out, a, b) { + var dot = vec3.dot(a, b); + if (dot < -0.999999) { + vec3.cross(tmpvec3, xUnitVec3, a); + if (vec3.length(tmpvec3) < 0.000001) + vec3.cross(tmpvec3, yUnitVec3, a); + vec3.normalize(tmpvec3, tmpvec3); + quat.setAxisAngle(out, tmpvec3, Math.PI); + return out; + } else if (dot > 0.999999) { + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 1; + return out; + } else { + vec3.cross(tmpvec3, a, b); + out[0] = tmpvec3[0]; + out[1] = tmpvec3[1]; + out[2] = tmpvec3[2]; + out[3] = 1 + dot; + return quat.normalize(out, out); + } + }; +})(); + +/** + * Sets the specified quaternion with values corresponding to the given + * axes. Each axis is a vec3 and is expected to be unit length and + * perpendicular to all other specified axes. + * + * @param {vec3} view the vector representing the viewing direction + * @param {vec3} right the vector representing the local "right" direction + * @param {vec3} up the vector representing the local "up" direction + * @returns {quat} out + */ +quat.setAxes = (function() { + var matr = mat3.create(); + + return function(out, view, right, up) { + matr[0] = right[0]; + matr[3] = right[1]; + matr[6] = right[2]; + + matr[1] = up[0]; + matr[4] = up[1]; + matr[7] = up[2]; + + matr[2] = -view[0]; + matr[5] = -view[1]; + matr[8] = -view[2]; + + return quat.normalize(out, quat.fromMat3(out, matr)); + }; +})(); + +/** + * Creates a new quat initialized with values from an existing quaternion + * + * @param {quat} a quaternion to clone + * @returns {quat} a new quaternion + * @function + */ +quat.clone = vec4.clone; + +/** + * Creates a new quat initialized with the given values + * + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @param {Number} w W component + * @returns {quat} a new quaternion + * @function + */ +quat.fromValues = vec4.fromValues; + +/** + * Copy the values from one quat to another + * + * @param {quat} out the receiving quaternion + * @param {quat} a the source quaternion + * @returns {quat} out + * @function + */ +quat.copy = vec4.copy; + +/** + * Set the components of a quat to the given values + * + * @param {quat} out the receiving quaternion + * @param {Number} x X component + * @param {Number} y Y component + * @param {Number} z Z component + * @param {Number} w W component + * @returns {quat} out + * @function + */ +quat.set = vec4.set; + +/** + * Set a quat to the identity quaternion + * + * @param {quat} out the receiving quaternion + * @returns {quat} out + */ +quat.identity = function(out) { + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 1; + return out; +}; + +/** + * Sets a quat from the given angle and rotation axis, + * then returns it. + * + * @param {quat} out the receiving quaternion + * @param {vec3} axis the axis around which to rotate + * @param {Number} rad the angle in radians + * @returns {quat} out + **/ +quat.setAxisAngle = function(out, axis, rad) { + rad = rad * 0.5; + var s = Math.sin(rad); + out[0] = s * axis[0]; + out[1] = s * axis[1]; + out[2] = s * axis[2]; + out[3] = Math.cos(rad); + return out; +}; + +/** + * Adds two quat's + * + * @param {quat} out the receiving quaternion + * @param {quat} a the first operand + * @param {quat} b the second operand + * @returns {quat} out + * @function + */ +quat.add = vec4.add; + +/** + * Multiplies two quat's + * + * @param {quat} out the receiving quaternion + * @param {quat} a the first operand + * @param {quat} b the second operand + * @returns {quat} out + */ +quat.multiply = function(out, a, b) { + var ax = a[0], ay = a[1], az = a[2], aw = a[3], + bx = b[0], by = b[1], bz = b[2], bw = b[3]; + + out[0] = ax * bw + aw * bx + ay * bz - az * by; + out[1] = ay * bw + aw * by + az * bx - ax * bz; + out[2] = az * bw + aw * bz + ax * by - ay * bx; + out[3] = aw * bw - ax * bx - ay * by - az * bz; + return out; +}; + +/** + * Alias for {@link quat.multiply} + * @function + */ +quat.mul = quat.multiply; + +/** + * Scales a quat by a scalar number + * + * @param {quat} out the receiving vector + * @param {quat} a the vector to scale + * @param {Number} b amount to scale the vector by + * @returns {quat} out + * @function + */ +quat.scale = vec4.scale; + +/** + * Rotates a quaternion by the given angle about the X axis + * + * @param {quat} out quat receiving operation result + * @param {quat} a quat to rotate + * @param {number} rad angle (in radians) to rotate + * @returns {quat} out + */ +quat.rotateX = function (out, a, rad) { + rad *= 0.5; + + var ax = a[0], ay = a[1], az = a[2], aw = a[3], + bx = Math.sin(rad), bw = Math.cos(rad); + + out[0] = ax * bw + aw * bx; + out[1] = ay * bw + az * bx; + out[2] = az * bw - ay * bx; + out[3] = aw * bw - ax * bx; + return out; +}; + +/** + * Rotates a quaternion by the given angle about the Y axis + * + * @param {quat} out quat receiving operation result + * @param {quat} a quat to rotate + * @param {number} rad angle (in radians) to rotate + * @returns {quat} out + */ +quat.rotateY = function (out, a, rad) { + rad *= 0.5; + + var ax = a[0], ay = a[1], az = a[2], aw = a[3], + by = Math.sin(rad), bw = Math.cos(rad); + + out[0] = ax * bw - az * by; + out[1] = ay * bw + aw * by; + out[2] = az * bw + ax * by; + out[3] = aw * bw - ay * by; + return out; +}; + +/** + * Rotates a quaternion by the given angle about the Z axis + * + * @param {quat} out quat receiving operation result + * @param {quat} a quat to rotate + * @param {number} rad angle (in radians) to rotate + * @returns {quat} out + */ +quat.rotateZ = function (out, a, rad) { + rad *= 0.5; + + var ax = a[0], ay = a[1], az = a[2], aw = a[3], + bz = Math.sin(rad), bw = Math.cos(rad); + + out[0] = ax * bw + ay * bz; + out[1] = ay * bw - ax * bz; + out[2] = az * bw + aw * bz; + out[3] = aw * bw - az * bz; + return out; +}; + +/** + * Calculates the W component of a quat from the X, Y, and Z components. + * Assumes that quaternion is 1 unit in length. + * Any existing W component will be ignored. + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate W component of + * @returns {quat} out + */ +quat.calculateW = function (out, a) { + var x = a[0], y = a[1], z = a[2]; + + out[0] = x; + out[1] = y; + out[2] = z; + out[3] = -Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z)); + return out; +}; + +/** + * Calculates the dot product of two quat's + * + * @param {quat} a the first operand + * @param {quat} b the second operand + * @returns {Number} dot product of a and b + * @function + */ +quat.dot = vec4.dot; + +/** + * Performs a linear interpolation between two quat's + * + * @param {quat} out the receiving quaternion + * @param {quat} a the first operand + * @param {quat} b the second operand + * @param {Number} t interpolation amount between the two inputs + * @returns {quat} out + * @function + */ +quat.lerp = vec4.lerp; + +/** + * Performs a spherical linear interpolation between two quat + * + * @param {quat} out the receiving quaternion + * @param {quat} a the first operand + * @param {quat} b the second operand + * @param {Number} t interpolation amount between the two inputs + * @returns {quat} out + */ +quat.slerp = function (out, a, b, t) { + // benchmarks: + // http://jsperf.com/quaternion-slerp-implementations + + var ax = a[0], ay = a[1], az = a[2], aw = a[3], + bx = b[0], by = b[1], bz = b[2], bw = b[3]; + + var omega, cosom, sinom, scale0, scale1; + + // calc cosine + cosom = ax * bx + ay * by + az * bz + aw * bw; + // adjust signs (if necessary) + if ( cosom < 0.0 ) { + cosom = -cosom; + bx = - bx; + by = - by; + bz = - bz; + bw = - bw; + } + // calculate coefficients + if ( (1.0 - cosom) > 0.000001 ) { + // standard case (slerp) + omega = Math.acos(cosom); + sinom = Math.sin(omega); + scale0 = Math.sin((1.0 - t) * omega) / sinom; + scale1 = Math.sin(t * omega) / sinom; + } else { + // "from" and "to" quaternions are very close + // ... so we can do a linear interpolation + scale0 = 1.0 - t; + scale1 = t; + } + // calculate final values + out[0] = scale0 * ax + scale1 * bx; + out[1] = scale0 * ay + scale1 * by; + out[2] = scale0 * az + scale1 * bz; + out[3] = scale0 * aw + scale1 * bw; + + return out; +}; + +/** + * Calculates the inverse of a quat + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate inverse of + * @returns {quat} out + */ +quat.invert = function(out, a) { + var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], + dot = a0*a0 + a1*a1 + a2*a2 + a3*a3, + invDot = dot ? 1.0/dot : 0; + + // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0 + + out[0] = -a0*invDot; + out[1] = -a1*invDot; + out[2] = -a2*invDot; + out[3] = a3*invDot; + return out; +}; + +/** + * Calculates the conjugate of a quat + * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result. + * + * @param {quat} out the receiving quaternion + * @param {quat} a quat to calculate conjugate of + * @returns {quat} out + */ +quat.conjugate = function (out, a) { + out[0] = -a[0]; + out[1] = -a[1]; + out[2] = -a[2]; + out[3] = a[3]; + return out; +}; + +/** + * Calculates the length of a quat + * + * @param {quat} a vector to calculate length of + * @returns {Number} length of a + * @function + */ +quat.length = vec4.length; + +/** + * Alias for {@link quat.length} + * @function + */ +quat.len = quat.length; + +/** + * Calculates the squared length of a quat + * + * @param {quat} a vector to calculate squared length of + * @returns {Number} squared length of a + * @function + */ +quat.squaredLength = vec4.squaredLength; + +/** + * Alias for {@link quat.squaredLength} + * @function + */ +quat.sqrLen = quat.squaredLength; + +/** + * Normalize a quat + * + * @param {quat} out the receiving quaternion + * @param {quat} a quaternion to normalize + * @returns {quat} out + * @function + */ +quat.normalize = vec4.normalize; + +/** + * Creates a quaternion from the given 3x3 rotation matrix. + * + * NOTE: The resultant quaternion is not normalized, so you should be sure + * to renormalize the quaternion yourself where necessary. + * + * @param {quat} out the receiving quaternion + * @param {mat3} m rotation matrix + * @returns {quat} out + * @function + */ +quat.fromMat3 = function(out, m) { + // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes + // article "Quaternion Calculus and Fast Animation". + var fTrace = m[0] + m[4] + m[8]; + var fRoot; + + if ( fTrace > 0.0 ) { + // |w| > 1/2, may as well choose w > 1/2 + fRoot = Math.sqrt(fTrace + 1.0); // 2w + out[3] = 0.5 * fRoot; + fRoot = 0.5/fRoot; // 1/(4w) + out[0] = (m[7]-m[5])*fRoot; + out[1] = (m[2]-m[6])*fRoot; + out[2] = (m[3]-m[1])*fRoot; + } else { + // |w| <= 1/2 + var i = 0; + if ( m[4] > m[0] ) + i = 1; + if ( m[8] > m[i*3+i] ) + i = 2; + var j = (i+1)%3; + var k = (i+2)%3; + + fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0); + out[i] = 0.5 * fRoot; + fRoot = 0.5 / fRoot; + out[3] = (m[k*3+j] - m[j*3+k]) * fRoot; + out[j] = (m[j*3+i] + m[i*3+j]) * fRoot; + out[k] = (m[k*3+i] + m[i*3+k]) * fRoot; + } + + return out; +}; + +/** + * Returns a string representation of a quatenion + * + * @param {quat} vec vector to represent as a string + * @returns {String} string representation of the vector + */ +quat.str = function (a) { + return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')'; +}; + +if(typeof(exports) !== 'undefined') { + exports.quat = quat; +} +; + + + + + + + + + + + + + + })(shim.exports); +})(this); diff --git a/src/ext/hammer.js b/src/ext/hammer.js new file mode 100644 index 0000000..053ae57 --- /dev/null +++ b/src/ext/hammer.js @@ -0,0 +1,1545 @@ +/*! Hammer.JS - v1.0.10 - 2014-03-28 + * http://eightmedia.github.io/hammer.js + * + * Copyright (c) 2014 Jorik Tangelder ; + * Licensed under the MIT license */ + +(function(window, undefined) { + 'use strict'; + +/** + * Hammer + * use this to create instances + * @param {HTMLElement} element + * @param {Object} options + * @returns {Hammer.Instance} + * @constructor + */ +var Hammer = function(element, options) { + return new Hammer.Instance(element, options || {}); +}; + +Hammer.VERSION = '1.0.10'; + +// default settings +Hammer.defaults = { + // add styles and attributes to the element to prevent the browser from doing + // its native behavior. this doesnt prevent the scrolling, but cancels + // the contextmenu, tap highlighting etc + // set to false to disable this + stop_browser_behavior: { + // this also triggers onselectstart=false for IE + userSelect : 'none', + // this makes the element blocking in IE10>, you could experiment with the value + // see for more options this issue; https://github.com/EightMedia/hammer.js/issues/241 + touchAction : 'none', + touchCallout : 'none', + contentZooming : 'none', + userDrag : 'none', + tapHighlightColor: 'rgba(0,0,0,0)' + } + + // + // more settings are defined per gesture at /gestures + // +}; + + +// detect touchevents +Hammer.HAS_POINTEREVENTS = window.navigator.pointerEnabled || window.navigator.msPointerEnabled; +Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); + +// dont use mouseevents on mobile devices +Hammer.MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android|silk/i; +Hammer.NO_MOUSEEVENTS = Hammer.HAS_TOUCHEVENTS && window.navigator.userAgent.match(Hammer.MOBILE_REGEX); + +// eventtypes per touchevent (start, move, end) +// are filled by Event.determineEventTypes on setup +Hammer.EVENT_TYPES = {}; + +// interval in which Hammer recalculates current velocity in ms +Hammer.UPDATE_VELOCITY_INTERVAL = 16; + +// hammer document where the base events are added at +Hammer.DOCUMENT = window.document; + +// define these also as vars, for better minification +// direction defines +var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; +var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; +var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; +var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; + +// pointer type +var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; +var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; +var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; + +// touch event defines +var EVENT_START = Hammer.EVENT_START = 'start'; +var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; +var EVENT_END = Hammer.EVENT_END = 'end'; + + +// plugins and gestures namespaces +Hammer.plugins = Hammer.plugins || {}; +Hammer.gestures = Hammer.gestures || {}; + + +// if the window events are set... +Hammer.READY = false; + + +/** + * setup events to detect gestures on the document + */ +function setup() { + if(Hammer.READY) { + return; + } + + // find what eventtypes we add listeners to + Event.determineEventTypes(); + + // Register all gestures inside Hammer.gestures + Utils.each(Hammer.gestures, function(gesture){ + Detection.register(gesture); + }); + + // Add touch events on the document + Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); + Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + + // Hammer is ready...! + Hammer.READY = true; +} + +var Utils = Hammer.utils = { + /** + * extend method, + * also used for cloning when dest is an empty object + * @param {Object} dest + * @param {Object} src + * @parm {Boolean} merge do a merge + * @returns {Object} dest + */ + extend: function extend(dest, src, merge) { + for(var key in src) { + if(dest[key] !== undefined && merge) { + continue; + } + dest[key] = src[key]; + } + return dest; + }, + + + /** + * for each + * @param obj + * @param iterator + */ + each: function each(obj, iterator, context) { + var i, o; + // native forEach on arrays + if ('forEach' in obj) { + obj.forEach(iterator, context); + } + // arrays + else if(obj.length !== undefined) { + for(i=-1; (o=obj[++i]);) { + if (iterator.call(context, o, i, obj) === false) { + return; + } + } + } + // objects + else { + for(i in obj) { + if(obj.hasOwnProperty(i) && + iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + } + }, + + + /** + * find if a string contains the needle + * @param {String} src + * @param {String} needle + * @returns {Boolean} found + */ + inStr: function inStr(src, needle) { + return src.indexOf(needle) > -1; + }, + + + /** + * find if a node is in the given parent + * used for event delegation tricks + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @returns {boolean} has_parent + */ + hasParent: function hasParent(node, parent) { + while(node) { + if(node == parent) { + return true; + } + node = node.parentNode; + } + return false; + }, + + + /** + * get the center of all the touches + * @param {Array} touches + * @returns {Object} center pageXY clientXY + */ + getCenter: function getCenter(touches) { + var pageX = [] + , pageY = [] + , clientX = [] + , clientY = [] + , min = Math.min + , max = Math.max; + + // no need to loop when only one touch + if(touches.length === 1) { + return { + pageX: touches[0].pageX, + pageY: touches[0].pageY, + clientX: touches[0].clientX, + clientY: touches[0].clientY + }; + } + + Utils.each(touches, function(touch) { + pageX.push(touch.pageX); + pageY.push(touch.pageY); + clientX.push(touch.clientX); + clientY.push(touch.clientY); + }); + + return { + pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, + pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, + clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, + clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 + }; + }, + + + /** + * calculate the velocity between two points + * @param {Number} delta_time + * @param {Number} delta_x + * @param {Number} delta_y + * @returns {Object} velocity + */ + getVelocity: function getVelocity(delta_time, delta_x, delta_y) { + return { + x: Math.abs(delta_x / delta_time) || 0, + y: Math.abs(delta_y / delta_time) || 0 + }; + }, + + + /** + * calculate the angle between two coordinates + * @param {Touch} touch1 + * @param {Touch} touch2 + * @returns {Number} angle + */ + getAngle: function getAngle(touch1, touch2) { + var x = touch2.clientX - touch1.clientX + , y = touch2.clientY - touch1.clientY; + return Math.atan2(y, x) * 180 / Math.PI; + }, + + + /** + * angle to direction define + * @param {Touch} touch1 + * @param {Touch} touch2 + * @returns {String} direction constant, like DIRECTION_LEFT + */ + getDirection: function getDirection(touch1, touch2) { + var x = Math.abs(touch1.clientX - touch2.clientX) + , y = Math.abs(touch1.clientY - touch2.clientY); + if(x >= y) { + return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; + }, + + + /** + * calculate the distance between two touches + * @param {Touch} touch1 + * @param {Touch} touch2 + * @returns {Number} distance + */ + getDistance: function getDistance(touch1, touch2) { + var x = touch2.clientX - touch1.clientX + , y = touch2.clientY - touch1.clientY; + return Math.sqrt((x * x) + (y * y)); + }, + + + /** + * calculate the scale factor between two touchLists (fingers) + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @param {Array} start + * @param {Array} end + * @returns {Number} scale + */ + getScale: function getScale(start, end) { + // need two fingers... + if(start.length >= 2 && end.length >= 2) { + return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); + } + return 1; + }, + + + /** + * calculate the rotation degrees between two touchLists (fingers) + * @param {Array} start + * @param {Array} end + * @returns {Number} rotation + */ + getRotation: function getRotation(start, end) { + // need two fingers + if(start.length >= 2 && end.length >= 2) { + return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); + } + return 0; + }, + + + /** + * boolean if the direction is vertical + * @param {String} direction + * @returns {Boolean} is_vertical + */ + isVertical: function isVertical(direction) { + return direction == DIRECTION_UP || direction == DIRECTION_DOWN; + }, + + + /** + * toggle browser default behavior with css props + * @param {HtmlElement} element + * @param {Object} css_props + * @param {Boolean} toggle + */ + toggleDefaultBehavior: function toggleDefaultBehavior(element, css_props, toggle) { + if(!css_props || !element || !element.style) { + return; + } + + // with css properties for modern browsers + Utils.each(['webkit', 'moz', 'Moz', 'ms', 'o', ''], function setStyle(vendor) { + Utils.each(css_props, function(value, prop) { + // vender prefix at the property + if(vendor) { + prop = vendor + prop.substring(0, 1).toUpperCase() + prop.substring(1); + } + // set the style + if(prop in element.style) { + element.style[prop] = !toggle && value; + } + }); + }); + + var false_fn = function(){ return false; }; + + // also the disable onselectstart + if(css_props.userSelect == 'none') { + element.onselectstart = !toggle && false_fn; + } + // and disable ondragstart + if(css_props.userDrag == 'none') { + element.ondragstart = !toggle && false_fn; + } + } +}; + + +/** + * create new hammer instance + * all methods should return the instance itself, so it is chainable. + * @param {HTMLElement} element + * @param {Object} [options={}] + * @returns {Hammer.Instance} + * @constructor + */ +Hammer.Instance = function(element, options) { + var self = this; + + // setup HammerJS window events and register all gestures + // this also sets up the default options + setup(); + + this.element = element; + + // start/stop detection option + this.enabled = true; + + // merge options + this.options = Utils.extend( + Utils.extend({}, Hammer.defaults), + options || {}); + + // add some css to the element to prevent the browser from doing its native behavoir + if(this.options.stop_browser_behavior) { + Utils.toggleDefaultBehavior(this.element, this.options.stop_browser_behavior, false); + } + + // start detection on touchstart + this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { + if(self.enabled) { + Detection.startDetect(self, ev); + } + }); + + // keep a list of user event handlers which needs to be removed when calling 'dispose' + this.eventHandlers = []; + + // return instance + return this; +}; + + +Hammer.Instance.prototype = { + /** + * bind events to the instance + * @param {String} gesture + * @param {Function} handler + * @returns {Hammer.Instance} + */ + on: function onEvent(gesture, handler) { + var gestures = gesture.split(' '); + Utils.each(gestures, function(gesture) { + this.element.addEventListener(gesture, handler, false); + this.eventHandlers.push({ gesture: gesture, handler: handler }); + }, this); + return this; + }, + + + /** + * unbind events to the instance + * @param {String} gesture + * @param {Function} handler + * @returns {Hammer.Instance} + */ + off: function offEvent(gesture, handler) { + var gestures = gesture.split(' ') + , i, eh; + Utils.each(gestures, function(gesture) { + this.element.removeEventListener(gesture, handler, false); + + // remove the event handler from the internal list + for(i=-1; (eh=this.eventHandlers[++i]);) { + if(eh.gesture === gesture && eh.handler === handler) { + this.eventHandlers.splice(i, 1); + } + } + }, this); + return this; + }, + + + /** + * trigger gesture event + * @param {String} gesture + * @param {Object} [eventData] + * @returns {Hammer.Instance} + */ + trigger: function triggerEvent(gesture, eventData) { + // optional + if(!eventData) { + eventData = {}; + } + + // create DOM event + var event = Hammer.DOCUMENT.createEvent('Event'); + event.initEvent(gesture, true, true); + event.gesture = eventData; + + // trigger on the target if it is in the instance element, + // this is for event delegation tricks + var element = this.element; + if(Utils.hasParent(eventData.target, element)) { + element = eventData.target; + } + + element.dispatchEvent(event); + return this; + }, + + + /** + * enable of disable hammer.js detection + * @param {Boolean} state + * @returns {Hammer.Instance} + */ + enable: function enable(state) { + this.enabled = state; + return this; + }, + + + /** + * dispose this hammer instance + * @returns {Hammer.Instance} + */ + dispose: function dispose() { + var i, eh; + + // undo all changes made by stop_browser_behavior + if(this.options.stop_browser_behavior) { + Utils.toggleDefaultBehavior(this.element, this.options.stop_browser_behavior, true); + } + + // unbind all custom event handlers + for(i=-1; (eh=this.eventHandlers[++i]);) { + this.element.removeEventListener(eh.gesture, eh.handler, false); + } + this.eventHandlers = []; + + // unbind the start event listener + Event.unbindDom(this.element, Hammer.EVENT_TYPES[EVENT_START], this.eventStartHandler); + + return null; + } +}; + + +/** + * this holds the last move event, + * used to fix empty touchend issue + * see the onTouch event for an explanation + * @type {Object} + */ +var last_move_event = null; + +/** + * when the mouse is hold down, this is true + * @type {Boolean} + */ +var should_detect = false; + +/** + * when touch events have been fired, this is true + * @type {Boolean} + */ +var touch_triggered = false; + + +var Event = Hammer.event = { + /** + * simple addEventListener + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + */ + bindDom: function(element, type, handler) { + var types = type.split(' '); + Utils.each(types, function(type){ + element.addEventListener(type, handler, false); + }); + }, + + + /** + * simple removeEventListener + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + */ + unbindDom: function(element, type, handler) { + var types = type.split(' '); + Utils.each(types, function(type){ + element.removeEventListener(type, handler, false); + }); + }, + + + /** + * touch events with mouse fallback + * @param {HTMLElement} element + * @param {String} eventType like EVENT_MOVE + * @param {Function} handler + */ + onTouch: function onTouch(element, eventType, handler) { + var self = this; + + + var bindDomOnTouch = function bindDomOnTouch(ev) { + var srcEventType = ev.type.toLowerCase(); + + // onmouseup, but when touchend has been fired we do nothing. + // this is for touchdevices which also fire a mouseup on touchend + if(Utils.inStr(srcEventType, 'mouse') && touch_triggered) { + return; + } + + // mousebutton must be down or a touch event + else if(Utils.inStr(srcEventType, 'touch') || // touch events are always on screen + Utils.inStr(srcEventType, 'pointerdown') || // pointerevents touch + (Utils.inStr(srcEventType, 'mouse') && ev.which === 1) // mouse is pressed + ) { + should_detect = true; + } + + // mouse isn't pressed + else if(Utils.inStr(srcEventType, 'mouse') && !ev.which) { + should_detect = false; + } + + + // we are in a touch event, set the touch triggered bool to true, + // this for the conflicts that may occur on ios and android + if(Utils.inStr(srcEventType, 'touch') || Utils.inStr(srcEventType, 'pointer')) { + touch_triggered = true; + } + + // count the total touches on the screen + var count_touches = 0; + + // when touch has been triggered in this detection session + // and we are now handling a mouse event, we stop that to prevent conflicts + if(should_detect) { + // update pointerevent + if(Hammer.HAS_POINTEREVENTS && eventType != EVENT_END) { + count_touches = PointerEvent.updatePointer(eventType, ev); + } + // touch + else if(Utils.inStr(srcEventType, 'touch')) { + count_touches = ev.touches.length; + } + // mouse + else if(!touch_triggered) { + count_touches = Utils.inStr(srcEventType, 'up') ? 0 : 1; + } + + + // if we are in a end event, but when we remove one touch and + // we still have enough, set eventType to move + if(count_touches > 0 && eventType == EVENT_END) { + eventType = EVENT_MOVE; + } + // no touches, force the end event + else if(!count_touches) { + eventType = EVENT_END; + } + + // store the last move event + if(count_touches || last_move_event === null) { + last_move_event = ev; + } + + + // trigger the handler + handler.call(Detection, self.collectEventData(element, eventType, + self.getTouchList(last_move_event, eventType), + ev) ); + + // remove pointerevent from list + if(Hammer.HAS_POINTEREVENTS && eventType == EVENT_END) { + count_touches = PointerEvent.updatePointer(eventType, ev); + } + } + + // on the end we reset everything + if(!count_touches) { + last_move_event = null; + should_detect = false; + touch_triggered = false; + PointerEvent.reset(); + } + }; + + this.bindDom(element, Hammer.EVENT_TYPES[eventType], bindDomOnTouch); + + // return the bound function to be able to unbind it later + return bindDomOnTouch; + }, + + + /** + * we have different events for each device/browser + * determine what we need and set them in the Hammer.EVENT_TYPES constant + */ + determineEventTypes: function determineEventTypes() { + // determine the eventtype we want to set + var types; + + // pointerEvents magic + if(Hammer.HAS_POINTEREVENTS) { + types = PointerEvent.getEvents(); + } + // on Android, iOS, blackberry, windows mobile we dont want any mouseevents + else if(Hammer.NO_MOUSEEVENTS) { + types = [ + 'touchstart', + 'touchmove', + 'touchend touchcancel']; + } + // for non pointer events browsers and mixed browsers, + // like chrome on windows8 touch laptop + else { + types = [ + 'touchstart mousedown', + 'touchmove mousemove', + 'touchend touchcancel mouseup']; + } + + Hammer.EVENT_TYPES[EVENT_START] = types[0]; + Hammer.EVENT_TYPES[EVENT_MOVE] = types[1]; + Hammer.EVENT_TYPES[EVENT_END] = types[2]; + }, + + + /** + * create touchlist depending on the event + * @param {Object} ev + * @param {String} eventType used by the fakemultitouch plugin + */ + getTouchList: function getTouchList(ev/*, eventType*/) { + // get the fake pointerEvent touchlist + if(Hammer.HAS_POINTEREVENTS) { + return PointerEvent.getTouchList(); + } + + // get the touchlist + if(ev.touches) { + return ev.touches; + } + + // make fake touchlist from mouse position + ev.identifier = 1; + return [ev]; + }, + + + /** + * collect event data for Hammer js + * @param {HTMLElement} element + * @param {String} eventType like EVENT_MOVE + * @param {Object} eventData + */ + collectEventData: function collectEventData(element, eventType, touches, ev) { + // find out pointerType + var pointerType = POINTER_TOUCH; + if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { + pointerType = POINTER_MOUSE; + } + + return { + center : Utils.getCenter(touches), + timeStamp : Date.now(), + target : ev.target, + touches : touches, + eventType : eventType, + pointerType: pointerType, + srcEvent : ev, + + /** + * prevent the browser default actions + * mostly used to disable scrolling of the browser + */ + preventDefault: function() { + var srcEvent = this.srcEvent; + srcEvent.preventManipulation && srcEvent.preventManipulation(); + srcEvent.preventDefault && srcEvent.preventDefault(); + }, + + /** + * stop bubbling the event up to its parents + */ + stopPropagation: function() { + this.srcEvent.stopPropagation(); + }, + + /** + * immediately stop gesture detection + * might be useful after a swipe was detected + * @return {*} + */ + stopDetect: function() { + return Detection.stopDetect(); + } + }; + } +}; + +var PointerEvent = Hammer.PointerEvent = { + /** + * holds all pointers + * @type {Object} + */ + pointers: {}, + + /** + * get a list of pointers + * @returns {Array} touchlist + */ + getTouchList: function getTouchList() { + var touchlist = []; + // we can use forEach since pointerEvents only is in IE10 + Utils.each(this.pointers, function(pointer){ + touchlist.push(pointer); + }); + + return touchlist; + }, + + /** + * update the position of a pointer + * @param {String} type EVENT_END + * @param {Object} pointerEvent + */ + updatePointer: function updatePointer(type, pointerEvent) { + if(type == EVENT_END) { + delete this.pointers[pointerEvent.pointerId]; + } + else { + pointerEvent.identifier = pointerEvent.pointerId; + this.pointers[pointerEvent.pointerId] = pointerEvent; + } + + // it's save to use Object.keys, since pointerEvents are only in newer browsers + return Object.keys(this.pointers).length; + }, + + /** + * check if ev matches pointertype + * @param {String} pointerType POINTER_MOUSE + * @param {PointerEvent} ev + */ + matchType: function matchType(pointerType, ev) { + if(!ev.pointerType) { + return false; + } + + var pt = ev.pointerType + , types = {}; + + types[POINTER_MOUSE] = (pt === POINTER_MOUSE); + types[POINTER_TOUCH] = (pt === POINTER_TOUCH); + types[POINTER_PEN] = (pt === POINTER_PEN); + return types[pointerType]; + }, + + + /** + * get events + */ + getEvents: function getEvents() { + return [ + 'pointerdown MSPointerDown', + 'pointermove MSPointerMove', + 'pointerup pointercancel MSPointerUp MSPointerCancel' + ]; + }, + + /** + * reset the list + */ + reset: function resetList() { + this.pointers = {}; + } +}; + + +var Detection = Hammer.detection = { + // contains all registred Hammer.gestures in the correct order + gestures: [], + + // data of the current Hammer.gesture detection session + current : null, + + // the previous Hammer.gesture session data + // is a full clone of the previous gesture.current object + previous: null, + + // when this becomes true, no gestures are fired + stopped : false, + + + /** + * start Hammer.gesture detection + * @param {Hammer.Instance} inst + * @param {Object} eventData + */ + startDetect: function startDetect(inst, eventData) { + // already busy with a Hammer.gesture detection on an element + if(this.current) { + return; + } + + this.stopped = false; + + // holds current session + this.current = { + inst : inst, // reference to HammerInstance we're working for + startEvent : Utils.extend({}, eventData), // start eventData for distances, timing etc + lastEvent : false, // last eventData + lastVelocityEvent : false, // last eventData for velocity. + velocity : false, // current velocity + name : '' // current gesture we're in/detected, can be 'tap', 'hold' etc + }; + + this.detect(eventData); + }, + + + /** + * Hammer.gesture detection + * @param {Object} eventData + */ + detect: function detect(eventData) { + if(!this.current || this.stopped) { + return; + } + + // extend event data with calculations about scale, distance etc + eventData = this.extendEventData(eventData); + + // hammer instance and instance options + var inst = this.current.inst, + inst_options = inst.options; + + // call Hammer.gesture handlers + Utils.each(this.gestures, function triggerGesture(gesture) { + // only when the instance options have enabled this gesture + if(!this.stopped && inst_options[gesture.name] !== false && inst.enabled !== false ) { + // if a handler returns false, we stop with the detection + if(gesture.handler.call(gesture, eventData, inst) === false) { + this.stopDetect(); + return false; + } + } + }, this); + + // store as previous event event + if(this.current) { + this.current.lastEvent = eventData; + } + + // end event, but not the last touch, so dont stop + if(eventData.eventType == EVENT_END && !eventData.touches.length - 1) { + this.stopDetect(); + } + + return eventData; + }, + + + /** + * clear the Hammer.gesture vars + * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected + * to stop other Hammer.gestures from being fired + */ + stopDetect: function stopDetect() { + // clone current data to the store as the previous gesture + // used for the double tap gesture, since this is an other gesture detect session + this.previous = Utils.extend({}, this.current); + + // reset the current + this.current = null; + + // stopped! + this.stopped = true; + }, + + + /** + * calculate velocity + * @param {Object} ev + * @param {Number} delta_time + * @param {Number} delta_x + * @param {Number} delta_y + */ + getVelocityData: function getVelocityData(ev, delta_time, delta_x, delta_y) { + var cur = this.current + , velocityEv = cur.lastVelocityEvent + , velocity = cur.velocity; + + // calculate velocity every x ms + if (velocityEv && ev.timeStamp - velocityEv.timeStamp > Hammer.UPDATE_VELOCITY_INTERVAL) { + velocity = Utils.getVelocity(ev.timeStamp - velocityEv.timeStamp, + ev.center.clientX - velocityEv.center.clientX, + ev.center.clientY - velocityEv.center.clientY); + cur.lastVelocityEvent = ev; + } + else if(!cur.velocity) { + velocity = Utils.getVelocity(delta_time, delta_x, delta_y); + cur.lastVelocityEvent = ev; + } + + cur.velocity = velocity; + + ev.velocityX = velocity.x; + ev.velocityY = velocity.y; + }, + + + /** + * calculate interim angle and direction + * @param {Object} ev + */ + getInterimData: function getInterimData(ev) { + var lastEvent = this.current.lastEvent + , angle + , direction; + + // end events (e.g. dragend) don't have useful values for interimDirection & interimAngle + // because the previous event has exactly the same coordinates + // so for end events, take the previous values of interimDirection & interimAngle + // instead of recalculating them and getting a spurious '0' + if(ev.eventType == EVENT_END) { + angle = lastEvent && lastEvent.interimAngle; + direction = lastEvent && lastEvent.interimDirection; + } + else { + angle = lastEvent && Utils.getAngle(lastEvent.center, ev.center); + direction = lastEvent && Utils.getDirection(lastEvent.center, ev.center); + } + + ev.interimAngle = angle; + ev.interimDirection = direction; + }, + + + /** + * extend eventData for Hammer.gestures + * @param {Object} evData + * @returns {Object} evData + */ + extendEventData: function extendEventData(ev) { + var cur = this.current + , startEv = cur.startEvent; + + // if the touches change, set the new touches over the startEvent touches + // this because touchevents don't have all the touches on touchstart, or the + // user must place his fingers at the EXACT same time on the screen, which is not realistic + // but, sometimes it happens that both fingers are touching at the EXACT same time + if(ev.touches.length != startEv.touches.length || ev.touches === startEv.touches) { + // extend 1 level deep to get the touchlist with the touch objects + startEv.touches = []; + Utils.each(ev.touches, function(touch) { + startEv.touches.push(Utils.extend({}, touch)); + }); + } + + var delta_time = ev.timeStamp - startEv.timeStamp + , delta_x = ev.center.clientX - startEv.center.clientX + , delta_y = ev.center.clientY - startEv.center.clientY; + + this.getVelocityData(ev, delta_time, delta_x, delta_y); + this.getInterimData(ev); + + Utils.extend(ev, { + startEvent: startEv, + + deltaTime : delta_time, + deltaX : delta_x, + deltaY : delta_y, + + distance : Utils.getDistance(startEv.center, ev.center), + angle : Utils.getAngle(startEv.center, ev.center), + direction : Utils.getDirection(startEv.center, ev.center), + + scale : Utils.getScale(startEv.touches, ev.touches), + rotation : Utils.getRotation(startEv.touches, ev.touches) + }); + + return ev; + }, + + + /** + * register new gesture + * @param {Object} gesture object, see gestures.js for documentation + * @returns {Array} gestures + */ + register: function register(gesture) { + // add an enable gesture options if there is no given + var options = gesture.defaults || {}; + if(options[gesture.name] === undefined) { + options[gesture.name] = true; + } + + // extend Hammer default options with the Hammer.gesture options + Utils.extend(Hammer.defaults, options, true); + + // set its index + gesture.index = gesture.index || 1000; + + // add Hammer.gesture to the list + this.gestures.push(gesture); + + // sort the list by index + this.gestures.sort(function(a, b) { + if(a.index < b.index) { return -1; } + if(a.index > b.index) { return 1; } + return 0; + }); + + return this.gestures; + } +}; + + +/** + * Drag + * Move with x fingers (default 1) around on the page. Blocking the scrolling when + * moving left and right is a good practice. When all the drag events are blocking + * you disable scrolling on that area. + * @events drag, drapleft, dragright, dragup, dragdown + */ +Hammer.gestures.Drag = { + name : 'drag', + index : 50, + defaults : { + drag_min_distance : 10, + + // Set correct_for_drag_min_distance to true to make the starting point of the drag + // be calculated from where the drag was triggered, not from where the touch started. + // Useful to avoid a jerk-starting drag, which can make fine-adjustments + // through dragging difficult, and be visually unappealing. + correct_for_drag_min_distance: true, + + // set 0 for unlimited, but this can conflict with transform + drag_max_touches : 1, + + // prevent default browser behavior when dragging occurs + // be careful with it, it makes the element a blocking element + // when you are using the drag gesture, it is a good practice to set this true + drag_block_horizontal : false, + drag_block_vertical : false, + + // drag_lock_to_axis keeps the drag gesture on the axis that it started on, + // It disallows vertical directions if the initial direction was horizontal, and vice versa. + drag_lock_to_axis : false, + + // drag lock only kicks in when distance > drag_lock_min_distance + // This way, locking occurs only when the distance has become large enough to reliably determine the direction + drag_lock_min_distance : 25 + }, + + triggered: false, + handler : function dragGesture(ev, inst) { + var cur = Detection.current; + + // current gesture isnt drag, but dragged is true + // this means an other gesture is busy. now call dragend + if(cur.name != this.name && this.triggered) { + inst.trigger(this.name + 'end', ev); + this.triggered = false; + return; + } + + // max touches + if(inst.options.drag_max_touches > 0 && + ev.touches.length > inst.options.drag_max_touches) { + return; + } + + switch(ev.eventType) { + case EVENT_START: + this.triggered = false; + break; + + case EVENT_MOVE: + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.distance < inst.options.drag_min_distance && + cur.name != this.name) { + return; + } + + var startCenter = cur.startEvent.center; + + // we are dragging! + if(cur.name != this.name) { + cur.name = this.name; + if(inst.options.correct_for_drag_min_distance && ev.distance > 0) { + // When a drag is triggered, set the event center to drag_min_distance pixels from the original event center. + // Without this correction, the dragged distance would jumpstart at drag_min_distance pixels instead of at 0. + // It might be useful to save the original start point somewhere + var factor = Math.abs(inst.options.drag_min_distance / ev.distance); + startCenter.pageX += ev.deltaX * factor; + startCenter.pageY += ev.deltaY * factor; + startCenter.clientX += ev.deltaX * factor; + startCenter.clientY += ev.deltaY * factor; + + // recalculate event data using new start point + ev = Detection.extendEventData(ev); + } + } + + // lock drag to axis? + if(cur.lastEvent.drag_locked_to_axis || + ( inst.options.drag_lock_to_axis && + inst.options.drag_lock_min_distance <= ev.distance + )) { + ev.drag_locked_to_axis = true; + } + var last_direction = cur.lastEvent.direction; + if(ev.drag_locked_to_axis && last_direction !== ev.direction) { + // keep direction on the axis that the drag gesture started on + if(Utils.isVertical(last_direction)) { + ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; + } + else { + ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + } + + // first time, trigger dragstart event + if(!this.triggered) { + inst.trigger(this.name + 'start', ev); + this.triggered = true; + } + + // trigger events + inst.trigger(this.name, ev); + inst.trigger(this.name + ev.direction, ev); + + var is_vertical = Utils.isVertical(ev.direction); + + // block the browser events + if((inst.options.drag_block_vertical && is_vertical) || + (inst.options.drag_block_horizontal && !is_vertical)) { + ev.preventDefault(); + } + break; + + case EVENT_END: + // trigger dragend + if(this.triggered) { + inst.trigger(this.name + 'end', ev); + } + + this.triggered = false; + break; + } + } +}; + +/** + * Hold + * Touch stays at the same place for x time + * @events hold + */ +Hammer.gestures.Hold = { + name : 'hold', + index : 10, + defaults: { + hold_timeout : 500, + hold_threshold: 2 + }, + timer : null, + + handler : function holdGesture(ev, inst) { + switch(ev.eventType) { + case EVENT_START: + // clear any running timers + clearTimeout(this.timer); + + // set the gesture so we can check in the timeout if it still is + Detection.current.name = this.name; + + // set timer and if after the timeout it still is hold, + // we trigger the hold event + this.timer = setTimeout(function() { + if(Detection.current.name == 'hold') { + inst.trigger('hold', ev); + } + }, inst.options.hold_timeout); + break; + + // when you move or end we clear the timer + case EVENT_MOVE: + if(ev.distance > inst.options.hold_threshold) { + clearTimeout(this.timer); + } + break; + + case EVENT_END: + clearTimeout(this.timer); + break; + } + } +}; + +/** + * Release + * Called as last, tells the user has released the screen + * @events release + */ +Hammer.gestures.Release = { + name : 'release', + index : Infinity, + handler: function releaseGesture(ev, inst) { + if(ev.eventType == EVENT_END) { + inst.trigger(this.name, ev); + } + } +}; + +/** + * Swipe + * triggers swipe events when the end velocity is above the threshold + * for best usage, set prevent_default (on the drag gesture) to true + * @events swipe, swipeleft, swiperight, swipeup, swipedown + */ +Hammer.gestures.Swipe = { + name : 'swipe', + index : 40, + defaults: { + swipe_min_touches: 1, + swipe_max_touches: 1, + swipe_velocity : 0.7 + }, + handler : function swipeGesture(ev, inst) { + if(ev.eventType == EVENT_END) { + // max touches + if(ev.touches.length < inst.options.swipe_min_touches || + ev.touches.length > inst.options.swipe_max_touches) { + return; + } + + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.velocityX > inst.options.swipe_velocity || + ev.velocityY > inst.options.swipe_velocity) { + // trigger swipe events + inst.trigger(this.name, ev); + inst.trigger(this.name + ev.direction, ev); + } + } + } +}; + +/** + * Tap/DoubleTap + * Quick touch at a place or double at the same place + * @events tap, doubletap + */ +Hammer.gestures.Tap = { + name : 'tap', + index : 100, + defaults: { + tap_max_touchtime : 250, + tap_max_distance : 10, + tap_always : true, + doubletap_distance: 20, + doubletap_interval: 300 + }, + + has_moved: false, + + handler : function tapGesture(ev, inst) { + var prev, since_prev, did_doubletap; + + // reset moved state + if(ev.eventType == EVENT_START) { + this.has_moved = false; + } + + // Track the distance we've moved. If it's above the max ONCE, remember that (fixes #406). + else if(ev.eventType == EVENT_MOVE && !this.moved) { + this.has_moved = (ev.distance > inst.options.tap_max_distance); + } + + else if(ev.eventType == EVENT_END && + ev.srcEvent.type != 'touchcancel' && + ev.deltaTime < inst.options.tap_max_touchtime && !this.has_moved) { + + // previous gesture, for the double tap since these are two different gesture detections + prev = Detection.previous; + since_prev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; + did_doubletap = false; + + // check if double tap + if(prev && prev.name == 'tap' && + (since_prev && since_prev < inst.options.doubletap_interval) && + ev.distance < inst.options.doubletap_distance) { + inst.trigger('doubletap', ev); + did_doubletap = true; + } + + // do a single tap + if(!did_doubletap || inst.options.tap_always) { + Detection.current.name = 'tap'; + inst.trigger(Detection.current.name, ev); + } + } + } +}; + +/** + * Touch + * Called as first, tells the user has touched the screen + * @events touch + */ +Hammer.gestures.Touch = { + name : 'touch', + index : -Infinity, + defaults: { + // call preventDefault at touchstart, and makes the element blocking by + // disabling the scrolling of the page, but it improves gestures like + // transforming and dragging. + // be careful with using this, it can be very annoying for users to be stuck + // on the page + prevent_default : false, + + // disable mouse events, so only touch (or pen!) input triggers events + prevent_mouseevents: false + }, + handler : function touchGesture(ev, inst) { + if(inst.options.prevent_mouseevents && + ev.pointerType == POINTER_MOUSE) { + ev.stopDetect(); + return; + } + + if(inst.options.prevent_default) { + ev.preventDefault(); + } + + if(ev.eventType == EVENT_START) { + inst.trigger(this.name, ev); + } + } +}; + + +/** + * Transform + * User want to scale or rotate with 2 fingers + * @events transform, pinch, pinchin, pinchout, rotate + */ +Hammer.gestures.Transform = { + name : 'transform', + index : 45, + defaults : { + // factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 + transform_min_scale : 0.01, + // rotation in degrees + transform_min_rotation : 1, + // prevent default browser behavior when two touches are on the screen + // but it makes the element a blocking element + // when you are using the transform gesture, it is a good practice to set this true + transform_always_block : false, + // ensures that all touches occurred within the instance element + transform_within_instance: false + }, + + triggered: false, + + handler : function transformGesture(ev, inst) { + // current gesture isnt drag, but dragged is true + // this means an other gesture is busy. now call dragend + if(Detection.current.name != this.name && this.triggered) { + inst.trigger(this.name + 'end', ev); + this.triggered = false; + return; + } + + // at least multitouch + if(ev.touches.length < 2) { + return; + } + + // prevent default when two fingers are on the screen + if(inst.options.transform_always_block) { + ev.preventDefault(); + } + + // check if all touches occurred within the instance element + if(inst.options.transform_within_instance) { + for(var i=-1; ev.touches[++i];) { + if(!Utils.hasParent(ev.touches[i].target, inst.element)) { + return; + } + } + } + + switch(ev.eventType) { + case EVENT_START: + this.triggered = false; + break; + + case EVENT_MOVE: + var scale_threshold = Math.abs(1 - ev.scale); + var rotation_threshold = Math.abs(ev.rotation); + + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(scale_threshold < inst.options.transform_min_scale && + rotation_threshold < inst.options.transform_min_rotation) { + return; + } + + // we are transforming! + Detection.current.name = this.name; + + // first time, trigger dragstart event + if(!this.triggered) { + inst.trigger(this.name + 'start', ev); + this.triggered = true; + } + + inst.trigger(this.name, ev); // basic transform event + + // trigger rotate event + if(rotation_threshold > inst.options.transform_min_rotation) { + inst.trigger('rotate', ev); + } + + // trigger pinch event + if(scale_threshold > inst.options.transform_min_scale) { + inst.trigger('pinch', ev); + inst.trigger('pinch' + (ev.scale<1 ? 'in' : 'out'), ev); + } + break; + + case EVENT_END: + // trigger dragend + if(this.triggered) { + inst.trigger(this.name + 'end', ev); + } + + this.triggered = false; + break; + } + } +}; + +// AMD export +if(typeof define == 'function' && define.amd) { + define(function(){ + return Hammer; + }); +} +// commonjs export +else if(typeof module == 'object' && module.exports) { + module.exports = Hammer; +} +// browser export +else { + window.Hammer = Hammer; +} + +})(window); \ No newline at end of file diff --git a/src/ext/string-lerp.js b/src/ext/string-lerp.js new file mode 100644 index 0000000..5473199 --- /dev/null +++ b/src/ext/string-lerp.js @@ -0,0 +1,307 @@ +/* string-lerp - progressively turn one string into another + Copyright 2014 Joe Wreschnig + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/string-lerp/ +*//* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + As additional permission, you may distribute the program or works + based on it without the copy of the GNU GPL normally required, + provided you include this license notice and a URL through which + recipients can access the corresponding source code. +*/ + +/*globals exports, Uint32Array */ + +(function (exports) { + "use strict"; + + var MAX_MATRIX_SIZE = 256 * 256; + + function costMatrix(source, target, ins, del, sub) { + /** Calculate the Levenshtein cost matrix for source and target + + If source and target are strings, they cannot contain any + astral or combining codepoints. Such data must be passed + as arrays of strings with one element per glyph. + + ins, del, and sub are the costs for insertion, deletion, + and substition respectively. Their default value is 1. If + only ins is passed, del and sub are set to the same cost. + If ins and del are passed, sub is set to the more + expensive of the two. + + The matrix is returned as a flat typed array. + + Following http://en.wikipedia.org/wiki/Levenshtein_distance + */ + ins = ins === undefined ? 1 : (ins | 0); + del = (del | 0) || ins; + sub = (sub | 0) || Math.max(ins, del); + var m = source.length + 1; + var n = target.length + 1; + var d = new Uint32Array(m * n); + var i, j; + for (i = 1; i < m; ++i) + d[n * i] = i; + for (j = 1; j < n; ++j) + d[j] = j; + for (j = 1; j < n; ++j) + for (i = 1; i < m; ++i) + if (source[i - 1] === target[j - 1]) + d[n * i + j] = d[n * (i - 1) + j - 1]; + else + d[n * i + j] = Math.min(del + d[n * (i - 1) + j ], + ins + d[n * i + j - 1], + sub + d[n * (i - 1) + j - 1]); + return d; + } + + // First, note that deletion is just substition with nothing, so + // any DEL operation can be replaced by a SUB. Second, the + // operation code *is* the necessary slice offset for applying the + // diff. + var INS = 0, SUB = 1; + + function editPath(costs, target) { + /** Given a cost matrix and a target, create an edit list */ + var path = []; + var j = target.length; + var n = j + 1; + var i = costs.length / n - 1; + while (i || j) { + var sub = (i && j) ? costs[n * (i - 1) + j - 1] : Infinity; + var del = i ? costs[n * (i - 1) + j] : Infinity; + var ins = j ? costs[n * i + j - 1] : Infinity; + if (sub <= ins && sub <= del) { + if (costs[n * i + j] !== costs[n * (i - 1) + j - 1]) + path.push([SUB, i - 1, target[j - 1]]); + --i; --j; + } else if (ins <= del) { + path.push([INS, i, target[j - 1]]); + --j; + } else { + path.push([SUB, i - 1, ""]); + --i; + } + } + return path; + } + + function diff(source, target, ins, del, sub) { + /** Create a list of edits to turn source into target + + ins, del, and sub are as passed to costMatrix. + */ + return editPath(costMatrix(source, target, ins, del, sub), target); + } + + function patchArray(diff, source) { + for (var i = 0; i < diff.length; ++i) { + var edit = diff[i]; + source.splice(edit[1], edit[0], edit[2]); + } + return source; + } + + function patchString(diff, source) { + for (var i = 0; i < diff.length; ++i) { + var edit = diff[i]; + var head = source.slice(0, edit[1]); + var tail = source.slice(edit[1] + edit[0]); + source = head + edit[2] + tail; + } + return source; + } + + function patch(diff, source) { + /** Apply a list of edits to source */ + var patcher = Array.isArray(source) ? patchArray : patchString; + return patcher(diff, source); + } + + // Matches if a string contains combining characters or astral + // codepoints (technically, the first half surrogate of an astral + // codepoint). + var MULTI = /[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uD800-\uDBFF\uFE20-\uFE2F]/; + + // Match an entire (potentially astral) codepoint and any + // combining characters following it. + var GLYPH = /[\0-\u02FF\u0370-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uD800-\uFE1F\uFE30-\uFFFF][\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uDC00-\uDFFF\uFE20-\uFE2F]*/g; + + function diffLerpAstral(source, target, amount) { + // This split is not perfect for all languages, but at least + // it won't create invalid surrogate pairs or orphaned + // combining characters. + var sourceGlyphs = source.match(GLYPH) || []; + var targetGlyphs = target.match(GLYPH) || []; + var edits = diff(targetGlyphs, sourceGlyphs, 2, 2, 3); + // The edit path works from the string end, forwards, because + // that's how Levenshtein edits work. To match LTR reading + // direction (and the behavior of fastLerp), swap the strings + // and invert the parameter when editing. + var partial = edits.slice(0, Math.round((1 - amount) * edits.length)); + return patchArray(partial, targetGlyphs).join(""); + } + + function diffLerpBasic(source, target, amount) { + var edits = diff(target, source, 2, 2, 3); + // The edit path works from the string end, forwards, because + // that's how Levenshtein edits work. To match LTR reading + // direction (and the behavior of fastLerp), swap the strings + // and invert the parameter when editing. + var partial = edits.slice(0, Math.round((1 - amount) * edits.length)); + return patchString(partial, target); + } + + function diffLerp(source, target, amount) { + /** Interpolate between two strings using edit operations + + This interpolation algorithm applys a partial edit of one + string into the other. This produces nice looking results, + but can take a significant amount of time and memory to + compute the edits. It is not recommended for strings + longer than a few hundred characters. + */ + + if (source.match(MULTI) || target.match(MULTI)) + return diffLerpAstral(source, target, amount); + else + return diffLerpBasic(source, target, amount); + } + + var NUMBERS = /(-?\d{1,20}(?:\.\d{1,20})?)/g; + + function areNumericTwins(source, target) { + /** Check if a and b differ only in numerals */ + return source.replace(NUMBERS, "0") === target.replace(NUMBERS, "0"); + } + + function nlerp(source, target, amount) { + return source + (target - source) * amount; + } + + function numericLerp(source, target, amount) { + /** Interpolate numerically between strings containing numbers + + Numbers may have a leading "-" and a single "." to mark + the decimal point, but something must be after the ".". + No other floating point syntax (e.g. 1e6) is supported. + They are treated as fixed-point values, with the point's + position itself interpolating. + + For example, numericLerp("0.0", "100".0, 0.123) === "12.3" + because the "." in "0.0" is interpreted as a decimal + point. But numericLerp("0.", "100.", 0.123) === "12." + because the strings are interpreted as integers followed + by a full stop. + + Calling this functions on strings that differ in more than + numerals gives undefined results. + */ + + var targetParts = target.split(NUMBERS); + var match; + var i = 1; + while ((match = NUMBERS.exec(source))) { + var sourcePart = match[0]; + var targetPart = targetParts[i]; + var part = nlerp(+sourcePart, +targetPart, amount); + var sourcePoint = sourcePart.indexOf("."); + var targetPoint = targetPart.indexOf("."); + var point = Math.round(nlerp( + sourcePoint >= 0 ? (sourcePart.length - 1) - sourcePoint : 0, + targetPoint >= 0 ? (targetPart.length - 1) - targetPoint : 0, + amount)); + targetParts[i] = part.toFixed(point); + i += 2; + } + return targetParts.join(""); + } + + function fastLerpAstral(source, target, amount) { + var sourceGlyphs = source.match(GLYPH) || []; + var targetGlyphs = target.match(GLYPH) || []; + var sourceLength = Math.round(sourceGlyphs.length * amount); + var targetLength = Math.round(targetGlyphs.length * amount); + var head = targetGlyphs.slice(0, targetLength); + var tail = sourceGlyphs.slice(sourceLength, sourceGlyphs.length); + head.push.apply(head, tail); + return head.join(""); + } + + function fastLerpBasic(source, target, amount) { + var sourceLength = Math.round(source.length * amount); + var targetLength = Math.round(target.length * amount); + var head = target.substring(0, targetLength); + var tail = source.substring(sourceLength, source.length); + return head + tail; + } + + function fastLerp(source, target, amount) { + /** Interpolate between two strings based on length + + This interpolation algorithm progressively replaces the + front of one string with another. This approach is fast + but does not look good when the strings are similar. + */ + + // TODO: Consider fast-pathing this even more for very large + // strings, e.g. in the megabyte range. These are large enough + // that it should be fine to just pick a codepoint and search + // for the nearest glyph start. + if (source.match(MULTI) || target.match(MULTI)) + return fastLerpAstral(source, target, amount); + else + return fastLerpBasic(source, target, amount); + } + + function lerp(source, target, amount) { + /** Interpolate between two strings as best as possible + + If the strings are identical aside from numbers in them, + they are passed through numericLerp. + + If the strings are not numbers and short, they are passed + through diffLerp. + + Otherwise, they are passed through fastLerp. + */ + source = source.toString(); + target = target.toString(); + + // Fast path for boundary cases. + if (amount === 0) return source; + if (amount === 1) return target; + + if (areNumericTwins(source, target)) + return numericLerp(source, target, amount); + + // Numeric lerps should over- and under-shoot when fed numbers + // outside 0 to 1, but other types cannot. + if (amount < 0) return source; + if (amount > 1) return target; + + var n = source.length * target.length; + var appropriate = (n && n < MAX_MATRIX_SIZE) ? diffLerp : fastLerp; + return appropriate(source, target, amount); + } + + exports.costMatrix = costMatrix; + exports.patch = patch; + exports.diff = diff; + exports.fastLerp = fastLerp; + exports.diffLerp = diffLerp; + exports.numericLerp = numericLerp; + exports.lerp = lerp; + +})(typeof exports === "undefined" ? (this.stringLerp = {}) : exports); diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..1fedd23 --- /dev/null +++ b/src/index.html @@ -0,0 +1,203 @@ + + + + Pixel Witch Lesson #6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

There was a problem. Sorry about that.

+

+

Error Log

+
+      
+
+
+
+
+

Pixel Witch Lesson #6

+ + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+

Press F12 to take a screenshot.

+
+
+
+

Pixel Witch Lesson #6

+
+
Designed & Implemented
+
Joe Wreschnig
+
Additional Programming
+
+ Brandon Jones & Colin MacKenzie IV + (glMatrix) +
+
+ Christoph Burgmer + (ayepromise) +
+
+ Ian McEwan, Ashima Arts + (WebGL Noise) +
+
+ Jorik Tangelder + (Hammer.js) +
+
Fonts
+
+ Carrois Type Design + (Fira) +
+
+ Dave Gandy + (Font Awesome) +
+
Special Thanks
+
Amelia Gorman
+
Jessicatz Fairymeadow
+
Kenney.nl
+
+ Richard + "The Clock Guy" + Oliver +
+
+
+
+

+ Copyright ©2014 + Yukkuri Games + and others +

+

+ This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either + version + 2 of the License, or (at your option) + any later version. +

+
+
+

+ View Complete Licensing Text +

+
+ + + + diff --git a/src/pwl6.css b/src/pwl6.css new file mode 100644 index 0000000..2b55cb0 --- /dev/null +++ b/src/pwl6.css @@ -0,0 +1,65 @@ +body { + background-color: black; +} + +.yuu-toast { + background-color: hsla(276, 33%, 10%, 1.0); + border: solid hsla(276, 33%, 48%, 1.0) 2px; + color: hsla(276, 33%, 95%, 1.0); +} + +.yuu-overlay { + background-color: hsla(276, 33%, 10%, 0.9); + border: solid hsla(276, 33%, 48%, 1.0) 2px; + color: hsla(276, 33%, 95%, 1.0); +} + +.yuu-overlay *:focus { + box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + -moz-box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + -webkit-box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + outline: none; +} + +input[type=range][data-yuu-command] { + background-color: hsla(276, 33%, 25%, 1.0); + border: solid hsla(276, 33%, 48%, 0.33) 1px; +} + +input[type=range][data-yuu-command]::-webkit-slider-thumb { + background-color: hsla(276, 33%, 65%, 1.0); +} + +input[type=range][data-yuu-command]::-moz-range-track { + background-color: hsla(276, 33%, 25%, 1.0); +} + +input[type=range][data-yuu-command]::-moz-range-thumb { + background: hsla(276, 33%, 65%, 1.0); +} + +input[type=checkbox][data-yuu-command]:focus + label[for] { + box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + -moz-box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + -webkit-box-shadow: 0 0 5px hsla(276, 66%, 80%, 1.0); + outline: 0; +} + +input[data-yuu-command] + label[for]:before { + color: hsla(276, 33%, 65%, 1.0); +} + +a[href], [data-yuu-command] { + color: hsla(276, 33%, 65%, 1.0); +} + +hr { + border: solid hsla(276, 33%, 48%, 0.75) 1px; +} + +.link-footer { + list-style-type: none; + text-align: center; + margin-left: 0; + padding-left: 0; +} diff --git a/src/pwl6.js b/src/pwl6.js new file mode 100644 index 0000000..dc50206 --- /dev/null +++ b/src/pwl6.js @@ -0,0 +1,2149 @@ +"use strict"; + +var storage; +var SIGILS; +var BOOK; +var handScene; +var circleScene; +var NOISY_BLOCKS; + +var sounds; + +var TOP = 0; +var LEFT = 1; +var BOTTOM = 2; +var RIGHT = 3; + +var MenuScene, CircleScene, HandScene, BookScene, GridScene; + +yuu.Texture.DEFAULTS.magFilter = yuu.Texture.DEFAULTS.minFilter = "nearest"; + +var TICK_ROT = quat.rotateZ(quat.create(), quat.create(), Math.PI / 30); +var TICK_REV = quat.invert(quat.create(), TICK_ROT); +var TICK_ROT2 = quat.rotateZ(quat.create(), quat.create(), Math.PI / 60); + +function sawtooth (p) { + /** Sawtooth wave, Û = 1, T = 2π, f(0) = 0, f′(0) > 0 */ + var _2PI = 2 * Math.PI; + return 2 * (p / _2PI - Math.floor(0.5 + p / _2PI)); +} + +function triangle (p) { + /** Triangle wave, Û = 1, T = 2π, f(0) = 0, f′(0) > 0 */ + return 2 * Math.abs(sawtooth(p + Math.PI / 2)) - 1; +} + +function waveshift (period, peak, xoffset, yoffset) { + period /= 2 * Math.PI; + xoffset = xoffset || 0; + yoffset = yoffset || 0; + return function (f) { + return function (p) { + return yoffset + peak * f.call(this, (p + xoffset) / period); + }; + }; +} + +function cycler (scale) { + var f = waveshift(scale, 0.5, -Date.now(), 0.5)(triangle); + return function () { return f(Date.now()); }; +} + +function load () { + storage = ystorage.getStorage(); + yuu.audio.storage = storage; + + NOISY_BLOCKS = new yuu.ShaderProgram(null, ["@noise.glsl", "@noisyblocks"]); + + SIGILS = new yuu.Material("@sigils"); + BOOK = new yuu.Material("@book", NOISY_BLOCKS); + BOOK.uniforms.cut = yf.volatile(cycler(20000)); + BOOK.uniforms.range = 0.06; + BOOK.texture.ready.then(function (texture) { + BOOK.uniforms.resolution = new Float32Array( + [texture.width / 4, texture.height / 4]); + }); + + sounds = { + tick: new yuu.Instrument("@tick"), + tock: new yuu.Instrument("@tock"), + regear: new yuu.Instrument("@regear"), + winding: new yuu.Instrument("@winding"), + slam: new yuu.Instrument("@slam"), + switch: new yuu.Instrument("@switch"), + clicking: new yuu.Instrument("@clicking"), + bookAppear: new yuu.Instrument("@book-appear"), + switchBroke: new yuu.Instrument({ + sample: { "@switch": { duration: 0.27, offset: 0.1 } } }), + switchOn: new yuu.Instrument({ + sample: { "@switch": { duration: 0.2 } } }), + switchOff: new yuu.Instrument({ + sample: { "@switch": { offset: 0.2 } } }), + chime: new yuu.Instrument({ + envelope: { "0": 1, "0.7": 0.2, "3": 0 }, + modulator: { + envelope: { "0": 1, "0.7": 0.2, "3": 0 }, + frequency: "x1.5", + } + }), + }; + + yuu.director.pushScene(circleScene = new CircleScene()); + yuu.director.pushScene(handScene = new HandScene()); + yuu.director.pushScene(new MenuScene()); + if (!storage.getFlag("instructions")) { + yuu.director.entity0.attach(new yuu.Ticker(function () { + yuu.director.pushScene(new BookScene()); + }, 60)); + } + + return yuu.ready( + [SIGILS, BOOK] + .concat(yf.map(yf.getter.bind(sounds), Object.keys(sounds))) + ); +} + +function start () { + yuu.director.start(); +} + +window.addEventListener("load", function() { + yuu.registerInitHook(load); + yuu.init({ backgroundColor: [0, 0, 0, 1], antialias: false }).then(start); +}); + +var PALETTE = [[ 0.76, 0.13, 0.13 ], + [ 0.33, 0.49, 0.71 ], + [ 0.45, 0.68, 0.32 ], + [ 0.51, 0.32, 0.63 ], + [ 0.89, 0.49, 0.11 ], + [ 1.00, 1.00, 0.30 ]]; + +var LEVELS = [ + { name: "12345654321", + randomSlammer: [3, 5], + deps: "50040@easy 53535@easy 44404@easy 1302@easy 12321@easy 20124@easy" + }, + + { slammer: [1, 1], sets: "tutorial", + scramble: { easy: "01", hard: "0122" } }, + { slammer: [1, 1, 1], deps: "tutorial", + scramble: { easy: "11", hard: "1212" } }, + { slammer: [2, 1], deps: "tutorial", sets: "asymmetric", + scramble: { easy: "32", hard: "3321" } }, + { slammer: [1, 2, 1], deps: "tutorial", sets: "unequal", + scramble: { easy: "112", hard: "3210" } }, + { slammer: [2, 0], deps: "asymmetric", sets: "zero", + scramble: { easy: "23", hard: "032" } }, + { slammer: [2, 0, 2], deps: "zero", + scramble: { easy: "11", hard: "2211" } }, + { slammer: [1, 1, 1, 1], deps: "tutorial" }, + { slammer: [2, 1, 1], deps: "asymmetric" }, + { slammer: [1, 2, 1, 2], deps: "asymmetric", + scramble: { easy: "012" } }, + { slammer: [1, 2, 3, 4], deps: "asymmetric", sets: "solid", + scramble: { easy: "110" } }, + { slammer: [5, 0, 0, 4, 0], deps: "unequal zero", + scramble: { easy: "112" } }, + { slammer: [5, 3, 5, 3, 5], deps: "unequal solid", + scramble: { easy: "3232" } }, + { slammer: [4, 4, 4, 0, 4], deps: "solid zero", + scramble: { easy: "0321" } }, + { slammer: [1, 3, 0, 2], deps: "unequal zero" }, + { slammer: [1, 2, 3, 2, 1], deps: "unequal", + scramble: { easy: "3333" } }, + { slammer: [2, 0, 1, 2, 4], deps: "unequal zero" }, +]; + +function levelName (level) { + return (level.name || level.slammer.join("")).trim(); +} + +function wonLevel (level, difficulty) { + if (level.sets) + storage.setFlag(level.sets); + storage.setFlag(levelName(level) + "@" + difficulty); +} + +function hasBeaten (level, difficulty) { + return storage.getFlag(levelName(level) + "@" + difficulty); +} + +function scrambleForLevel (rnd, level, difficulty) { + var c = difficulty === "easy" ? 0 : 1; + if (difficulty === "random") + c = rnd.randrange(2, 5); + var length = level.slammer.length; + return rnd.randrange(length * c, length * (c + 1)) + 2; +} + +function difficultyForLevel (level) { + if (level.deps && !level.deps.split(" ").every(storage.getFlag, storage)) + return null; + if (hasBeaten(level, "hard")) + return "random"; + if (hasBeaten(level, "easy")) + return "hard"; + else + return "easy"; +} + +function levelRandom (level, difficulty) { + if (difficulty === "random") + return yuu.random; + else + return new yuu.Random(yuu.createLCG(+level.slammer.join(""))); +} + +function generateBoard (rnd, level) { + var size = level.length; + var board = new Array(size); + for (var i = 0; i < size; ++i) + board[i] = yf.repeat(i % PALETTE.length + 1, size); + if (rnd.randbool()) + yuu.transpose2d(board); + return board; +} + +function generateSlammer (rnd, level) { + var s = new Array(level.length); + for (var i = 0; i < s.length; ++i) + s[i] = yf.repeat(0, level[i]); + if (rnd.randbool()) + s.reverse(); + return s; +} + +var AnimationQueue = yT(yuu.C, { + constructor: function () { + this._queue = []; + }, + + attached: function () { + this._queue = []; + }, + + _runNext: function () { + var next = this._queue[0]; + if (next && this.entity) + this.entity.attach(new yuu.Animation( + next.timeline, next.params, this._complete.bind(this))); + }, + + _complete: function () { + var next = this._queue.shift(); + next.resolve(); + this._runNext(); + }, + + enqueue: function (timeline, params) { + return new Promise(function (resolve) { + this._queue.push({ + timeline: timeline, + params: params, + resolve: resolve + }); + // FIXME: Simply chaining the promise doesn't work here + // because the tick between the two handlers is often long + // enough to render a frame, and that frame will have some + // undesirable intermediate state. + if (this._queue.length === 1) + this._runNext(); + }.bind(this)); + }, + + SLOTS: ["animationQueue"] +}); + +var SLAMMER_ROTATE = { + 0: { tween1: { yaw: "yaw" }, duration: 10 } +}; + +var ROTATE_ALL = { + 0: { tweenAll: { yaw: "yaws" }, duration: 10 } +}; + +var SLAMMER_BOUNCE = { + 0: { tween1: { y: 0.5 }, duration: 5, repeat: -1 } +}; + +var SLIDE_BLOCKS = { + 0: { tweenAll: { position: "positions" }, + duration: 8, easing: "linear" }, +}; + +var SLAMMER_SLAM = { + 0: { tween1: { y: -1.5 }, easing: "linear", duration: 6 }, + 6: { event: "slideBoardBlocks" }, + 15: { event: "slam", + tween1: { y: 0 }, easing: "linear", duration: 8 } +}; + +var GRID_DISMISS = { + 0: { tween1: { yaw: 2 * Math.PI, x: "x", y: "y", scale: [0.3, 0.3, 1] }, + duration: 45 } +}; + +var GRID_FINISHED = { + 0: { tween: { arm: { scale: [0, 0, 1], yaw: "armYaw", y: "armY" }, + board: { y: "boardY" } }, + duration: 45 } +}; + +function rotateCw (d) { return (--d + 4) % 4; } +function rotateCcw (d) { return ++d % 4; } +function opposite (d) { return (d + 2) % 4; } + +var FlagSet = yT({ + /** Manage a set of semaphore-like counting flags. */ + + constructor: function () { + /** Construct a flag set for the provided flags. + + Flags are initialized to 0 by default. + */ + this._counts = {}; + for (var i = 0; i < arguments.length; ++i) + this._counts[arguments[i]] = 0; + }, + + increment: function () { + /** Increment the provided flags. */ + for (var i = 0; i < arguments.length; ++i) + this._counts[arguments[i]]++; + }, + + decrement: function () { + /** Decrement the provided flags. + + No underflow checks are performed. A flag with a negative + value is considered set exactly as a flag with a positive + value. + */ + for (var i = 0; i < arguments.length; ++i) + this._counts[arguments[i]]--; + }, + + some: function () { + /** Return true if any of the provided flags are set. */ + return yf.some.call(this._counts, yf.getter, arguments); + }, + + every: function () { + /** Return true if all of the provided flags are set. */ + return yf.every.call(this._counts, yf.getter, arguments); + }, + + none: function () { + /** Return true if none of the provided flags are set. */ + return !this.some.apply(this, arguments); + }, + + incrementer: function () { + /** Provide a bound 0-ary function to increment the provided flags. + + Useful for wrapps around context-free callbacks. + */ + var that = this, args = arguments; + return function () { that.increment.apply(that, args); }; + }, + + decrementer: function () { + /** Provide a bound 0-ary function to decrement the provided flags. + + Useful for wrapps around context-free callbacks. + */ + var that = this, args = arguments; + return function () { that.decrement.apply(that, args); }; + } +}); + +var BoardController = yT(yuu.C, { + constructor: function (rnd, level, colors) { + this.contents = generateBoard(rnd, level.slammer); + this.colors = colors; + }, + updateChildren: function () { + this.entity.data.quads.forEach(function (q) { + q.quad.position = [q.x, q.y]; + var i = this.contents[q.x][q.y]; + q.quad.color = this.colors[i]; + q.quad.texBounds = [i / 6, 0.5, (i + 1) / 6, 1.0]; + }, this); + }, + isComplete: function() { + var x, y; + var rows = true, cols = true; + for (x = 1; x < this.contents.length && rows; ++x) + for (y = 0; y < this.contents[x].length && rows; ++y) + rows = this.contents[x - 1][y] === this.contents[x][y]; + for (x = 0; x < this.contents.length && cols; ++x) + for (y = 1; y < this.contents[x].length && cols; ++y) + cols = this.contents[x][y - 1] === this.contents[x][y]; + return rows || cols; + }, + + shift: [ + function (x, replacement) { + var lost = this.contents[x].pop(); + this.contents[x].unshift(replacement); + return lost; + }, + function (y, replacement) { + yuu.transpose2d(this.contents); + var lost = this.shift[BOTTOM].call(this, y, replacement); + yuu.transpose2d(this.contents); + return lost; + }, + function (x, replacement) { + var lost = this.contents[x].shift(); + this.contents[x].push(replacement); + return lost; + }, + function (y, replacement) { + yuu.transpose2d(this.contents); + var lost = this.shift[TOP].call(this, y, replacement); + yuu.transpose2d(this.contents); + return lost; + } + ], + + SLOTS: ["controller"] +}); + +var SlammerController = yT(yuu.C, { + constructor: function (rnd, level, colors) { + this.blocks = generateSlammer(rnd, level.slammer); + this.orientation = TOP; + this.colors = colors; + this._undoRecord = []; + }, + isComplete: function() { + return yf.none(yf.some.bind(null, null), this.blocks); + }, + updateChildren: function () { + this.entity.data.quads.forEach(function (q) { + var i = this.blocks[q.x][q.y]; + q.quad.position = [q.x, q.y]; + q.quad.color = this.colors[i]; + q.quad.texBounds = [i / 6, 0.5, (i + 1) / 6, 1.0]; + }, this); + }, + + lastUndoRecord: { get: function () { + return yf.last(this._undoRecord); + } }, + + clearUndoRecord: function () { + this._undoRecord = []; + }, + + slam: function (board) { + var undoable = (this.orientation !== this.lastUndoRecord); + var length = this.blocks.length; + this.orientation = opposite(this.orientation); + this.blocks = yf.mapr.call(this, function (a, y) { + return yf.map(board.shift[this.orientation].bind(board, y), a) + .reverse(); + }, this.blocks, (this.orientation & 2) + ? yf.range(length) + : yf.range(length - 1, -1, -1)); + yf.each(function (i) { + i.x = length - (i.x + 1); + }, this.entity.data.quads); + this.updateChildren(); + board.updateChildren(); + if (undoable) + this._undoRecord.push(this.orientation); + else + this._undoRecord.pop(); + }, + + SLOTS: ["controller"] +}); + +function randSide (rnd, except) { + return (rnd || yuu.random).choice( + yf.without([TOP, LEFT, BOTTOM, RIGHT], except)); +} + +var HANDS_LEFT = { + 0: { tween: { left: { yaw: -0.3 } }, duration: 3 }, + 3: { tween: { left: { yaw: 0.0 } }, duration: 7 }, +}; + +var HANDS_RIGHT = { + 0: { tween: { right: { yaw: -0.3 } }, duration: 3 }, + 3: { tween: { right: { yaw: 0.0 } }, duration: 7 }, +}; + +var HANDS_UNDO = { + 0: { tween: { left: { yaw: 0.2 }, right: { yaw: 0.2 } }, + duration: 3 }, + 3: { tween: { left: { yaw: 0.0 }, right: { yaw: 0.0 } }, + duration: 7 } +}; + +var HANDS_MENU_CHOICE = { + 0: { tween: { left: { x: -1.3 }, + right: { x: -1.3 } }, + duration: 15, easing: "ease_in" + }, + + 10: { tween: { left: { scaleX: 1 }, + right: { scaleX: 1 } }, + duration: 20 }, + + 20: { set: { leftQuad: { color: "frontColor" }, + rightQuad: { color: "frontColor" } }, + tween: { left: { x: 0 }, right: { x: 0 } }, + duration: 15 + }, +}; + +var HANDS_RETURN = { + 0: { tween: { left: { x: -1.3 }, + right: { x: -1.3 } }, + duration: 20 + }, + + 10: { tween: { left: { scaleX: -1 }, + right: { scaleX: -1 } }, + duration: 20 }, + + 20: { set: { leftQuad: { color: "backColor" }, + rightQuad: { color: "backColor" } }, + tween: { left: { x: -1 }, right: { x: -1 } }, + duration: 10 + }, +}; + +var HANDS_SLAM = [ + // TOP + { 0: { tween: { left: { yaw: -0.2, scaleX: 0.8, y: -0.1 }, + right: { yaw: -0.2, scaleX: 0.8, y: -0.1 }, + }, duration: 10, repeat: -1 }, + }, + + // LEFT + { 0: { tween: { left: { scaleX: 0.8, x: 0.1 }, + right: { scaleX: 0.9 }, + }, duration: 10, repeat: -1 }, + }, + + // BOTTOM + { 0: { tween: { left: { yaw: 0.2, scaleX: 0.8 }, + right: { yaw: 0.2, scaleX: 0.8 }, + }, duration: 10, repeat: -1 }, + }, + + // RIGHT + { 0: { tween: { left: { scaleX: 0.9 }, + right: { scaleX: 0.8, x: 0.1 }, + }, duration: 10, repeat: -1 }, + }, +]; + +var HANDS_ROTATE_CW = { + 0: { tween: { left: { scaleX: 0.8 } }, duration: 5 }, + 5: { tween: { left: { scaleX: 1.0 } }, duration: 5 }, +}; + +var HANDS_ROTATE_CCW = { + 0: { tween: { right: { scaleX: 0.8 } }, duration: 5 }, + 5: { tween: { right: { scaleX: 1 } }, duration: 5 }, +}; + +var BUTTONS_IN = { + 0: { tween: { a: { x: 0 }, b: { x: 1.5 } }, duration: 25 } +}; + +var BUTTONS_OUT = { + 0: { tween: { a: { x: -1.5 }, b: { x: 0 } }, duration: 25 } +}; + +HandScene = yT(yuu.Scene, { + constructor: function () { + yuu.Scene.call(this); + var hands = new yuu.Material("@hand"); + this.left = new yuu.E(new yuu.Transform()); + var l = new yuu.E( + new yuu.Transform([-0.5, 0.5, 0]), + new yuu.DataC({ command: "left" }), + this.leftQuad = new yuu.QuadC(hands)); + this.left.addChild(l); + var r = new yuu.E( + new yuu.Transform([-0.5, 0.5, 0]), + new yuu.DataC({ command: "right" }), + this.rightQuad = new yuu.QuadC(hands)); + this.right = new yuu.E(new yuu.Transform()); + this.right.addChild(r); + var SIZE_X = yuu.random.gauss(1.2, 0.15) * 0.35; + var SIZE_Y = yuu.random.gauss(1.1, 0.05) * 0.51; + var hand = yuu.random.randrange(3); + this.leftQuad.texBounds = this.rightQuad.texBounds = [ + hand / 2.99, 0, (hand + 1) / 3.01, 1]; + this.layer0.resize(-0.75, 0, 1.5, 1.5); + var leftWrist = new yuu.E( + new yuu.Transform([-0.20, 0, 0], null, + [SIZE_X, SIZE_Y, 1])); + var rightWrist = new yuu.E( + new yuu.Transform([0.20, 0, 0], null, + [-SIZE_X, SIZE_Y, 1])); + leftWrist.addChild(this.left); + rightWrist.addChild(this.right); + this.addEntities(leftWrist, rightWrist); + this.backColor = yuu.hslToRgb( + (yuu.random.gauss(0.1, 0.1) + 10) % 1, + yuu.random.uniform(0.2, 0.7), + yuu.random.uniform(0.2, 0.6), + 1.0); + this.leftQuad.alpha = this.rightQuad.alpha = 0.2; + var hsl = yuu.rgbToHsl(this.backColor); + hsl[2] = hsl[2].lerp(1, 0.15); + hsl[1] = hsl[1].lerp(0, 0.30); + hsl[3] = 0.4; + this.frontColor = yuu.hslToRgb(hsl); + this.leftQuad.color = this.rightQuad.color = this.frontColor; + this.ready = hands.ready; + + function Button (i, command) { + return new yuu.E( + new yuu.Transform(), + new yuu.DataC({ command: command }), + new yuu.QuadC(SIGILS) + .setTexBounds([i / 6, 0, (i + 1) / 6, 0.5]) + .setColor(PALETTE[i])); + } + + this.helpButton = new Button(1, "help"); + this.backButton = new Button(3, "back"); + this.backButton.transform.x -= 1.5; + this.leftButtons = new yuu.E(new yuu.Transform()); + this.leftButtons.addChildren(this.helpButton, this.backButton); + this.rightButton = new Button(2, "showOverlay preferences"); + this.leftButtons.transform.scale + = this.rightButton.transform.scale + = [0.075, 0.075, 1]; + this.entity0.addChildren(this.leftButtons, this.rightButton); + this.buttons = [this.helpButton, this.backButton, this.rightButton, + l, r]; + }, + + inputs: { + resize: function () { + var base = new yuu.AABB(-0.75, 0, 0.75, 1.5); + var vp = base.matchAspectRatio(yuu.viewport); + vp.y1 -= vp.y0; + vp.y0 = 0; + this.leftButtons.transform.xy = [ + vp.x0 + this.leftButtons.transform.scaleX, + vp.y1 - this.leftButtons.transform.scaleY]; + this.rightButton.transform.xy = [ + vp.x1 - this.rightButton.transform.scaleX, + vp.y1 - this.rightButton.transform.scaleY]; + this.layer0.resize(vp.x0, vp.y0, vp.w, vp.h); + }, + + mousemove: function (p) { + p = this.layer0.worldFromDevice(p); + this.cursor = ""; + for (var i = 0; i < this.buttons.length; ++i) { + if (this.buttons[i].transform.contains(p)) { + this.cursor = "pointer"; + } + } + }, + + tap: function (p) { + p = this.layer0.worldFromDevice(p); + for (var i = 0; i < this.buttons.length; ++i) { + if (this.buttons[i].transform.contains(p)) { + yuu.director.execute(this.buttons[i].data.command); + return true; + } + } + }, + + doubletap: function () { + return this.inputs.tap.apply(this, arguments); + }, + }, + + _anim: function (timeline) { + this.entity0.attach(new yuu.Animation( + timeline, { + left: this.left.transform, + right: this.right.transform, + leftQuad: this.leftQuad, + rightQuad: this.rightQuad, + frontColor: this.frontColor, + backColor: this.backColor + })); + }, + + undo: function () { this._anim(HANDS_UNDO); }, + movedLeft: function () { this._anim(HANDS_LEFT); }, + movedRight: function () { this._anim(HANDS_RIGHT); }, + slam: function (o) { this._anim(HANDS_SLAM[o]); }, + rotatedCw: function () { this._anim(HANDS_ROTATE_CW); }, + rotatedCcw: function () { this._anim(HANDS_ROTATE_CCW); }, + menuChoice: function () { + this.entity0.attach(new yuu.Animation( + BUTTONS_IN, { + a: this.backButton.transform, + b: this.helpButton.transform + })); + this._anim(HANDS_MENU_CHOICE); + }, + finished: function () { + this.entity0.attach(new yuu.Animation( + BUTTONS_OUT, { + a: this.backButton.transform, + b: this.helpButton.transform + })); + this._anim(HANDS_RETURN); + }, +}); + +var GRID_APPEAR = { + 0: { set1: { y: 5 }, + tween1: { y: 0 }, duration: 10 }, +}; + +GridScene = yT(yuu.Scene, { + constructor: function (level, difficulty) { + yuu.Scene.call(this); + this.entity0.attach(new yuu.Transform()); + this.level = level; + this.difficulty = difficulty; + this._locks = new FlagSet("slam", "spin", "quit"); + var rnd = levelRandom(level, difficulty); + var colors = yuu.random.shuffle(PALETTE.slice()); + colors.unshift([1.0, 1.0, 1.0]); + this.board = new yuu.E(new BoardController(rnd, level, colors), + new yuu.Transform(), + new yuu.DataC({ quads: [] })); + this.slammer = new yuu.E(new SlammerController(rnd, level, colors), + new yuu.Transform(), + new yuu.DataC({ quads: [] })); + this.slammerHead = new yuu.E(new yuu.Transform()); + this.slammerRoot = new yuu.E(new yuu.Transform()); + var length = level.slammer.length; + var maxSize = length * length; + var slammerBatch = new yuu.QuadBatchC(maxSize); + slammerBatch.material = SIGILS; + var boardBatch = new yuu.QuadBatchC(maxSize); + boardBatch.material = SIGILS; + this.slammerRoot.transform.xy = [length / 2 - 0.5, length / 2 - 0.5]; + this.slammerHead.transform.xy = [-length / 2 + 0.5, length / 2 + 2]; + this.slammerRoot.addChild(this.slammerHead); + this.slammerHead.addChild(this.slammer); + this.slammer.attach(slammerBatch); + this.board.attach(boardBatch); + yf.irange.call(this, function (x) { + yf.irange.call(this, function (y) { + var quad = boardBatch.createQuad(); + quad.color = colors[this.board.controller.contents[x][y]]; + quad.position = [x, y]; + this.board.data.quads.push({ quad: quad, x: x, y: y }); + }, length); + }, length); + + for (var x = 0; x < this.slammer.controller.blocks.length; ++x) { + for (var y = 0; y < this.slammer.controller.blocks[x].length; ++y) { + var quad = slammerBatch.createQuad(); + quad.color = colors[this.slammer.controller.blocks[x][y]]; + quad.position = [x, y]; + this.slammer.data.quads.push({ quad: quad, x: x, y: y }); + } + } + this.addEntities(this.board, this.slammerRoot); + this.scramble(rnd); + if (!(this.cheating = yuu.director.input.pressed["`"])) { + this.slammer.controller.clearUndoRecord(); + } + this._dragging = 0; + + this.gridBB = new yuu.AABB(-0.5, -0.5, length - 0.5, length - 0.5); + this.leftBB = new yuu.AABB( + -Infinity, this.gridBB.y0, this.gridBB.x0, this.gridBB.y1); + this.rightBB = new yuu.AABB( + this.gridBB.x1, this.gridBB.y0, Infinity, this.gridBB.y1); + this.topBB = new yuu.AABB( + this.gridBB.x0, this.gridBB.y1, this.gridBB.x1, Infinity); + this.bottomBB = new yuu.AABB( + this.gridBB.x0, -Infinity, this.gridBB.x1, this.gridBB.y0); + }, + + init: function () { + this._locks.increment("slam"); + this.entity0.attach(new yuu.Animation( + GRID_APPEAR, { $: this.slammer.transform }, + this._locks.decrementer("slam"))); + }, + + scramble: function (rnd) { + var scramble = (this.level.scramble || {})[this.difficulty]; + var slammerCon = this.slammer.controller; + var boardCon = this.board.controller; + if (!scramble) { + var count = scrambleForLevel(rnd, this.level, this.difficulty); + while (this.isComplete()) { + var c = count; + while (c--) { + slammerCon.orientation = randSide(rnd, slammerCon.orientation); + slammerCon.slam(boardCon); + } + } + } else { + for (var i =0; i < scramble.length; ++i) { + slammerCon.orientation = +scramble[i]; + slammerCon.slam(boardCon); + } + } + slammerCon.orientation = randSide(); + this.slammerRoot.transform.yaw = slammerCon.orientation * Math.PI / 2; + }, + + isComplete: function () { + return this.slammer.controller.isComplete() + && this.board.controller.isComplete(); + }, + + rotateTo: yuu.cmd(function (orientation) { + return new Promise(function (resolve) { + if (this._locks.some("spin")) + return this; + this.slammer.controller.orientation = orientation; + this._locks.increment("slam"); + var yaw0 = this.slammerRoot.transform.yaw; + var yaw1 = orientation * Math.PI / 2; + + sounds.clicking.play(); + this.entity0.attach(new yuu.Animation( + SLAMMER_ROTATE, { + $: this.slammerRoot.transform, + yaw: yaw0 + yuu.normalizeRadians(yaw1 - yaw0) + }, function () { + this._locks.decrement("slam"); + resolve(this); + }.bind(this))); + }.bind(this)); + }, "", "move the slammer to the top"), + + rotateCw: yuu.cmd(function () { + handScene.rotatedCw(); + circleScene.rotated(); + this.rotateTo(rotateCw(this.slammer.controller.orientation)); + }, "", "rotate the active piece clockwise"), + + rotateCcw: yuu.cmd(function () { + handScene.rotatedCcw(); + circleScene.rotated(); + this.rotateTo(rotateCcw(this.slammer.controller.orientation)); + }, "", "rotate the active piece counter-clockwise"), + + left: yuu.cmd(function () { this.rotateCw(); }), + right: yuu.cmd(function () { this.rotateCcw(); }), + + undo: yuu.cmd(function (v) { + var con = this.slammer.controller; + var _ = function () { this.undo(this._undo); }.bind(this); + if ((this._undo = v) && con.lastUndoRecord !== undefined) { + if (con.orientation !== con.lastUndoRecord) { + circleScene.reverse(); + handScene.undo(); + this.rotateTo(con.lastUndoRecord) + .then(this.slam.bind(this)) + .then(_); + } else { + this.slam().then(_); + } + } + }, "", "rotate the active piece counter-clockwise"), + + checkWon: function () { + if (this.isComplete() && !this._locks.some("quit")) { + this._locks.increment("quit", "slam", "spin"); + var firstTime = !hasBeaten(this.level, this.difficulty); + if (!this.cheating) + wonLevel(this.level, this.difficulty); + var scene = new MenuScene(this.level); + yuu.director.pushScene(scene); + scene.didWinLevel(this.level, this.difficulty, firstTime); + this.entity0.attach(new yuu.Animation( + GRID_FINISHED, { + arm: this.slammerRoot.transform, + armYaw: this.slammerRoot.transform.yaw + 3 * Math.PI, + armY: this.slammerRoot.transform.y + 1.5, + board: this.board.transform, + boardY: this.level.slammer.length * 3 + }, function () { + yuu.director.removeScene(this); + }.bind(this) + )); + } + }, + + slideBoardBlocks: function (anim, params) { + var dx = 0, dy = 0; + var orientation = this.slammer.controller.orientation; + switch (orientation) { + case LEFT: dx = 1.5; break; + case TOP: dy = -1.5; break; + case RIGHT: dx = -1.5; break; + case BOTTOM: dy = 1.5; break; + } + var sgnx = Math.sign(dx); + var sgny = Math.sign(dy); + var $s = []; + var positions = []; + var blocks = this.slammer.controller.blocks; + this.slammer.data.quads.forEach(function (q) { + var d = blocks[q.x].length; + $s.push(q.quad); + positions.push([q.quad.position[0], q.quad.position[1] - d]); + }, this); + this.board.data.quads.forEach(function (q) { + var x = orientation === TOP ? q.x : blocks.length - (q.x + 1); + var y = orientation === LEFT ? q.y : blocks.length - (q.y + 1); + + $s.push(q.quad); + positions.push([q.quad.position[0] + sgnx * blocks[y].length, + q.quad.position[1] + sgny * blocks[x].length]); + }, this); + this.entity0.attach(new yuu.Animation(SLIDE_BLOCKS, { + $s: $s, + positions: positions + })); + }, + + slam: yuu.cmd(function () { + var r = new Promise(function (resolve, reject) { + if (this._locks.some("slam")) { + reject("slamming is locked"); + return; + } + this._locks.increment("spin", "slam"); + circleScene.slam(); + sounds.slam.play(); + handScene.slam(this.slammer.controller.orientation); + this.entity0.attach(new yuu.Animation( + SLAMMER_SLAM, { + $: this.slammer.transform, + slam: function () { + this._locks.decrement("spin"); + this.slammer.controller.slam(this.board.controller); + this.slammerRoot.transform.yaw = Math.PI / 2 * + this.slammer.controller.orientation; + }.bind(this), + slideBoardBlocks: this.slideBoardBlocks.bind(this) + }, function () { + this.checkWon(); + this._locks.decrement("slam"); + resolve(this); + }.bind(this))); + }.bind(this)); + return r; + }, "", "slam the active piece"), + + back: yuu.cmd(function (x, y) { + if (this._locks.some("quit")) + return; + this._locks.increment("quit", "slam", "spin"); + var scene = new MenuScene(this.level); + yuu.director.pushScene(scene); + var v = [x || yuu.random.uniform(-1, 1), + y || yuu.random.uniform(-1, 1)]; + var size = this.board.controller.contents.length * 5; + vec2.scale(v, vec2.normalize(v, v), size); + this.entity0.attach(new yuu.Animation( + GRID_DISMISS, { + $: this.entity0.transform, + x: v[0], y: v[1] + }, function () { + yuu.director.removeScene(this); + }.bind(this) + )); + circleScene.lose(); + }, "", "go back to the menu"), + + slammerBB: { get: function (p) { + var length = this.level.slammer.length; + switch (this.slammer.controller.orientation) { + case LEFT: + return new yuu.AABB(-Infinity, -0.5, -1, length - 0.5); + case RIGHT: + return new yuu.AABB(length + 1, -0.5, Infinity, length - 0.5); + case TOP: + return new yuu.AABB(-0.5, length + 1, length - 0.5, Infinity); + case BOTTOM: + return new yuu.AABB(-0.5, -Infinity, length - 0.5, -1); + } + } }, + + _swipe: function (p0, p1) { + p0 = this.layer0.worldFromDevice(p0); + p1 = this.layer0.worldFromDevice(p1); + if (this.slammerBB.contains(p0)) { + this.slam(); + return true; + } + if (this.gridBB.contains(p0) && !this.gridBB.contains(p1)) { + this.back(p1.x - p0.x, p1.y - p0.y); + return true; + } + }, + + inputs: { + resize: function () { + var length = this.level.slammer.length; + var base = new yuu.AABB(-length - 2.5, -length - 2.5, + 2 * length + 1.5, 2 * length + 1.5); + var vp = base.matchAspectRatio(yuu.viewport); + this.layer0.resize(vp.x0, vp.y0, vp.w, vp.h); + }, + + tap: function (p) { + p = this.layer0.worldFromDevice(p); + if (this.gridBB.contains(p)) { + this.slam(); + return true; + } + }, + + touch: function (p) { + var length = this.level.slammer.length; + var middle = (length - 1) / 2; + p = this.layer0.worldFromDevice(p); + if (this.slammerBB.contains(p)) { + this.slammer.attach(new yuu.Animation( + SLAMMER_BOUNCE, { $: this.slammer.transform })); + } else if (this.leftBB.contains(p)) { + this.rotateTo(LEFT); + handScene.rotatedCw(); + return true; + } else if (this.rightBB.contains(p)) { + this.rotateTo(RIGHT); + handScene.rotatedCcw(); + return true; + } else if (this.topBB.contains(p)) { + this.rotateTo(TOP); + if (p.x < middle) + handScene.rotatedCw(); + else + handScene.rotatedCcw(); + return true; + } else if (this.bottomBB.contains(p)) { + this.rotateTo(BOTTOM); + if (p.x < middle) + handScene.rotatedCw(); + else + handScene.rotatedCcw(); + return true; + } + }, + + doubletap: function () { + return this.inputs.tap.apply(this, arguments); + }, + + hold: function (p) { + p = this.layer0.worldFromDevice(p); + if (this.gridBB.contains(p)) { + this.undo(true); + return true; + } + }, + + dragstart: function (p) { + p = this.layer0.worldFromDevice(p); + this._dragging = this.slammerBB.contains(p); + }, + + drag: function (p0, p1) { + var p = this.layer0.worldFromDevice(p1); + if (this._dragging && !this._locks.some("slam")) { + var inGrid = this.gridBB.contains(p); + var length = this.level.slammer.length; + var o; + if (this._dragging === true && inGrid) { + this.slam(); + } else if (p.x > 0 && p.x < length && !inGrid) { + o = p.y < 0 ? BOTTOM : TOP; + if (o !== this.slammer.controller.orientation) { + this.rotateTo(o); + this._dragging = 2; + } + } else if (p.y > 0 && p.y < length && !inGrid) { + o = p.x < 0 ? LEFT : RIGHT; + if (o !== this.slammer.controller.orientation) { + this.rotateTo(o); + this._dragging = 2; + } + } + } + return this._dragging; + }, + + dragend: function (p0, p1) { + this._dragging = false; + }, + + release: function () { + this.undo(false); + }, + + swipeleft: function (p0, p1) { + return this._swipe(p0, p1); + }, + swiperight: function (p0, p1) { + return this._swipe(p0, p1); + }, + swipeup: function (p0, p1) { + return this._swipe(p0, p1); + }, + swipedown: function (p0, p1) { + return this._swipe(p0, p1); + }, + }, + + KEYBINDS: { + w: "rotateCw", + a: "rotateCcw", + s: "rotateCcw", + d: "rotateCw", + left: "rotateCcw", + right: "rotateCw", + up: "rotateCw", + down: "rotateCcw", + shift: "slam", + space: "slam", + z: "slam", + backspace: "+undo", + c: "+undo", + escape: "back", + back: "back", + gamepadbutton0: "slam", + gamepadbutton1: "+undo", + gamepadbutton2: "slam", + gamepadbutton3: "+undo", + gamepadbutton4: "rotateCcw", + gamepadbutton5: "rotateCw", + gamepadbutton8: "back", + gamepadbutton14: "rotateCcw", + gamepadbutton15: "rotateCw", + } +}); + +var MENU_APPEAR = { + 0: [{ set1: { x: 5, y: 5, scaleX: 0, scaleY: 0 } }, + { tween1: { x: 0, y: 0, scaleX: 1 }, duration: 24 }, + { tween1: { scaleY: 1 }, + duration: 55, easing: yuu.Tween.METASPRING(1, 10)}], +}; + +var MENU_SLIDE = { + 0: { tween1: { x: "x" }, duration: "duration" } +}; + +var FLASH = { + 0: { tween1: { luminance: 1, alpha: 1 }, duration: 32, repeat: -1 } +}; + +var MENU_SLAM = { + 0: { tween: { cursor: { y: "mid" } }, duration: 8 }, + 8: { tween: { cursor: { y: "line" }, + select: { y: -1.0 } + }, duration: 12 }, + 20: { tween: { scene: { y: 10 }, + select: { y: -11.5, scale: [3, 3, 1] } + }, duration: 18 }, + 38: { event: "appear", + tween: { select: { y: 0, scale: [1, 0, 1] } }, + duration: 20 } +}; + +function menuEntityForLevel (level, i) { + var activated = false; + function randomizeSlammer () { + var min = level.randomSlammer[0]; + var max = level.randomSlammer[1]; + var size = yuu.random.randrange(min, max + 1); + level.slammer = []; + do { + for (var i = 0; i < size; ++i) + level.slammer[i] = yuu.random.randrange(0, size); + } while (Math.min.apply(Math, level.slammer) === max + || Math.max.apply(Math, level.slammer) === 0); + } + + function generateQuads() { + batch.disposeAll(); + var rgb = PALETTE[i % PALETTE.length]; + var fit = level.slammer.length + 1; + batch.createQuad().color = rgb; + level.slammer.forEach(function (size, y) { + var c = batch.createQuad(); + c.color = [0, 0, 0]; + c.alpha = hasBeaten(level, "easy") ? 0.5 : 1.0; + c.size = [size / fit, 1 / fit]; + c.position = [0, -0.5 + (y + 1) / fit]; + }); + ce.data.flasher = batch.createQuad(); + ce.data.flasher.alpha = 0; + return ce; + } + + if (level.randomSlammer) + randomizeSlammer(); + + // 14 = maximum slammer size + 1 background + 1 flasher + var batch = new yuu.QuadBatchC(14); + var ce = new yuu.E( + new yuu.Transform([2 * i, 0, 0]), + batch, + new yuu.DataC({ + activate: function () { + activated = true; + var scene = new GridScene(level, difficultyForLevel(level)); + yuu.director.insertUnderScene(scene); + } + }) + ); + + if (level.randomSlammer) { + ce.attach(new yuu.Ticker(function () { + if (!activated && yuu.random.randbool(0.7)) { + randomizeSlammer(); + ++i; + generateQuads(); + } + return !activated; + }, 30, 15)); + } + + generateQuads(); + return ce; +} + +var HAND_TICK_BACK = { + 0: { tween1: { rotation: "rotation" }, duration: 6, repeat: -1 } +}; + +MenuScene = yT(yuu.Scene, { + constructor: function (initialLevel) { + yuu.Scene.call(this); + this.entity0.attach(new yuu.Transform(), + new AnimationQueue()); + + this.pointer = new yuu.E( + new yuu.Transform([5, 8, 0]), + new yuu.QuadC()); + + var menu = this.menu = new yuu.E(new yuu.Transform([5, 6.5, 0])); + this.addEntities(menu, this.pointer); + this.availableLevels = LEVELS.filter(difficultyForLevel); + this.availableLevels + .map(menuEntityForLevel) + .forEach(menu.addChild, menu); + + var initialIdx = this.availableLevels.indexOf(initialLevel); + this._locks = new FlagSet("slam", "move"); + this.activeIndex = Math.max(initialIdx, 0); + menu.transform.x = 5 - 2 * this.activeIndex; + this.changeActiveIndex(this.activeIndex, false); + this._dragStartX = null; + + this.entity0.attach( + new yuu.Ticker(this._animation.bind(this), 60)); + }, + + _animation: function (count) { + var length = this.availableLevels.length; + var range = Math.pow(2, length); + var rand = yuu.random.randrange(range); + var targets = []; + var yaws = []; + for (var i = 0; i < length; ++i) { + var child = this.menu.children[i]; + var level = this.availableLevels[i]; + var won = hasBeaten(level, "hard"); + if ((won || ((count ^ i) & 1)) && ((count ^ rand) & (1 << i))) { + var dyaw = won + ? yuu.random.randsign(Math.PI / 2) + : -Math.PI / 2; + targets.push(child.transform); + yaws.push(child.transform.yaw + dyaw); + } + } + if (targets.length) { + this.entity0.attach(new yuu.Animation( + ROTATE_ALL, { $s: targets, yaws: yaws })); + } + circleScene.clockTick(TICK_ROT2, HAND_TICK_BACK); + sounds[["tick", "tock"][count & 1]] + .createSound(yuu.audio, yuu.audio.currentTime, 0, 0.2, 1.0) + .connect(yuu.audio.music); + + return true; + }, + + init: function () { + circleScene.toBottom(); + handScene.finished(); + this._locks.increment("slam", "move"); + this.entity0.animationQueue.enqueue( + MENU_APPEAR, + { $: this.entity0.transform }) + .then(this._locks.decrementer("slam", "move")); + }, + + didWinLevel: function (level, difficulty, firstTime) { + var idx = this.availableLevels.indexOf(level); + circleScene.win(); + if (firstTime) + this.entity0.animationQueue.enqueue( + FLASH, { $: this.menu.children[idx].data.flasher }); + for (var i = idx; i < this.availableLevels.length; ++i) { + if (!hasBeaten(this.availableLevels[i], difficulty)) { + this._locks.increment("move"); + this.changeActiveIndex(i, true) + .then(this._locks.decrementer("move")); + + break; + } + } + }, + + changeActiveIndex: function (index, animate) { + var oldIndex = this.activeIndex; + var p; + this.activeIndex = index = yf.clamp( + index, 0, this.menu.children.length - 1); + if (index !== oldIndex && animate) { + this._locks.increment("slam"); + var duration = Math.ceil(8 * Math.abs(oldIndex - index)); + p = this.entity0.animationQueue.enqueue( + MENU_SLIDE, { + $: this.menu.transform, + x: 5 - 2 * index, + duration: duration + }); + p.then(this._locks.decrementer("slam")); + } + return p || Promise.resolve(); + }, + + left: yuu.cmd(function () { + if (!this._locks.some("move")) { + sounds[this.activeIndex === 0 ? "switchBroke" : "switch"].play(); + handScene.movedLeft(); + this.changeActiveIndex(this.activeIndex - 1, true); + } + }, "move the cursor left"), + right: yuu.cmd(function () { + if (!this._locks.some("move")) { + sounds[this.activeIndex === this.availableLevels.length - 1 + ? "switchBroke" : "switch"].play(); + handScene.movedRight(); + this.changeActiveIndex(this.activeIndex + 1, true); + } + }, "move the cursor right"), + + slam: yuu.cmd(function () { + if (this._locks.some("slam")) + return; + var activeChild = this.menu.children[this.activeIndex]; + this._locks.increment("slam", "move"); + handScene.menuChoice(); + circleScene.toBack(); + circleScene.slam(); + sounds.winding.play(); + this.entity0.animationQueue.enqueue( + MENU_SLAM, { + cursor: this.pointer.transform, + select: activeChild.transform, + scene: this.entity0.transform, + mid: this.pointer.transform.y - 0.5, + line: this.pointer.transform.y - 1.5, + appear: activeChild.data.activate + }).then(function () { + this._locks.decrementer("slam", "move"); + yuu.director.removeScene(this); + }.bind(this)); + }, "choose the active menu item"), + + inputs: { + resize: function () { + var base = new yuu.AABB(0, 0, 10, 10); + var vp = base.matchAspectRatio(yuu.viewport); + this.layer0.resize(vp.x0, vp.y0, vp.w, vp.h); + }, + + pinchout: function (p0, p1) { + p0 = this.layer0.worldFromDevice(p0); + p1 = this.layer0.worldFromDevice(p1); + if (vec2.sqrDist(p0, p1) > 1) { + this.slam(); + return true; + } + }, + + hold: function (p) { + return this.inputs.dragstart.call(this, p); + }, + + release: function (p) { + if (this._dragStartX !== null) + return this.inputs.dragend.call(this, p); + }, + + dragstart: function (p) { + if (this._locks.some("move")) + return false; + p = this.layer0.worldFromDevice(p); + if (p.y > 6 && p.y < 8.5 && p.inside && this._dragStartX === null) { + sounds.switchOn.play(); + this._locks.increment("move"); + this._dragStartX = this.menu.transform.x; + return true; + } + }, + + dragdown: function (p0, p1) { + p0 = this.layer0.worldFromDevice(p0); + p1 = this.layer0.worldFromDevice(p1); + + if (p0.x >= 4.5 && p0.x <= 5.5 + && p0.y >= 6.0 && p0.y <= 8.5 + && p0.y - p1.y > 1) { + this.slam(); + return true; + } + }, + + drag: function (p0, p1) { + if (this._dragStartX !== null) { + p0 = this.layer0.worldFromDevice(p0); + p1 = this.layer0.worldFromDevice(p1); + this.menu.transform.x = this._dragStartX + (p1.x - p0.x); + var index = Math.round((5 - this.menu.transform.x) / 2); + this.changeActiveIndex(index); + return true; + } + }, + + dragend: function (p0, p1) { + if (this._dragStartX !== null) { + sounds.switchOff.play(); + this._locks.decrement("move"); + this._dragStartX = null; + var index = this.activeIndex; + this.activeIndex = (5 - this.menu.transform.x) / 2; + this.changeActiveIndex(index, true); + return true; + } + }, + + tap: function (p) { + p = this.layer0.worldFromDevice(p); + if (p.y > 6 && p.y < 7 && p.inside) { + var dx = Math.round((p.x - 5) / 2); + if (dx === 0) this.slam(); + else if (dx < 0) handScene.movedLeft(); + else if (dx > 0) handScene.movedRight(); + var idx = this.activeIndex; + this.changeActiveIndex(this.activeIndex + dx, true); + if (idx !== this.activeIndex) + sounds.switch.play(); + else + sounds.switchBroke.play(); + return true; + } + + }, + + doubletap: function (p) { + p = this.layer0.worldFromDevice(p); + if (p.x >= 4.5 && p.x <= 5.5 && p.y >= 6.0 && p.y <= 8.5) { + this.slam(); + return true; + } + }, + }, + + resetEverything: yuu.cmd(function () { + storage.clear(); + yuu.director.stop(); + start(); + }, "reset all saved data"), + + unlock: yuu.cmd(function (d) { + LEVELS.forEach(function (level) { wonLevel(level, d); }); + yuu.director.pushPopScene(new MenuScene()); + }, "", "unlock all levels to the given difficulty"), + + KEYBINDS: { + left: "left", + right: "right", + up: "right", + down: "left", + w: "right", + a: "left", + s: "left", + d: "right", + shift: "slam", + space: "slam", + z: "slam", + "`+r+e": "resetEverything", + "`+u+e": "unlock easy", + "`+u+h": "unlock hard", + gamepadbutton0: "slam", + gamepadbutton8: "help", + gamepadbutton9: "slam", + gamepadbutton13: "slam", + gamepadbutton14: "left", + gamepadbutton15: "right", + } +}); + + +var BOOK_APPEAR = { + 0: { set1: { y: 1.5, x: -1.5 }, + tween: { bgQuad: { alpha: 0.75 }, $: { y: 0, x: 0 }, }, + duration: 30 } +}; + +var BOOK_DISMISS = { + 0: { tween: { bgQuad: { alpha: 0 }, $: { y: 1.5, x: -1.5, } }, + duration: 30 } +}; + +var KEYBOARD_PAGE = [0.25, 0.50, 0.50, 1.00]; +var POINTERS_PAGE = [0.25, 0.00, 0.50, 0.50]; +var GAMEPAD_PAGE = [0.00, 0.00, 0.25, 0.50]; + +var BOOK_FORWARD = [ + { 0: { set: { page2Quad: { color: [0.2, 0.2, 0.2, 1], texBounds: "page" } }, + tween: { page1: { x: -1/3 / 2, scaleX: 0 }, + page2: { x: +1/3 / 2 }, + page2Quad: { color: [1, 1, 1, 1] }, + }, duration: 15, easing: "linear" }, + 15: { set: { page1Quad: { z: 0, texBounds: [0.25, 0.5, 0.00, 1] }, + page2Quad: { z: 0, texBounds: "page" } }, + tween: { page1: { x: -1/3, scaleX: -2/3 }, + page2: { x: +1/3 } + }, duration: 15, easing: "linear" }, + }, + + { 0: { tween: { page1: { x: -1/3 / 2 }, + page2: { x: +1/3 / 2, scaleX: 0 } + }, duration: 15, easing: "linear" }, + 15: { set: { page1Quad: { z: 0, texBounds: [0.25, 0.5, 0.00, 1] }, + page2Quad: { z: 1, texBounds: [1.00, 0.5, 0.75, 1] } }, + tween: { page1Quad: { color: [0.2, 0.2, 0.2, 1] }, + page1: { x: 0 }, + page2: { x: 0, scaleX: -2/3 }, + }, duration: 15, easing: "linear" }, + }, + + BOOK_DISMISS +]; + +var BOOK_BACKWARD = [ + { 0: { tween: { page1: { x: -1/3 / 2, scaleX: 0 }, + page2: { x: +1/3 / 2 }, + }, duration: 15, easing: "linear" }, + 15: { set: { page1Quad: { z: 1, texBounds: [0.50, 0.5, 0.75, 1] }, + page2Quad: { z: 0 } }, + tween: { page2Quad: { color: [0.2, 0.2, 0.2, 1] }, + page1: { x: 0, scaleX: 2/3 }, + page2: { x: 0 }, + }, duration: 15, easing: "linear" }, + }, + + { 0: { set: { page1Quad: { color: [0.2, 0.2, 0.2, 1] } }, + tween: { page1Quad: { color: [1.0, 1.0, 1.0, 1] }, + page1: { x: -1/3 / 2 }, + page2: { x: +1/3 / 2, scaleX: 0 } + }, duration: 15, easing: "linear" }, + + 15: { set: { page1Quad: { z: 0, texBounds: [0.25, 0.5, 0.00, 1] }, + page2Quad: { z: 0, texBounds: "page" } }, + tween: { page1: { x: -1/3 }, + page2: { x: +1/3, scaleX: 2/3 }, + }, duration: 15, easing: "linear" }, + }, +]; + +BookScene = new yT(yuu.Scene, { + constructor: function () { + yuu.Scene.call(this); + var bg = new yuu.E( + new yuu.Transform().setScale([20, 20, 1]), + this.bgQuad = new yuu.QuadC() + .setColor([0, 0, 0, 0]) + .setZ(-1)); + this.page1 = new yuu.E(new yuu.Transform(), + this.page1Quad = new yuu.QuadC(BOOK)); + this.page1Quad.texBounds = [0.50, 0.5, 0.75, 1]; + this.page1Quad.z = 1; + this.page2 = new yuu.E(new yuu.Transform(), + this.page2Quad = new yuu.QuadC(BOOK)); + this.page2Quad.texBounds = [0.25, 0.5, 0.50, 1]; + this.page1.transform.scale = [2/3, 1, 1]; + this.page2.transform.scale = [2/3, 1, 1]; + this.entity0.attach(new yuu.Transform()); + this.current = 0; + this._locks = new FlagSet("turn"); + this.addEntities(bg, this.page1, this.page2); + + this.dismissSound = new yuu.Instrument("@book-dismiss"); + this.pageSounds = [new yuu.Instrument("@page-turn-1"), + new yuu.Instrument("@page-turn-2"), + new yuu.Instrument("@page-turn-3")]; + + this.ready = yuu.ready([this.dismissSound].concat(this.pageSounds)); + }, + + help: yuu.cmd(function () { + this.skip(); + }, "dismiss the help screen"), + + licensing: yuu.cmd(function () { + var licensing = document.getElementById("yuu-licensing"); + var parent = licensing.parentNode; + var spinner = document.createElement("div"); + spinner.className = "yuu-spinner"; + spinner.id = licensing.id; + parent.replaceChild(spinner, licensing); + Promise.all( + yf.map(yuu.GET, + [yuu.PATH + "data/license.txt", "data/license.txt"])) + .then(function (texts) { + var text = texts.join("\n-- \n\n"); + var p = document.createElement("pre"); + p.textContent = text; + p.id = spinner.id; + parent.replaceChild(p, spinner); + }); + }, "why would you ever want to run this?"), + + init: function () { + this._anim(BOOK_APPEAR); + storage.setFlag("instructions"); + }, + + _anim: function (anim) { + this._locks.increment("turn"); + // FIXME: Need hooks from animations to audio + var completion = this._locks.decrementer("turn"); + switch (anim) { + case BOOK_DISMISS: + this.dismissSound.play(); + completion = yuu.director.removeScene.bind(yuu.director, this); + break; + case BOOK_APPEAR: + sounds.bookAppear.play(); + break; + default: + yuu.random.choice(this.pageSounds).play(); + break; + } + + var device = yuu.director.preferredDevice(); + this.entity0.attach(new yuu.Animation( + anim, { + $: this.entity0.transform, + page: device === "keyboard" ? KEYBOARD_PAGE + : device === "gamepad" ? GAMEPAD_PAGE + : POINTERS_PAGE, + page1: this.page1.transform, + page2: this.page2.transform, + page1Quad: this.page1Quad, + page2Quad: this.page2Quad, + bgQuad: this.bgQuad + }, completion)); + }, + + advance: yuu.cmd(function () { + if (this._locks.some("turn")) + return; + this._anim(BOOK_FORWARD[this.current++]); + }), + + skip: yuu.cmd(function () { + if (this._locks.some("turn")) + return; + this._anim(BOOK_DISMISS); + }), + + back: yuu.cmd(function () { + if (this._locks.some("turn")) + return; + if (this.current > 0) + this._anim(BOOK_BACKWARD[--this.current]); + }), + + LOGOTYPE: new yuu.AABB(-0.16, -0.41, 0.12, -0.33), + COLOPHON: new yuu.AABB(-0.06, -0.41, 0.11, -0.28), + + inputs: { + resize: function () { + var base = new yuu.AABB(-0.7, -0.55, 0.7, 0.55); + var vp = base.matchAspectRatio(yuu.viewport); + this.layer0.resize(vp.x0, vp.y0, vp.w, vp.h); + }, + + mousemove: function (p) { + p = this.layer0.worldFromDevice(p); + if (this.current === BOOK_FORWARD.length - 1 + && this.LOGOTYPE.contains(p)) { + this.cursor = "pointer"; + } else if (this.current === 0 && this.COLOPHON.contains(p)) { + this.cursor = "pointer"; + } else if (this.current === 0 || p.x >= -0.2) { + this.cursor = ""; + } else { + this.cursor = "W-resize"; + } + }, + + tap: function (p) { + p = this.layer0.worldFromDevice(p); + if (this.current === BOOK_FORWARD.length - 1 + && this.LOGOTYPE.contains(p)) { + yuu.openURL("http://www.yukkurigames.com/"); + } else if (this.current === 0 && this.COLOPHON.contains(p)) { + yuu.director.showOverlay("colophon"); + } else if (this.current === 0 || p.x >= -0.2) { + this.advance(); + } else { + this.back(); + } + return true; + }, + swipeleft: function (event) { this.advance(); return true; }, + swiperight: function (event) { this.back(); return true; }, + dragleft: function (event) { this.advance(); return true; }, + dragright: function (event) { this.back(); return true; }, + swipeup: function (event) { this.skip(); return true; }, + dragup: function (event) { this.skip(); return true; }, + + consume: yuu.Director.prototype.GESTURES + .concat(yuu.Director.prototype.CANVAS_EVENTS) + }, + + KEYBINDS: { + space: "advance", + shift: "advance", + z: "advance", + x: "advance", + right: "advance", + left: "back", + back: "skip", + escape: "skip", + gamepadbutton0: "advance", + gamepadbutton1: "skip", + gamepadbutton4: "back", + gamepadbutton5: "advance", + gamepadbutton8: "skip", + gamepadbutton9: "skip", + gamepadbutton14: "back", + gamepadbutton15: "advance", + } +}); + +var OUTER_FLIP_TICK = { + 0: { tween1: { yaw: "yaw" }, duration: 15 } +}; + +var CIRCLE_TO_BOTTOM = { + 0: { tween1: { pitch: Math.PI * 0.35, y: -0.3 }, duration: 35 } +}; + +var CIRCLE_TO_BACK = { + 0: { tween1: { pitch: Math.PI * 0.15, y: -0.1 }, duration: 35 } +}; + +var CIRCLE_INNER_RATCHET = { + 0: { tween1: { rotation: "rotation1" }, duration: 15 }, + 10: { tween1: { rotation: "rotation2" }, duration: 10 }, + 20: { tween1: { rotation: "rotation1" }, duration: 20, + easing: yuu.Tween.STEPPED(5) }, + 40: { tween1: { rotation: "rotation2" }, duration: 15 } +}; + +var CIRCLE_INNER_WIND = { + 0: { tween1: { rotation: "rotation1" }, duration: 8 }, + 15: { tween1: { rotation: "rotation2" }, duration: 20 }, +}; + +var BACKGROUND_DRIFT = { + 0: [{ tween1: { yaw: Math.PI * 2 }, + duration: 13 * 60 * 60, repeat: -Infinity, easing: "linear" }, + { tween1: { scaleX: 0.5 }, + duration: 11 * 60 * 60, repeat: -Infinity }, + { tween1: { scaleY: 0.5 }, + duration: 7 * 60 * 60, repeat: -Infinity }] +}; + +var HAND_TICK = { + 0: { tween1: { rotation: "rotation" }, duration: 6 } +}; + +var CHIMES = [ + // Nearly all derived from + // http://www.clockguy.com/SiteRelated/SiteReferencePages/ClockChimeTunes.html + // + // All transposition & transcription errors are mine. + + { name: "Westminster", + keys: ["D4", "E4"], + bars: ["0 2 1 -3", + "0 1 2 0", + "2 0 1 -3", + "2 1 0 -3", + "-3 1 2 0"] + }, + + { name: "Wittington", + keys: ["Eb4", "E4"], + bars: ["1 2 3 5 4 6 7 0", + "1 3 5 7 6 4 2 0", + "3 1 2 4 5 6 7 0", + "4 3 5 2 6 1 7 0", + "6 7 2 5 4 1 3 0", + "7 1 6 2 5 3 4 0", + "7 3 2 1 4 5 6 0", + "7 3 6 2 5 1 4 0", + "7 5 3 1 6 4 2 0", + "7 5 6 4 1 3 2 0", + "7 6 3 2 5 4 1 0", + "7 6 5 4 3 2 1 0"] + }, + + { name: "Canterbury", + keys: ["D4", "E4"], + bars: ["2 0 5 3 1 4", + "3 5 1 4 0 2", + "3 5 4 2 1 0", + "5 3 1 4 2 0", + "1 3 5 2 0 4", + "0 5 3 1 2 4", + "5 3 1 2 4 0"] + }, + + { name: "Trinity", + keys: ["F3", "D4"], + bars: ["5 4 3 2 1 0", + "2 4 3 1 2 0", + "5 3 4 2 1 0", + "4 3 2 1 5 2", + "5 0 4 3 2 1"] + }, + + /* + { name: "St. Michael's", + keys: ["F3", "C4"], + bars: ["7 6 5 4 3 2 1 0", + "7 1 2 3 6 4 5 0", + "4 3 2 5 1 6 7 0", + "6 7 2 3 1 4 5 0", + "4 6 2 7 3 1 5 0"] + }, + */ + + { name: "Winchester", + keys: ["C4", "E4"], + bars: ["5 3 1 0 2 4", + "0 1 3 5 4 2", + "5 3 1 4 2 0", + "1 2 5 4 0 1", + "5 1 3 2 4 0"] + } + +]; + +function third (s) { + return "Q " + s.replace(/([^ ]+ [^ ]+)/g, "$1 Z"); +} + +function silence (s) { + return "Q " + s.replace(/[^ ]+/g, "Z"); +} + +var TIMES1 = ["Q", "H", "H", "H", "H.", "H.", "W", "W"]; +var TIMES2 = ["Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", + third, third, "Q.", "Q.", + "H", "H"]; +var TIMES3 = ["Q", "Q", silence, silence, + third, third, third, third, + "Q.", "Q.", + "H", "H"]; + +function deck (pack, random) { + random = random || yuu.random; + var stock = []; + return function () { + if (stock.length === 0) + stock = random.shuffle(pack.slice()); + return stock.pop(); + }; +} + +function generateScore () { + var chimes = yuu.random.choice(CHIMES); + var bar = deck(chimes.bars); + function draw (t) { + return yf.isFunction(t) ? t(bar()) : t + " " + bar(); + } + + function line (times) { + return yf.map(draw, yuu.random.shuffle(times)).join(" "); + } + + var track = "{ - W HZ " + line(TIMES1) + + " { W HZ Z " + line(TIMES2) + + " { W HZ Z Z I Z " + line(TIMES3); + var key = yuu.random.choice(chimes.keys); + yuu.log("messages", "Playing " + chimes.name + " in " + key + " major."); + var score = yuu.parseScore(track, yuu.Scales.MAJOR, key); + score.key = key; + return score; +} + +CircleScene = yT(yuu.Scene, { + constructor: function () { + yuu.Scene.call(this); + this.layer0.resize(-0.6, -0.6, 1.2, 1.2); + var arm = this.arm = new yuu.E(new yuu.Transform()); + this.outer = new yuu.E( + new yuu.Transform([Math.sqrt(2) / 5, -Math.sqrt(2) / 5, 0]), + this.outerQuad = new yuu.QuadC(new yuu.Material("@circle-outer")) + .setZ(1) + .setLuminance(0.4) + .setSize([0.35417, 0.35417])); + arm.addChild(this.outer); + + var rim = new yuu.E( + new yuu.Transform(), + this.rimQuad = new yuu.QuadC(new yuu.Material("@circle-rim")) + .setLuminance(0.2)); + var inner = this.inner = new yuu.E( + new yuu.Transform(), + this.innerQuad = new yuu.QuadC(new yuu.Material("@circle-inner")) + .setLuminance(0.3)); + + var NOISY_QUADS = new yuu.ShaderProgram( + ["@noise.glsl", "@noisyquads"], ["yuu/@color"]); + + var bgMat = new yuu.Material( + yuu.Texture.DEFAULT, NOISY_QUADS, { range: 0.8 }); + bgMat.uniforms.cut = yf.volatile(cycler(100000)); + var DIM = 16; + var batch = new yuu.QuadBatchC(DIM * DIM); + batch.material = bgMat; + var bg = new yuu.E(new yuu.Transform(), batch); + yf.irange(function (x) { + yf.irange(function (y) { + var quad = batch.createQuad(); + quad.size = [1/4, 1/4]; + quad.position = [(x - DIM / 2) * 1/4, + (y - DIM / 2) * 1/4]; + quad.color = [0.12, 0.08, 0.16]; + quad.texBounds = yf.repeat(x * DIM + y, 4); + }, DIM); + }, DIM); + + this.entity0.addChild(bg); + this.entity0.attach(new yuu.Animation( + BACKGROUND_DRIFT, { $: bg.transform })); + + this.ground = new yuu.E(new yuu.Transform()); + this.ground.addChildren(rim, inner, arm); + this.entity0.addChild(this.ground); + + this.music = yuu.audio.createGain(); + this.music.gain.value = 0.3; + this.music.connect(yuu.audio.music); + this._finished = false; + + this.ready = yuu.ready([ + this.outerQuad.material, + this.innerQuad.material, + this.rimQuad.material, + bgMat.ready + ]); + }, + + help: yuu.cmd(function () { + yuu.director.pushScene(new BookScene()); + }, "bring up the help screen"), + + yuu: yuu.cmd(function () { + this.outerQuad.material = new yuu.Material("@circle-outer-ee"); + }, "yuu~"), + + KEYBINDS: { + slash: "help", + f1: "help", + gamepadbutton6: "help", + f10: "showOverlay preferences", + "shift+y+u+`": "yuu", + "gamepadbutton10+gamepadbutton11": "yuu", + }, + + inputs: { + resize: function () { + var vp = new yuu.AABB(-0.6, -0.6, 0.6, 0.6) + .matchAspectRatio(yuu.viewport); + this.layer0.resize(vp.x0, vp.y0, vp.w, vp.h); + } + }, + + toBottom: function () { + this.entity0.attach( + new yuu.Animation(CIRCLE_TO_BOTTOM, { $: this.ground.transform })); + }, + + wind: function () { + var rot1 = this.inner.transform.rotation; + quat.rotateZ(rot1, rot1, Math.PI / (2 * Math.E)); + var rot2 = quat.rotateX(quat.create(), rot1, -Math.PI / 2); + quat.rotateY(rot2, rot2, Math.PI / 2); + quat.rotateX(rot2, rot2, -Math.PI / 2); + this.entity0.attach( + new yuu.Animation(CIRCLE_INNER_WIND, { + $: this.inner.transform, + rotation1: rot1, + rotation2: rot2 + })); + this.tension = 0.5; + this.reversed = 0; + var score = []; + score.key = this.score && this.score.key; + this.score = score; + }, + + _musicSchedule: function (count) { + var t = yuu.director.currentAudioTime; + var note; + + if (this._finished) { + if (this._finished === "won" && this.score.key) { + var score = yuu.parseScore( + yuu.random.choice([ + "1 3 2 Z 0 { - 1 Z 2 Z 0", + "1 2 3 Z 0 { - 1 Z 3 Z 0", + "0 1 2 Z 4 { - 0 Z 2 Z 4", + ]), + yuu.Scales.MAJOR, this.score.key); + while ((note = score.shift())) { + sounds.chime.createSound( + yuu.audio, + t + note.time / 4, + note.hz, + 1.0, note.duration + ).connect(this.music); + } + } + this._finished = false; + return false; + } + + if (!(this.score && this.score.length)) { + this.score = generateScore(); + this.playing = 0; + } + + ++this.playing; + while (this.score.length && this.score[0].time < this.playing) { + note = this.score.shift(); + sounds.chime.createSound( + yuu.audio, + t + note.time % 1 + yuu.random.gauss(0, 0.015), + note.hz, + 1.0, note.duration + ).connect(this.music); + } + + if ((this.tension *= 0.95) > 1) { + this.tension /= 2; + sounds.winding.createSound(yuu.audio, t, 0, 1.0, 1.0) + .connect(this.music); + var flip = !this.outer.transform.yaw * yuu.random.randsign(Math.PI); + this.entity0.attach( + new yuu.Animation(OUTER_FLIP_TICK, { + $: this.outer.transform, + yaw: flip + })); + } else { + [sounds.tick, sounds.tock][count & 1] + .createSound(yuu.audio, t, 0, 0.5, 1.0) + .connect(this.music); + } + + this.clockTick(this.reversed-- > 0 ? TICK_REV : TICK_ROT); + + return true; + }, + + clockTick: function (amount, anim) { + var rot = this.arm.transform.rotation; + quat.multiply(rot, rot, amount || TICK_ROT); + this.arm.attach(new yuu.Animation( + anim || HAND_TICK, + { $: this.arm.transform, rotation: rot })); + }, + + toBack: function () { + this.wind(); + this.entity0.attach( + new yuu.Animation(CIRCLE_TO_BACK, { $: this.ground.transform })); + + this.playing = 4; + this.arm.attach( + new yuu.Ticker(this._musicSchedule.bind(this), 60)); + }, + + win: function () { + this._finished = "won"; + this.wind(); + this.entity0.attach( + new yuu.Animation(FLASH, { $: this.innerQuad }), + new yuu.Animation(FLASH, { $: this.rimQuad }, null, 32), + new yuu.Animation(FLASH, { $: this.outerQuad }, null, 48) + ); + }, + + lose: function () { + this._finished = "lose"; + var rot1 = this.inner.transform.rotation; + quat.rotateZ(rot1, rot1, -Math.PI / Math.E); + var rot2 = quat.rotateZ(quat.create(), rot1, Math.PI / Math.E); + this.entity0.attach( + new yuu.Animation(CIRCLE_INNER_RATCHET, { + $: this.inner.transform, + rotation1: rot1, + rotation2: rot2 + })); + sounds.regear.play(); + }, + + rotated: function () { + this.tension += yuu.random.uniform(0.1); + }, + + slam: function () { + this.tension += yuu.random.uniform(0.2); + }, + + reverse: function () { + this.tension -= yuu.random.uniform(0.1); + this.reversed = Math.max(this.reversed, 0) + 1; + } + +}); diff --git a/src/yuu/audio.js b/src/yuu/audio.js new file mode 100644 index 0000000..881924e --- /dev/null +++ b/src/yuu/audio.js @@ -0,0 +1,524 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + + yuu.Audio = yT({ + /** Audio context/source/buffer accessor + + You probably don't need to make this yourself; one is made + named yuu.audio during initialization. + + You can set the master volume with yuu.audio.masterVolume. + */ + constructor: function () { + this._ctx = new window.AudioContext(); + this._compressor = this._ctx.createDynamicsCompressor(); + this._masterVolume = this._ctx.createGain(); + this._masterVolume.connect(this._compressor); + this._compressor.connect(this._ctx.destination); + this._musicVolume = this._ctx.createGain(); + this._musicVolume.connect(this._masterVolume); + this._masterVolume.gain.value = 0.5; + this._musicVolume.gain.value = 0.5; + + this._bufferCache = {}; + this._mute = false; + this._storage = null; + this._volume = this._masterVolume.gain.value; + }, + + destination: { alias: "_masterVolume", readonly: true }, + music: { alias: "_musicVolume", readonly: true }, + + _readStorage: function () { + if (!this._storage) + return; + yf.each.call(this, function (prop) { + this[prop] = this._storage.getObject(prop, this[prop]); + }, ["volume", "musicVolume", "mute"]); + }, + + _writeStorage: yf.debounce(function () { + if (!this._storage) + return; + yf.each.call(this, function (prop) { + this._storage.setObject(prop, this[prop]); + }, ["volume", "musicVolume", "mute"]); + }), + + storage: { + get: function () { return this._storage; }, + set: function (v) { + this._storage = v; + this._readStorage(); + } + }, + + mute: { + get: function () { return this._mute; }, + set: function (v) { + this._mute = !!v; + this.volume = this.volume; + } + }, + + volume: { + get: function () { return this._volume; }, + set: function (v) { + this._volume = v; + v = this._mute ? 0 : v; + this._masterVolume.gain.value = v; + this._writeStorage(); + } + }, + + musicVolume: { + get: function () { return this._musicVolume.gain.value; }, + set: function (v) { + this._musicVolume.gain.value = v; + this._writeStorage(); + } + }, + + currentTime: { alias: "_ctx.currentTime" }, + + decodeAudioData: function (data) { + var ctx = this._ctx; + try { + return ctx.decodeAudioData(data); + } catch (exc) { + return new Promise(function (resolve, reject) { + ctx.decodeAudioData(data, function (buffer) { + resolve(buffer); + }, function () { + reject(new Error("Error decoding audio buffer")); + }); + }); + } + }, + + createBufferSource: function (path) { + var source = this._ctx.createBufferSource(); + var sample = new yuu.AudioSample(path, this); + if ((source.buffer = sample.buffer) === null) { + sample.ready.then(function () { + source.buffer = sample.buffer; + }); + } + return source; + }, + + sampleRate: { alias: "_ctx.sampleRate" }, + createGain: { proxy: "_ctx.createGain" }, + createOscillator: { proxy: "_ctx.createOscillator" }, + }); + + // FIXME: This parsing is garbagey, would be better to parse when + // first handed a dfn and turn everything into a function. + function applyMod (s, v) { + if (yf.isFunction(s)) + return s(v); + else if (s === +s) + return s; + else if (s[0] === "-" || s[0] === "+") + return v + (+s); + else if (s[0] === "x" || s[0] === "*") + return v * +s.substring(1); + else if (s[s.length - 1] === "%") + return v * (parseFloat(s) / 100); + else + return +s; + } + + var Envelope = yuu.Envelope = yT({ + constructor: yf.argcd( + function (pairs) { + Envelope.call(this, pairs, 1); + }, + function (pairs, scale) { + pairs = pairs || { "0": 1, "100%": 1 }; + this.ts = Object.keys(pairs); + this.vs = yf.map.call(pairs, yf.getter, this.ts); + this.scale = scale; + var a = 0, b = 0; + var unlimited = false; + yf.each(function (t) { + if (+t) { + a = Math.max(+t, a); + b = Math.min(+t, b); + } + unlimited = unlimited || (t[t.length - 1] === "%"); + }, this.ts); + this.minDuration = a - b; + this.maxDuration = (unlimited || a === b) + ? Infinity + : this.minDuration; + var vMin = Math.min.apply(Math, this.vs); + var vMax = Math.max.apply(Math, this.vs); + this.constant = vMin === vMax && this.vs[0] * this.scale; + } + ), + + schedule: function (param, t0, scale, duration) { + if (this.constant !== false) { + param.setValueAtTime(scale * this.constant, t0); + } else { + yf.each.call(this, function (s, v) { + v = v * scale * this.scale; + var t = t0 + applyMod(s, duration); + if (t === t0) + param.setValueAtTime(v, t); + else + param.linearRampToValueAtTime(v, t); + }, this.ts, this.vs); + } + } + }); + + yuu.AudioSample = yuu.Caching(yT({ + constructor: function (path, ctx) { + ctx = ctx || yuu.audio; + var url = yuu.resourcePath(path, "sound", "wav"); + this.data = null; + this.ready = yuu.GET(url, { responseType: "arraybuffer" }) + .then(ctx.decodeAudioData.bind(ctx)) + .then(yf.setter.bind(this, "buffer")) + .then(yf.K(this)); + } + }), function (args) { return args.length <= 2 ? args[0] : null; }); + + yuu.Modulator = yT({ + constructor: function (dfn) { + this.envelope = new yuu.Envelope(dfn.envelope); + this.frequency = dfn.frequency; + this.index = dfn.index || 1.0; + }, + + createModulator: function (ctx, t0, fundamental, duration) { + var modulator = ctx.createOscillator(); + modulator.frequency.value = applyMod( + this.frequency, fundamental); + modulator.start(t0); + modulator.stop(t0 + duration); + var modulatorG = ctx.createGain(); + modulator.connect(modulatorG); + this.envelope.schedule( + modulatorG.gain, t0, this.index * fundamental, duration); + return modulatorG; + } + }); + + yuu.Instrument = yT({ + constructor: function (dfn) { + if (yf.isString(dfn)) { + var sampleName = dfn; + dfn = { sample: {} }; + dfn.sample[sampleName] = {}; + } + this.envelope = new yuu.Envelope(dfn.envelope); + this.frequency = dfn.frequency || (dfn.sample ? {} : { "x1": 1.0 }); + this.modulator = yf.map( + yf.new_(yuu.Modulator), yf.arrayify(dfn.modulator || [])); + this.sample = dfn.sample || {}; + this.ready = yuu.ready( + yf.map(yf.new_(yuu.AudioSample), Object.keys(this.sample)), + this); + }, + + createSound: function (ctx, t0, fundamental, amplitude, duration) { + // TODO: In the case of exactly one sample with a constant + // envelope, optimize out the extra gain node. + duration = yf.clamp(duration || 0, + this.envelope.minDuration, + this.envelope.maxDuration); + var ret = ctx.createGain(); + var dst = ret; + + yf.ipairs(function (name, params) { + var buffer = new yuu.AudioSample(name).buffer; + if (buffer && !params.loop) + duration = Math.max(buffer.duration, duration); + }, this.sample); + + var modulators = yf.map(function (modulator) { + return modulator.createModulator( + ctx, t0, fundamental, duration); + }, this.modulator); + + yf.ipairs.call(this, function (name, params) { + var src = ctx.createBufferSource(name); + src.loop = params.loop || false; + src.playbackRate.value = applyMod( + params.playbackRate || 1, fundamental || ctx.sampleRate); + yf.each(function (mod) { mod.connect(src.playbackRate); }, + modulators); + if (params.duration) + src.start(t0, params.offset || 0, params.duration); + else + src.start(t0, params.offset || 0); + src.stop(t0 + duration); + src.connect(dst); + }, this.sample); + + yf.ipairs.call(this, function (mfreq, mamp) { + var osc = ctx.createOscillator(); + osc.frequency.value = applyMod(mfreq, fundamental); + osc.start(t0); + osc.stop(t0 + duration); + yf.each(function (mod) { mod.connect(osc.frequency); }, + modulators); + if (mamp !== 1) { + var gain = ctx.createGain(); + gain.gain.value = mamp; + osc.connect(gain); + gain.connect(dst); + } else { + osc.connect(dst); + } + }, this.frequency); + + ret.gain.value = 0; + this.envelope.schedule(ret.gain, t0, amplitude, duration); + return ret; + }, + + play: yf.argcd( + function () { + return this.play(null, 0, 0, 1, 1); + }, + function (ctx, t, freq, amp, duration) { + ctx = ctx || yuu.audio; + t = t || ctx.currentTime; + var g = this.createSound(ctx, t, freq, amp, duration); + g.connect(ctx.destination); + return g; + } + ) + }); + + yuu.Instruments = yf.mapValues(yf.new_(yuu.Instrument), { + SINE: { + envelope: { "0": 0, "0.016": 1, "-0.016": 1, "100%": 0 }, + }, + + ORGAN: { + envelope: { "0": 0, "0.016": 1, "-0.016": 1, "100%": 0 }, + frequency: { "x1": 0.83, "x1.5": 0.17 } + }, + + SIREN: { + envelope: { "0": 1 }, + modulator: { + envelope: { "0": 1 }, + frequency: "1", + index: 0.2 + } + }, + + BELL: { + envelope: { "0": 1, "2.5": 0.2, "5": 0 }, + modulator: { + envelope: { "0": 1, "2.5": 0.2, "5": 0 }, + frequency: "x1.5", + } + }, + + BRASS: { + envelope: { "0": 0, "0.2": 1, "0.4": 0.6, "-0.1": 0.5, "100%": 0 }, + modulator: { + envelope: { "0": 0, "0.2": 1, "0.4": 0.6, + "-0.1": 0.5, "100%": 0 }, + frequency: "x1", + index: 5.0 + } + }, + }); + + // Tune to A440 by default, although every interface should provide + // some ways to work around this. This gives C4 = ~261.63 Hz. + // https://en.wikipedia.org/wiki/Scientific_pitch_notation + yuu.C4_HZ = 440 * Math.pow(2, -9/12); + + yuu.Scale = yT({ + constructor: function (intervals) { + this.intervals = intervals; + this.length = this.intervals.length; + this.span = yf.foldl(function (a, b) { return a + b; }, intervals); + }, + + hz: function (tonic, degree, accidental) { + accidental = accidental || 0; + var s = this.span * ((degree / this.intervals.length) | 0) + + accidental; + degree %= this.intervals.length; + if (degree < 0) { + degree += this.intervals.length; + s -= this.span; + } + var i = 0; + while (degree >= 1) { + degree -= 1; + s += this.intervals[i]; + i++; + } + if (degree > 0) + s += this.intervals[i] * degree; + return tonic * Math.pow(2, s / 1200.0); + } + }); + + yuu.Scales = yf.mapValues(yf.new_(yuu.Scale), { + CHROMATIC: yf.repeat(100, 12), + MINOR: [200, 100, 200, 200, 100, 200, 200], + MAJOR: [200, 200, 100, 200, 200, 200, 100], + WHOLE_TONE: [200, 200, 200, 200, 200, 200], + AUGMENTED: [300, 100, 300, 100, 300, 100], + _17ET: yf.repeat(1200 / 17, 17), + DOUBLE_HARMONIC: [100, 300, 100, 200, 100, 300, 100], + }); + + var DURATION = { T: 1/8, S: 1/4, I: 1/2, Q: 1, H: 2, W: 4, + ".": 1.5, "/": 1/3, "<": -1 }; + var ACCIDENTAL = { b: -1, "#": 1, t: 0.5, d: -0.5 }; + + var NOTE = /([TSIQHW][<.\/]*)?(?:([XZ]|(?:[A-G][b#dt]*[0-9]+))|([+-]?[0-9.]+)([b#dt]*))|([-+<>{]|(?:[TSIQHW][.\/]?))/g; + + var LETTERS = { Z: null, X: null }; + + yuu.parseNote = function (note, scale, C4) { + return (C4 || yuu.C4_HZ) * Math.pow(2, LETTERS[note] / 12); + }; + + yuu.parseScore = function (score, scale, tonic, C4) { + // Note language: + // + // To play a scientific pitch note and advance the time, just + // use its name: G4, Cb2, A#0 + // + // To adjust the length of the note, use T, S, I, Q (default), + // H, W for 32nd through whole. Append . to do + // time-and-a-half. Append / to cut into a third. Append < to + // go back in time. + // + // To play a note on the provided scale, use a 0-based number + // (which can be negative). To move the current scale up or + // down, use + or -. For example, in C major, 0 and C4 produce + // the same note; after a -, 0 and C3 produce the same note. + // + // To rest, use Z or X. + // + // To play multiple notes at the same time, enclose them all with + // < ... >. The time will advance in accordance with the shortest + // one. + // + // To reset the time, scale offset, and duration, use a {. + // This can be more convenient when writing pieces with + // multiple parts than grouping, e.g. + // H < 1 8 > < 2 7 > < 3 6 > < 4 5 > + // is easier to understand when split into multiple lines: + // H 1 2 3 4 + // { H 8 7 6 5 + + scale = scale || yuu.Scales.MAJOR; + C4 = C4 || yuu.C4_HZ; + tonic = tonic || scale.tonic || C4; + if (yf.isString(tonic)) + tonic = yuu.parseNote(tonic, C4); + + var t = 0; + var notes = []; + var degree = 0; + var groupLength = 0; + var defaultDuration = "Q"; + var match; + + function calcDuration (d, m) { return d * DURATION[m]; } + function calcAccidental (d, m) { return d * ACCIDENTAL[m]; } + + while ((match = NOTE.exec(score))) { + switch (match[5]) { + case "<": + groupLength = Infinity; + break; + case ">": + t += groupLength === Infinity ? 0 : groupLength; + groupLength = 0; + break; + case "+": + degree += scale.length; + break; + case "-": + degree -= scale.length; + break; + case "{": + t = 0; + degree = 0; + groupLength = 0; + defaultDuration = "Q"; + break; + default: + if (match[5]) { + defaultDuration = match[5]; + continue; + } + var letter = match[2]; + var duration = yf.foldl( + calcDuration, match[1] || defaultDuration, 1); + if (LETTERS[letter] !== null) { + var offset = match[3]; + var accidental = yf.foldl( + calcAccidental, match[4] || "", 0) * 100; + notes.push({ + time: t, + duration: duration, + hz: letter + ? C4 * Math.pow(2, LETTERS[letter]/12.0) + : scale.hz(tonic, degree + (+offset || 0), accidental) + }); + } + if (groupLength && duration > 0) + groupLength = Math.min(groupLength, duration); + else + t += duration; + } + } + + notes.sort(function (a, b) { return a.time - b.time; }); + return notes; + }; + + yf.irange.call(LETTERS, function (i) { + yf.ipairs.call(this, function (l, o) { + var b = o + 12 * (i - 4); + this[l + i] = b; + yf.ipairs.call(this, function (s, m) { + this[l + s + i] = b + m; + }, ACCIDENTAL); + }, { C: 0, D: 2, E: 4, F: 5, G: 7, A: 9, B: 11 }); + }, 11); + + yuu.registerInitHook(function () { + if (!window.AudioContext) + throw new Error("Web Audio isn't supported."); + yuu.audio = new yuu.Audio(); + yuu.defaultCommands.volume = yuu.propcmd( + yuu.audio, "volume", + "get/set the current master audio volume", "0...1"); + yuu.defaultCommands.musicVolume = yuu.propcmd( + yuu.audio, "musicVolume", + "get/set the current music volume", "0...1"); + yuu.defaultCommands.mute = yuu.propcmd( + yuu.audio, "mute", "mute or unmute audio"); + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/ce.js b/src/yuu/ce.js new file mode 100644 index 0000000..bb5c6e5 --- /dev/null +++ b/src/yuu/ce.js @@ -0,0 +1,646 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + /** yuu-ce - entity/component system for the Yuu engine + + Game logic in Yuu is implemented via entities and components. + Entities (yuu.E) represent "things" in the world, and + components (yuu.C) individual properties or abilities of those + things. By attaching and detaching components, entities gain + and lose those abilities. + + This system prioritizes for convenience and simplicity over + performance. Many common optimizations in E/C systems, like + component pooling and array-of-structures, are not + implemented. (And are of questionable value in a language like + JavaScript.) + */ + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + + yuu.E = yT({ + constructor: function () { + /** Entity, a shell to customize with components + + Entities exist as an aggregate of components (yuu.C). + They are used for components to talk to each other, or + other systems to handle systems in aggregate without + caring about the underlying details. + + Entities expose components in two ways. + + First, components may have one or more slots; when a + component is attached to an entity it slots itself + into those properties on that entity. For example, if + you attach a Transform component to an entity, you can + retrieve it via e.transform. + + Second, components may have one or more message + taps. This allows them to listen for, and respond to, + messages sent to the entity. Unlike slots many + attached components may have the same tap. + */ + this.parent = null; + this.children = []; + this.taps = {}; + this.attach.apply(this, arguments); + }, + + addChild: function (child) { this.addChildren(child); }, + removeChild: function (child) { this.removeChildren(child); }, + + addChildren: function () { + yf.stash("parent", this, arguments); + this.children = this.children.concat(yf.slice(arguments)); + }, + + removeChildren: function () { + this.children = yf.filter( + yf.lacks.bind(null, arguments), this.children); + yf.stash("parent", null, arguments); + }, + + attach: function () { + /** Attach a component to this entity. + + If the entity already has a component in the same slots, + an error will be thrown. + */ + for (var j = 0; j < arguments.length; ++j) { + var c = arguments[j]; + var i; + for (i = 0; i < c.SLOTS.length; ++i) + if (this[c.SLOTS[i].slot]) + throw new Error("Entity already has a " + c.SLOTS[i]); + for (i = 0; i < c.SLOTS.length; ++i) + this[c.SLOTS[i]] = c; + for (i = 0; i < c.TAPS.length; ++i) + this.taps[c.TAPS[i]] = (this.taps[c.TAPS[i]] || []) + .concat(c); + c.entity = this; + c.attached(this); + } + }, + + detach: function () { + /** Detach a component from this entity */ + for (var j = 0; j < arguments.length; ++j) { + var c = arguments[j]; + var i; + for (i = 0; i < c.SLOTS.length; ++i) + if (this[c.SLOTS[i].slot] !== c) + throw new Error("Entity has a wrong " + c.SLOTS[i]); + for (i = 0; i < c.SLOTS.length; ++i) + delete this[c.SLOTS[i]]; + for (i = 0; i < c.TAPS.length; ++i) + this.taps[c.TAPS[i]] = yf.without(this.taps[c.TAPS[i]], c); + c.entity = null; + c.detached(this); + } + }, + + _message: function (name, params) { + var taps = this.taps[name]; + var children = this.children; + var i; + if (taps) + for (i = 0; i < taps.length; ++i) + taps[i][name].apply(taps[i], params); + for (i = 0; i < children.length; ++i) + children[i]._message(name, params); + }, + message: function (name) { + /** Message components listening on the named tap */ + this._message(name, yf.tail(arguments)); + }, + }); + + yuu.C = yT({ + entity: { value: null, writable: true }, + SLOTS: { value: [], configurable: true }, + TAPS: { value: [], configurable: true }, + + attached: function (entity) { }, + detached: function (entity) { }, + }); + + yuu.DataC = yT(yuu.C, { + /** A component for random scratch data + + Storing this in a separate component rather than on the + entity directly reduces the chance of naming conflicts and + also the number of hidden classes. + */ + + constructor: function (data) { + Object.assign(this, data || {}); + }, + + SLOTS: ["data"] + }); + + + yuu.Animation = yT(yuu.C, { + constructor: function (timeline, params, completionHandler, delay) { + this.timeline = yf.mapValues(yf.arrayify, timeline); + this.params = params; + this.completionHandler = completionHandler; + this.keys = Object.keys(timeline) + .sort(function (a, b) { + return +this._lookup(a) - +this._lookup(b); + }.bind(this)); + this._t1 = +this._lookup(yf.last(this.keys)) + 1; + this._t = -(delay || 0); + this._pc = 0; + this._tweens = []; + }, + + attached: function () { + this.tick(); + }, + + _lookup: function (k) { + return (k in this.params) ? this.params[k] : k; + }, + + set1: function (setter) { + var $ = this.params.$; + yf.ipairs.call(this, function (k, v) { + $[k] = this._lookup(v); + }, setter); + }, + + set: function (setters) { + yf.ipairs.call(this, function (name, setter) { + var $ = this._lookup(name); + yf.ipairs.call(this, function (k, v) { + $[k] = this._lookup(v); + }, setter); + }, setters); + }, + + _addTween: function (tweens, instr) { + var repeat = instr.repeat || 0; + var cycles = Math.abs(repeat) + 1; + var easing = yf.isFunction(instr.easing) + ? instr.easing + : yuu.Tween[(instr.easing || "ease").toUpperCase()]; + var duration, complete; + + if ("complete" in instr) { + complete = this._lookup(instr.complete); + duration = (complete - this._t) / cycles; + } else if ("duration" in instr) { + duration = this._lookup(instr.duration); + complete = this._t + duration * cycles; + } + + if (isFinite(cycles)) { + this._tweens.push( + new yuu.Tween(tweens, duration, repeat, easing)); + this._t1 = Math.max(complete + 1, this._t1); + } else { + this.entity.attach(new yuu.TweenC( + tweens, duration, repeat, easing)); + } + }, + + tween1: function (tween, instr) { + var nt = { $: this._lookup(instr.$) || this.params.$ }; + yf.ipairs.call(this, function (k, v) { + nt[k] = [nt.$[k], this._lookup(v)]; + }, tween); + this._addTween([nt], instr); + }, + + tween: function (targets, instr) { + var tweens = []; + yf.ipairs.call(this, function (name, tween) { + var nt = { $: this._lookup(name) || this.params.$ }; + yf.ipairs.call(this, function (k, v) { + nt[k] = [nt.$[k], this._lookup(v)]; + }, tween); + tweens.push(nt); + }, targets); + this._addTween(tweens, instr); + }, + + tweenAll: function (tween, instr) { + var tweens = []; + var $s = this._lookup(instr.$s) || this.params.$s; + yf.irange.call(this, function (i) { + var nt = { $: $s[i] }; + yf.ipairs.call(this, function (k, v) { + nt[k] = [nt.$[k], this._lookup(v)[i]]; + }, tween); + tweens.push(nt); + }, $s.length); + this._addTween(tweens, instr); + }, + + event: function (name) { + this.params[name](this, this.params); + }, + + _dispatch: function (instr) { + if (instr.set1) + this.set1(instr.set1); + if (instr.set) + this.set(instr.set); + if (instr.tween1) + this.tween1(instr.tween1, instr); + if (instr.tween) + this.tween(instr.tween, instr); + if (instr.tweenAll) + this.tweenAll(instr.tweenAll, instr); + if (instr.event) + this.event(instr.event); + }, + + tick: function () { + var t = this._t; + var i; + for (var key = this.keys[this._pc]; + this._lookup(key) <= t; + key = this.keys[++this._pc]) { + yf.each.call(this, this._dispatch, this.timeline[key]); + } + + for (i = this._tweens.length - 1; i >= 0; --i ) { + if (this._tweens[i].tick()) + this._tweens.splice(i, 1); + } + + if (++this._t > this._t1) { + if (this.completionHandler) + this.completionHandler(this); + this.entity.detach(this); + } + }, + + tock: function (p) { + for (var i = this._tweens.length - 1; i >= 0; --i) + this._tweens[i].tock(p); + }, + + TAPS: ["tick", "tock"] + }); + + yuu.Tween = yT({ + /** Tween object properties over time + + This component changes properties over time, and can + handle synchronizing multiple objects and multiple + properties. + + The `property` is either a single object with the special + `$` property set to the object to tween and every other + property set to the properties to tween with values [min, + max], or a list of such objects. For example, to tween a.x + from 0 to 1, a.y from 2 to 3, and b.z from 1 to 2, you + would pass + + [{ $: a, x: [0, 1], y: [2, 3] }, + { $: b, z: [1, 2] }] + + The `duration` is specified in ticks (e.g. calls to + director.tick). + + `repeat` may be a positive number to repeat the tween that + many times, or a negative number to cycle back to the + minimum (and then back to the maximum, etc.) that many + times. `Infinity` will repeat the tween forever and + `-Infinity` will cycle the tween back and forth forever. + + A custom easing equation may be provided. This is a + function which takes a p = [0, 1] and returns the eased p. + */ + + constructor: function (props, duration, repeat, easing) { + this._object = []; + this._property = []; + this._a = []; + this._b = []; + this._count = 0; + this.duration = duration || 60; + this.repeat = repeat || 0; + this.easing = easing || yuu.Tween.LINEAR; + yf.each.call(this, function (oab) { + yf.ipairs.call(this, function (name, ab) { + if (name !== "$") { + this._object.push(oab.$); + this._property.push(name); + this._a.push(ab[0]); + this._b.push(ab[1]); + } + }, oab); + }, yf.arrayify(props)); + this._updateAt(0); + }, + + tick: function () { + var t = this._count / this.duration; + ++this._count; + if (t > 1 && !this.repeat) + return true; + else if (t >= 1 && this.repeat) { + if (this.repeat < 0) { + var n = this._a; + this._a = this._b; + this._b = n; + } + this._count = 1; + t = 0; + + if (this.repeat < 0) { + this.repeat++; + } else if (this.repeat > 0) { + this.repeat--; + } + } + this._updateAt(t); + }, + + tock: function (p) { + var t = (this._count + p - 1) / this.duration; + if (t <= 1) + this._updateAt(t); + }, + + _updateAt: function (t) { + var p = this.easing ? this.easing(t) : t; + for (var i = 0; i < this._object.length; ++i) { + // a was the existing property, b was the one provided + // by the user. By lerping from b to a, the user can + // control the lerp type in some awkward cases - + // e.g. CSS DOM values are all exposed as strings so a + // will be a string/String, but if b is provided as a + // number/Number, this will lerp numerically. + // + // FIXME: This still doesn't work right if the lerp is + // later reversed due to negative repeats. + var object = this._object[i]; + var property = this._property[i]; + var a = this._a[i]; + var b = this._b[i]; + object[property] = yuu.lerp(b, a, 1 - p); + } + }, + + count: { + get: function () { return this._count; }, + set: function (v) { this._count = Math.round(v); }, + }, + + duration: { value: 60, chainable: true }, + repeat: { value: 0, chainable: true }, + easing: { value: null, chainable: true }, + }); + + yuu.TweenC = yT(yuu.C, { + constructor: function () { + this._tween = yf.construct(yuu.Tween, arguments); + }, + + tick: function () { + if (this._tween.tick()) + this.entity.detach(); + }, + + tock: { proxy: "_tween.tock" }, + count: { alias: "_tween.count" }, + duration: { alias: "_tween.duration", chainable: true }, + repeat: { alias: "_tween.repeat", chainable: true }, + easing: { alias: "_tween.easing", chainable: true }, + + TAPS: ["tick", "tock"] + }); + + yuu.Tween.LINEAR = null; + /** No easing */ + + yuu.Tween.EASE = function (p) { + /** Ease in and out + + This equation is from _Improving Noise_ (Perlin, 2002). It + is symmetrical around p=0.5 and has zero first and second + derivatives at p=0 and p=1. + */ + return p * p * p * (p * (p * 6.0 - 15.0) + 10.0); + }; + + yuu.Tween.EASE_IN = function (p) { + return p * p * p; + }; + + yuu.Tween.METASPRING = function (amplitude, pulsation) { + /** A generator for springy tweens + + The amplitude controls how far from the final position the + spring will bounce, as a multiple of the distance between the + start and end. A "normal" amplitude is around 0.5 to 1.5. + + The pulsation constant controls the rigidity of the spring; + higher pulsation results in a spring that bounces more quickly + and more often during a fixed interval. A "normal" pulsation + constant is around 15 to 30. + */ + return function (p) { + return 1 + Math.cos(pulsation * p + Math.PI) * (1 - p) * amplitude; + }; + }; + + yuu.Tween.STEPPED = function (segments, alpha) { + return function (p) { + p = p * segments; + var lower = Math.floor(p); + var upper = Math.floor((p + alpha)); + if (upper > lower) { + var p1 = 1 - (upper - p) / alpha; + return (lower + p1) / segments; + } else { + return lower / segments; + } + }; + }; + + yuu.Transform = yT(yuu.C, { + /** A 3D position, rotation (as quaternion), and scale + + This also serves as an object lesson for a simple slotted + component. + */ + constructor: function (position, rotation, scale) { + this._position = vec3.clone(position || [0, 0, 0]); + this._rotation = quat.clone(rotation || [0, 0, 0, 1]); + this._scale = vec3.clone(scale || [1, 1, 1]); + this._matrix = mat4.create(); + this._dirty = true; + this._version = 0; + this._parentVersion = null; + }, + + SLOTS: ["transform"], + + position: { + chainable: true, + get: function () { return this._position.slice(); }, + set: function (v) { this._dirty = true; + vec3.copy(this._position, v); } + }, + rotation: { + chainable: true, + get: function () { return this._rotation.slice(); }, + set: function (v) { this._dirty = true; + quat.normalize(this._rotation, v); } + }, + scale: { + chainable: true, + get: function () { return this._scale.slice(); }, + set: function (v) { this._dirty = true; + vec3.copy(this._scale, v); } + }, + x: { + chainable: true, + get: function () { return this._position[0]; }, + set: function (x) { this._dirty = true; this._position[0] = x; } + }, + y: { + chainable: true, + get: function () { return this._position[1]; }, + set: function (x) { this._dirty = true; this._position[1] = x; } + }, + z: { + chainable: true, + get: function () { return this._position[2]; }, + set: function (x) { this._dirty = true; this._position[2] = x; } + }, + xy: { swizzle: "xy", chainable: true }, + + scaleX: { + chainable: true, + get: function () { return this._scale[0]; }, + set: function (x) { this._dirty = true; this._scale[0] = x; } + }, + scaleY: { + chainable: true, + get: function () { return this._scale[1]; }, + set: function (x) { this._dirty = true; this._scale[1] = x; } + }, + scaleZ: { + chainable: true, + get: function () { return this._scale[2]; }, + set: function (x) { this._dirty = true; this._scale[2] = x; } + }, + + worldToLocal: function (p) { + var x = (p.x || p[0] || 0); + var y = (p.y || p[1] || 0); + var z = (p.z || p[2] || 0); + var local = [x, y, z]; + var matrix = mat4.clone(this.matrix); + return vec3.transformMat4(local, local, mat4.invert(matrix, matrix)); + }, + + contains: function (p) { + p = this.worldToLocal(p); + return p[0] >= -0.5 && p[0] < 0.5 + && p[1] >= -0.5 && p[1] < 0.5 + && p[2] >= -0.5 && p[2] < 0.5; + }, + + ypr: { + chainable: true, + get: function () { + var q = this._rotation; + var x = q[0]; var sqx = x * x; + var y = q[1]; var sqy = y * y; + var z = q[2]; var sqz = z * z; + var w = q[3]; + var abcd = w * x + y * z; + if (abcd > 0.499) + return [2 * Math.atan2(x, w), Math.PI / 2, 0]; + else if (abcd < -0.499) + return [-2 * Math.atan2(x, w), -Math.PI / 2, 0]; + else { + var adbc = w * z - x * y; + var acbd = w * y - x * z; + return [Math.atan2(2 * adbc, 1 - 2 * (sqz + sqx)), + Math.asin(2 * abcd), + Math.atan2(2 * acbd, 1 - 2 * (sqy + sqx))]; + } + + }, + set: function (ypr) { + var q = this._rotation; + quat.identity(q); + quat.rotateZ(q, q, ypr[0]); + quat.rotateY(q, q, ypr[2]); + quat.rotateX(q, q, ypr[1]); + this._dirty = true; + } + }, + + yaw: { aliasSynthetic: "ypr[0]", chainable: true }, + pitch: { aliasSynthetic: "ypr[1]", chainable: true }, + roll: { aliasSynthetic: "ypr[2]", chainable: true }, + + matrix: { + get: function () { + var pt = this.entity.parent && this.entity.parent.transform; + var pm = pt && pt.matrix; + var ptVersion = pt && pt._version; + if (this._dirty || (ptVersion !== this._parentVersion)) { + var m = this._matrix; + mat4.identity(m); + mat4.fromRotationTranslation( + m, this._rotation, this._position); + mat4.scale(m, m, this._scale); + if (pm) + mat4.multiply(m, pm, m); + this._dirty = false; + this._matrix = m; + this._parentVersion = ptVersion; + this._version = (this._version + 1) | 0; + } + return this._matrix; + } + } + }); + + yuu.Ticker = yT(yuu.C, { + /** Set a callback to run every n ticks + + If the callback returns true, it is rescheduled for + execution (like setInterval). If it returns false, this + component is removed from the entity. + */ + constructor: function (callback, interval, delay) { + this.callback = callback; + this.interval = interval; + this._accum = 0; + this._count = -(delay || 0); + }, + + tick: function () { + this._accum += 1; + if (this._accum === this.interval) { + this._accum = 0; + if (!this.callback(this._count++)) + this.entity.detach(this); + } + }, + + TAPS: ["tick"] + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/core.js b/src/yuu/core.js new file mode 100644 index 0000000..8b16707 --- /dev/null +++ b/src/yuu/core.js @@ -0,0 +1,896 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + + yuu.require = function (m) { + try { return require(m); } + catch (exc) { return null; } + }; + + if (!Math.sign) + require("./pre"); + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + var gui = yuu.require("nw.gui"); + var fs = yuu.require("fs"); + var stringLerp = this.stringLerp || yuu.require("string-lerp"); + + var initHooks = []; + var initOptions = null; + + if (typeof document !== "undefined") { + var scripts = document.getElementsByTagName('script'); + var path = yf.last(scripts).src.split('?')[0]; + yuu.PATH = path.split('/').slice(0, -1).join('/') + '/'; + } else { + yuu.PATH = "file://" + escape(module.__dirname) + "/"; + } + + yuu.registerInitHook = initHooks.push.bind(initHooks); + /** Register a hook to be called during Yuu initialization + + Hooks are called in registration order with the module and + the options dictionary passed to the init method. (This is + also set to the module.) + */ + + function showError (exc, kind) { + var prefix = "yuu-" + (kind || "") + "error"; + yuu.logError(exc); + var dialog = document.getElementById(prefix); + var errorMessage = document.getElementById(prefix + "-message"); + if (errorMessage) + errorMessage.textContent = exc.message; + var errorStack = document.getElementById(prefix + "-stack"); + if (errorStack) + errorStack.textContent = exc.message + "\n\n" + exc.stack; + return dialog; + } + yuu.showError = showError; + + function fatalError (exc) { + var dialog = showError(exc, "fatal-"); + if (dialog) + dialog.style.display = "block"; + if (gui) { + gui.Window.get().show(); + gui.Window.get().focus(); + } + throw exc; + } + + yuu.init = function (options) { + /** Initialize Yuu and call all registered hooks + */ + + if (gui) { + var win = gui.Window.get(); + var nativeMenuBar = new gui.Menu({ type: "menubar" }); + if (nativeMenuBar.createMacBuiltin) { + nativeMenuBar.createMacBuiltin( + document.title, { hideEdit: true }); + win.menu = nativeMenuBar; + } + var wkdoc = document; + win.on("minimize", function () { + var ev = new Event("visibilitychange"); + wkdoc.hidden = true; + wkdoc.dispatchEvent(ev); + }); + win.on("restore", function () { + var ev = new Event("visibilitychange"); + wkdoc.hidden = false; + wkdoc.dispatchEvent(ev); + }); + } + + return new Promise(function (resolve) { + // TODO: Some kind of loading progress bar. + initOptions = options || {}; + yuu.log("messages", "Initializing Yuu engine."); + var promises = []; + yf.each(function (hook) { + promises.push(hook.call(yuu, initOptions)); + }, initHooks); + initHooks = null; // Bust future registerInitHook calls. + yuu.log("messages", "Initialization hooks complete."); + if (gui) { + gui.Window.get().show(); + gui.Window.get().focus(); + } + resolve(Promise.all(yf.filter(null, promises))); + }).then(function () { + yuu.log("messages", "Loading complete."); + }).catch(fatalError); + }; + + yuu.log = yf.argv(function (category, args) { + /** Log a message to the console. + + This supports simple filtering by setting e.g. + `yuu.log.errors = true` to log anything with the + `"errors"` category. + */ + if (!category || this.log[category]) { + switch (category) { + case "errors": return console.error.apply(console, args); + case "warnings": return console.warn.apply(console, args); + default: return console.log.apply(console, args); + } + } + }); + + yuu.log.errors = true; + yuu.log.warnings = true; + yuu.log.messages = true; + + yuu.logError = function (e) { + yuu.log("errors", e.message || "unknown error", e); + }; + + yuu.GET = function (url, params) { + /** Promise the HTTP GET the contents of a URL. */ + return new Promise(function (resolve, reject) { + var req = new XMLHttpRequest(); + req.open("GET", url, true); + for (var k in params) + req[k] = params[k]; + req.onload = function () { + var status = this.status; + // status === 0 is given by node-webkit for success. + if ((status >= 200 && status < 300) || status === 0) + resolve(this.response); + else + reject(new Error( + url + ": " + status + ": " + this.statusText)); + }; + req.onabort = function () { reject(new Error("aborted")); }; + req.onerror = function () { reject(new Error("network error")); }; + req.ontimeout = function () { reject(new Error("timed out")); }; + req.send(null); + }); + }; + + yuu.Image = function (src) { + /** Promises a DOM Image. */ + return new Promise(function (resolve, reject) { + var img = new Image(); + img.onload = function () { + resolve(img); + }; + img.onerror = function () { + var msg = "Unable to load " + img.src; + yuu.log("errors", msg); + reject(new Error(msg)); + }; + img.src = src; + }); + }; + + /** Command parsing and execution + + The command API serves several roles. It is a way to enable or + disable different game logic within different scenes; capture + and replay or automate game events; loosely or late-bind game + modules; customize input mappings; and a debugging tool to + help inspect or modify the state of a running program. + + A command is a string of a command name followed by arguments + separated by whitespace. It's similar to a fully bound + closure. It is less flexible but easier to inspect, store, + replay, and pass around. + + Command names are mapped to functions, grouped into sets, and + the sets pushed onto a stack. They are executed by passing the + command string to the execute function which walks the stack + looking for the matching command. + + If the command string is prefaced with + or -, true or false + are appended to the argument list. e.g. `+command` is + equivalent to `command true` and `-command 1 b` is equivalent + to `command 1 b false`. By convention, commands of those forms + return their internal state when called with neither true or + false. This is useful for another special prefix, ++. When + called as `++command`, it is executed with no arguments, the + result inverted (with !), and then called again passing that + inverted value as the last argument. + */ + + function isCommand (f) { + return yf.isFunction(f) && f._isCommandFunction; + } + + function cmdbind () { + // Commands are practically a subtype of functions. Binding + // them (which happens often, e.g. when Scenes register + // commands) should also return a command. + var f = Function.prototype.bind.apply(this, arguments); + // usage is still valid iff no new arguments were given. + return cmd(f, arguments.length <= 1 && this.usage, this.description); + } + + var cmd = yuu.cmd = yf.argcd( + /** Decorate a function for command execution + + Command functions need some special attributes to work + correctly. This decorator makes sure they have them. + */ + function (f) { return yuu.cmd(f, null, null); }, + function (f, description) { return yuu.cmd(f, null, description); }, + function (f, usage, description) { + f._isCommandFunction = true; + f.usage = usage || " ".repeat(f.length).substring(1); + f.description = description || "no description provided"; + f.bind = cmdbind; + return f; + } + ); + + yuu.propcmd = function (o, prop, desc, valspec) { + /** Generate a command function that controls a property + + A common pattern for command functions is to simply get or + set a single object property. This wrapper will generate a + correct function to do that. + */ + valspec = valspec || typeof o[prop]; + desc = desc || "Retrieve or modify the value of " + prop; + return cmd(function () { + if (arguments.length) + o[prop] = arguments[0]; + return o[prop]; + }, "<" + valspec + "?>", desc); + }; + + var QUOTED_SPLIT = /[^"\s]+|"(?:\\"|[^"])+"/g; + var COMMAND_SPLIT = /\s+(&&|\|\||;)\s+/g; + + function parseParam (param) { + if (yf.head(param) === "{" && yf.last(param) === "}") + return resolvePropertyPath( + this, param.substr(1, param.length - 2)); + try { return JSON.parse(param); } + catch (exc) { return param; } + } + + function parseCommand (cmdstring, ctx) { + /** Parse a command string into an invocation object. + + The command string has a form like `+quux 1 2 3` or + `foobar "hello world"`. + + Multiple commands can be joined in one string with &&, ||, + or ;. To use these characters literally as a command + argument place them in quotes. + + Arguments wrapped in {}s are interpreted as property paths + for the provided context object. `{x[0].y}` will resolve + `ctx.x[0].y` and put that into the arguments array. To + avoid this behavior and get a literal string bounded by + {}, JSON-encode the string beforehand (e.g. `"{x[0].y}"`). + + The returned array contains objects with three properties: + `name` - the command name to execute + `args` - an array of objects to pass as arguments + `toggle` - if the command value should be toggled ('++') + and pushed into args + `cond` - "&&", "||", or ";", indicating what kind of + conditional should be applied. + */ + + var invs = []; + var conds = cmdstring.split(COMMAND_SPLIT); + for (var i = -1; i < conds.length; i += 2) { + var args = conds[i + 1].match(QUOTED_SPLIT).map(parseParam, ctx); + var name = args.shift(); + var toggle = false; + if (name[0] === "+" && name[1] === "+") { + name = name.substring(2); + toggle = true; + } else if (name[0] === "+") { + name = name.substring(1); + args.push(true); + } else if (name[0] === "-") { + name = name.substring(1); + args.push(false); + } + invs.push({ name: name, args: args, toggle: toggle, + cond: conds[i] || ";"}); + } + return invs; + } + + yuu.CommandStack = yT({ + constructor: function () { + /** A stack of command sets for command lookup and execution */ + this._cmdsets = yf.slice(arguments); + }, + + push: function (cmdset) { + /** Add a command set to the lookup stack. */ + this._cmdsets = this._cmdsets.concat(cmdset); + }, + + remove: function (cmdset) { + /** Remove a command set from the lookup stack. */ + this._cmdsets = yf.without(this._cmdsets, cmdset); + }, + + insertBefore: function (cmdset, before) { + this._cmdsets = yf.insertBefore( + this._cmdsets.slice(), cmdset, before); + }, + + execute: function (cmdstring, ctx) { + /* Execute a command given a command string. + + The command stack is searched top-down for the first + command with a matching name, and it is invoked. No + other commands are called. + + A command set may also provide a special function named + `$`. If no matching command name is found, this + function is called with the raw invocation object (the + result of yuu.parseCommand) and may return true to stop + processing as if the command had been found. + */ + var invs = parseCommand(cmdstring, ctx); + var cond; + var res; + yf.each.call(this, function (inv) { + if ((inv.cond === "&&" && !cond) || (inv.cond === "||" && cond)) + return; + if (!yf.eachrUntil(function (cmdset) { + var cmd = cmdset[inv.name]; + if (cmd) { + if (inv.toggle) + inv.args.push(!cmd.apply(null, inv.args)); + yuu.log("commands", "Executing:", inv.name, + inv.args.map(JSON.stringify).join(" ")); + res = cmd.apply(null, inv.args); + cond = res === undefined ? cond : !!res; + yuu.log("commands", "Result:", JSON.stringify(res)); + return true; + } + return cmdset.$ && cmdset.$(inv); + }, this._cmdsets)) + yuu.log("errors", "Unknown command", inv.name); + }, invs); + return res; + } + }); + + yuu.extractCommands = function (object) { + var commands = {}; + yf.each(function (prop) { + // Check the descriptor before checking the value, because + // checking the value of accessors (which should never be + // stable commands) is generally a bad idea during + // constructors, and command sets are often filled in during + // constructors. + if (yT.isDataDescriptor(yT.getPropertyDescriptor(object, prop)) + && isCommand(object[prop])) + commands[prop] = object[prop].bind(object); + }, yf.allKeys(object)); + return commands; + }; + + yuu.commandStack = new yuu.CommandStack(yuu.defaultCommands = { + /** The default command stack and set. */ + cmds: yuu.cmd(function (term) { + term = term || ""; + var cmds = []; + yuu.commandStack._cmdsets.forEach(function (cmdset) { + for (var cmdname in cmdset) { + if (cmdname.indexOf(term) >= 0) { + var cmd = cmdset[cmdname]; + var msg; + if (cmd.usage) + msg = [cmdname, cmd.usage, "--", cmd.description]; + else + msg = [cmdname, "--", cmd.description]; + cmds.push(msg.join(" ")); + } + } + }); + yuu.log("messages", cmds.join("\n")); + }, "", "display available commands (matching the term)"), + + echo: yuu.cmd(function () { + yuu.log("messages", arguments); + }, "...", "echo arguments to the console"), + + log: yuu.cmd(function (name, state) { + if (state !== undefined) + yuu.log[name] = !!state; + return yuu.log[name]; + }, " ", "enable/disable a logging category") + + }); + + yuu.defaultCommands.showDevTools = yuu.cmd(function () { + if (gui) + gui.Window.get().showDevTools(); + }, "show developer tools"); + + yuu.anchorPoint = function (anchor, x0, y0, x1, y1) { + /** Calculate the anchor point for a box given extents and anchor mode + + This function is the inverse of yuu.bottomLeft. + */ + switch (anchor) { + case "center": return [(x0 + x1) / 2, (y0 + y1) / 2]; + case "top": return [(x0 + x1) / 2, y1]; + case "bottom": return [(x0 + x1) / 2, y0]; + case "left": return [x0, (y0 + y1) / 2]; + case "right": return [x1, (y0 + y1) / 2]; + + case "topleft": return [x0, y1]; + case "topright": return [x1, y1]; + case "bottomleft": return [x0, y0]; + case "bottomright": return [x0, y0]; + default: return [anchor[0], anchor[1]]; + } + }; + + yuu.bottomLeft = function (anchor, x, y, w, h) { + /** Calculate the bottom-left for a box given size and anchor mode + + This function is the inverse of yuu.anchorPoint. + */ + switch (anchor) { + case "center": return [x - w / 2, y - h / 2]; + case "top": return [x - w / 2, y - h]; + case "bottom": return [x - w / 2, y]; + case "left": return [x, y - h / 2]; + case "right": return [x - w, y - h / 2]; + + case "topleft": return [x, y - h]; + case "topright": return [x - w, y - h]; + case "bottomleft": return [x, y]; + case "bottomright": return [x - w, y]; + default: return [anchor[0], anchor[1]]; + } + }; + + yuu.lerp = function (a, b, p) { + return (a !== null && a !== undefined && a.lerp) + ? a.lerp(b, p) : (b !== null && b !== undefined && b.lerp) + ? b.lerp(a, 1 - p) : p < 0.5 ? a : b; + }; + + yuu.bilerp = function (x0y0, x1y0, x0y1, x1y1, px, py) { + /** Bilinearly interpolate between four values in two dimensions */ + return yuu.lerp(yuu.lerp(x0y0, x1y0, px), yuu.lerp(x0y1, x1y1, px), py); + }; + + function resolvePropertyPath (object, path) { + /** Look up a full property path + + If a null is encountered in the path, this function returns + null. If undefined is encountered or a property is missing, it + returns undefined. + */ + var parts = path.replace(/\[(\w+)\]/g, '.$1').split('.'); + for (var i = 0; + i < parts.length && object !== undefined && object !== null; + ++i) { + object = object[parts[i]]; + } + return object; + } + + yuu.Random = yT({ + /** Somewhat like Python's random.Random. + + Passed a function that returns a uniform random variable in + [0, 1) it can do other useful randomization algorithms. + + Its methods are implemented straightforwardly rather than + rigorously - this means they may not behave correctly in + common edge cases like precision loss. + */ + constructor: function (generator) { + this.random = generator || Math.random; + this._spareGauss = null; + }, + + choice: function (seq) { + /** Return a random element from the provided array. */ + return seq[this.randrange(0, seq.length)]; + }, + + randrange: yf.argcd( + function (a) { + /** Return a uniform random integer in [0, a). */ + return (this.random() * a) | 0; + }, + + function (a, b) { + /** Return a uniform random integer in [a, b). */ + a = a | 0; + b = b | 0; + return a + ((this.random() * (b - a)) | 0); + }, + + function (a, b, step) { + /** Return a uniform random number in [a, b). + + The number is constrained to values of a + i * step + where i is a non-negative integer. + */ + var i = Math.ceil((b - a) / step); + return a + this.randrange(i) * step; + } + ), + + uniform: yf.argcd( + function (a) { + /** Return a uniform random variable in [0, a). */ + return a * this.random(); + }, + function (a, b) { + /** Return a uniform random variable in [a, b). */ + return a + (b - a) * this.random(); + } + ), + + gauss: function (mean, sigma) { + var u = this._spareGauss, v, s; + this._spareGauss = null; + + if (u === null) { + do { + u = this.uniform(-1, 1); + v = this.uniform(-1, 1); + s = u * u + v * v; + } while (s >= 1.0 || s === 0.0); + var t = Math.sqrt(-2.0 * Math.log(s) / s); + this._spareGauss = v * t; + u *= t; + } + return mean + sigma * u; + }, + + randbool: yf.argcd( + /** Return true the given percent of the time (default 50%). */ + function () { return this.random() < 0.5; }, + function (a) { return this.random() < a; } + ), + + randsign: function (v) { + return this.randbool() ? v : -v; + }, + + shuffle: function (seq) { + for (var i = seq.length - 1; i > 0; --i) { + var index = this.randrange(i + 1); + var temp = seq[i]; + seq[i] = seq[index]; + seq[index] = temp; + } + return seq; + }, + + discard: function (z) { + z = z | 0; + while (z-- > 0) + this.random(); + } + }); + + yuu.createLCG = yf.argcd( + /** Linear congruential random generator + + This returns a function that generates numbers [0, 1) as + with Math.random. You can also read or assign the `state` + attribute to set the internal state. + */ + function () { return yuu.createLCG(Math.random() * 2147483647); }, + function (seed) { + var state = seed | 0; + return function generator () { + state = (state * 1664525 + 1013904223) % 4294967296; + return state / 4294967296; + }; + } + ); + + yuu.random = new yuu.Random(); + + function defaultKey (args) { + // Cache things that can be constructed with one string. + return args.length === 1 && yf.isString(args[0]) ? args[0] : null; + } + + yuu.Caching = function (Type, cacheKey) { + function ctor () { + var k = ctor._cacheKey(arguments); + var o = k && ctor._cache[k]; + if (!o) + o = ctor._cache[k] = yf.construct(ctor.Uncached, arguments); + return o; + } + ctor._cacheKey = cacheKey || defaultKey; + ctor._cache = {}; + ctor.Uncached = Type; + return ctor; + }; + + yuu.transpose2d = function (a) { + for (var x = 0; x < a.length; ++x) { + for (var y = 0; y < x; ++y) { + var t = a[x][y]; + a[x][y] = a[y][x]; + a[y][x] = t; + } + } + }; + + yuu.normalizeRadians = function (theta) { + var PI = Math.PI; + return (theta + 3 * PI) % (2 * PI) - PI; + }; + + yuu.radians = function (v) { + return v * (Math.PI / 180.0); + }; + + yuu.degrees = function (v) { + return v * (180.0 / Math.PI); + }; + + var SHORT = /(\/|^)@(.+)$/; + yuu.resourcePath = function (path, category, ext) { + var match; + if ((match = path.match(SHORT))) { + path = path.replace(/^yuu\/@/, yuu.PATH + "@") + .replace(SHORT, "$1data/" + category + "/$2"); + if (match[2].indexOf(".") === -1) + path += "." + ext; + } + return path; + }; + + yuu.ready = function (resources, result) { + return Promise.all(yf.filter(null, yf.pluck("ready", resources))) + .then(yf.K(result)); + }; + + yuu.openURL = function (url) { + if (gui && gui.Shell) + gui.Shell.openExternal(url); + else + window.open(url); + }; + + function crossPlatformFilename (basename) { + return basename + // Replace D/M/Y with D-M-Y, and H:M:S with H.M.S. + .replace(/\//g, "-").replace(/:/g, ".") + // Replace all other problematic characters with _. + .replace(/["<>*?|\\]/g, "_"); + } + + yuu.downloadURL = function (url, suggestedName) { + var regex = /^data:[^;+]+;base64,(.*)$/; + var matches = url.match(regex); + suggestedName = crossPlatformFilename(suggestedName); + if (matches && fs) { + var data = matches[1]; + var buffer = new Buffer(data, 'base64'); + var HOME = process.env.HOME + || process.env.HOMEPATH + || process.env.USERPROFILE; + var filename = HOME + "/" + suggestedName; + console.log("Saving to", filename); + fs.writeFileSync(filename, buffer); + } else { + var link = document.createElement('a'); + link.style.display = "none"; + link.href = url; + link.download = suggestedName; + // Firefox (as of 28) won't download from a link not rooted in + // the document; so, root it and then remove it when done. + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + }; + + yuu.AABB = yT({ + constructor: yf.argcd( + function () { this.constructor(0, 0, 0, 0); }, + function (w, h) { this.constructor(0, 0, w, h); }, + function (x0, y0, x1, y1) { + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; + } + ), + + w: { + get: function () { return this.x1 - this.x0; }, + set: function (w) { this.x1 = this.x0 + w; } + }, + + h: { + get: function () { return this.y1 - this.y0; }, + set: function (h) { this.y1 = this.y0 + h; } + }, + + size: { swizzle: "wh" }, + + contains: yf.argcd( + function (p) { return this.contains(p.x, p.y); }, + function (x, y) { + return x >= this.x0 && x < this.x1 + && y >= this.y0 && y < this.y1; + } + ), + + matchAspectRatio: function (outer) { + var matched = new this.constructor( + this.x0, this.y0, this.x1, this.y1); + var aRatio = matched.w / matched.h; + var bRatio = outer.w / outer.h; + if (aRatio > bRatio) { + // too wide, must be taller + var h = matched.w / bRatio; + var dh = h - matched.h; + matched.y0 -= dh / 2; + matched.y1 += dh / 2; + } else { + // too tall, must be wider + var w = matched.h * bRatio; + var dw = w - matched.w; + matched.x0 -= dw / 2; + matched.x1 += dw / 2; + } + return matched; + }, + + alignedInside: function (outer, alignment) { + var x0, y0; + switch (alignment) { + case "bottomleft": + x0 = outer.x0; + y0 = outer.y0; + break; + case "bottom": + x0 = outer.x0 + (outer.w - this.w) / 2; + y0 = outer.y0; + break; + case "bottomright": + x0 = outer.x0 - this.w; + y0 = outer.y0; + break; + case "left": + x0 = outer.x0; + y0 = outer.x0 + (outer.h - this.h) / 2; + break; + case "center": + x0 = outer.x0 + (outer.w - this.w) / 2; + y0 = outer.x0 + (outer.h - this.h) / 2; + break; + case "right": + x0 = outer.x1 - this.w; + y0 = outer.x0 + (outer.h - this.h) / 2; + break; + case "topleft": + x0 = outer.x0; + y0 = outer.y1 - this.h; + break; + case "top": + x0 = outer.x0 + (outer.w - this.w) / 2; + y0 = outer.y1 - this.h; + break; + case "topright": + x0 = outer.x1 - this.w; + y0 = outer.y1 - this.h; + break; + } + return new this.constructor(x0, y0, x0 + this.w, y0 + this.h); + } + }); + + function splitPathExtension (path) { + var dot = path.lastIndexOf("."); + if (dot <= 0) return [path, ""]; + + var dir = path.lastIndexOf("/"); + if (dot < dir) return [path, ""]; + + return [path.substring(0, dot), path.substring(dot)]; + } + yuu.splitPathExtension = splitPathExtension; + + if (stringLerp) { + yT.defineProperty(String.prototype, "lerp", function (b, p) { + b = b.toString(); + // Never numericLerp - if that's desired force Numbers. + // Be more conservative than stringLerp since this runs + // often and the diff can't be easily hoisted. + return this.length * b.length > 256 + ? stringLerp.fastLerp(this, b, p) + : stringLerp.diffLerp(this, b, p); + }); + } + + yT.defineProperties(Number.prototype, { + lerp: function (b, p) { return this + (b - this) * p; } + }); + + yT.defineProperties(Array.prototype, { + lerp: function (b, p) { + var length = Math.round(this.length.lerp(b.length, p)); + var c = new this.constructor(length); + for (var i = 0; i < length; ++i) { + if (i >= this.length) + c[i] = b[i]; + else if (i >= b.length) + c[i] = this[i]; + else + c[i] = this[i].lerp(b[i], p); + } + return c; + } + }); + + /** Typed array extensions + + https://www.khronos.org/registry/typedarray/specs/1.0/ + BUT: Read on for fun times in browser land~ + + Ideally we could just set these once on ArrayBufferView, but + the typed array specification doesn't require that such a + constructor actually exist. And in Firefox (18), it doesn't. + + More infurating, in Safari (7.0.3) Int8Array etc. are not + functions so this needs to be added to the prototype + directly. This is a violation of the specification which + requires such constructors, and ECMA which requires + constructors be functions, and common decency. + */ + + [ Float32Array, Float64Array, Int8Array, Uint8Array, + Int16Array, Uint16Array, Int32Array, Uint32Array + ].forEach(function (A) { + yT.defineProperties(A.prototype, { + slice: yf.argcd( + /** Like Array's slice, but for typed arrays */ + function () { return new this.constructor(this); }, + function (begin) { + return new this.constructor(this.subarray(begin)); + }, + function (begin, end) { + return new this.constructor(this.subarray(begin, end)); + } + ), + + fill: Array.prototype.fill, + reverse: Array.prototype.reverse, + + lerp: function (b, p) { + if (p === 0) + return this.slice(); + else if (p === 1) + return b.slice(); + var c = new this.constructor(this.length); + for (var i = 0; i < this.length; ++i) + c[i] = this[i] + (b[i] - this[i]) * p; + return c; + } + }); + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" ? (this.yuu = {}) : exports); diff --git a/src/yuu/data/license.txt b/src/yuu/data/license.txt new file mode 100644 index 0000000..6c2b4e7 --- /dev/null +++ b/src/yuu/data/license.txt @@ -0,0 +1,507 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + +-- + +glMatrix - http://glmatrix.net/ + +Copyright 2013 Brandon Jones, Colin MacKenzie IV + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + +-- + +Hammer.js - http://eightmedia.github.io/hammer.js/ + +Copyright 2011-2014 by Jorik Tangelder (Eight Media) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-- + +Fonts + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +Copyright (c) 2014, Telefonica S.A. +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +Copyright (c) 2014, Telefonica S.A. +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Dave Gandy http://fontawesome.io/ +with Reserved Font Name Font Awesome + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-- + +This program may be distributed along with node-webkit, a wrapper for +packaging web applications for standalone use. If so, the accompanying +`node-webkit credits.html' contains its licensing information. + +This program is not a derivative work of node-webkit but rather "mere +aggregation." You do not need to account for node-webkit's licensing +terms to modify and/or redistribute parts of this program unless you +also modify and/or redistribute node-webkit. diff --git a/src/yuu/data/shaders/color.frag b/src/yuu/data/shaders/color.frag new file mode 100644 index 0000000..3d6f67e --- /dev/null +++ b/src/yuu/data/shaders/color.frag @@ -0,0 +1,12 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +precision mediump float; + +varying vec4 fColor; + +void main(void) { + gl_FragColor = fColor; +} diff --git a/src/yuu/data/shaders/default.frag b/src/yuu/data/shaders/default.frag new file mode 100644 index 0000000..712aa80 --- /dev/null +++ b/src/yuu/data/shaders/default.frag @@ -0,0 +1,15 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +precision mediump float; + +varying vec2 fTexCoord; +varying vec4 fColor; +uniform sampler2D tex; + +void main(void) { + gl_FragColor = vec4(fColor.rgb * fColor.a, fColor.a) + * texture2D(tex, fTexCoord); +} diff --git a/src/yuu/data/shaders/default.vert b/src/yuu/data/shaders/default.vert new file mode 100644 index 0000000..5a21e7d --- /dev/null +++ b/src/yuu/data/shaders/default.vert @@ -0,0 +1,22 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +precision mediump float; + +attribute vec3 position; +attribute vec2 texCoord; +attribute vec4 color; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; +varying vec2 fTexCoord; +varying vec4 fColor; + +void main(void) { + gl_Position = projection * view * model * vec4(position, 1.0); + fTexCoord = texCoord; + fColor = color; +} diff --git a/src/yuu/data/yuu.css b/src/yuu/data/yuu.css new file mode 100644 index 0000000..b572735 --- /dev/null +++ b/src/yuu/data/yuu.css @@ -0,0 +1,364 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +@font-face { + font-family: 'FontAwesome'; + src: url('../../ext/font-awesome.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-UltraLight.woff'); + font-weight: 200; + font-style: normal; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-UltraLightItalic.woff'); + font-weight: 200; + font-style: italic; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-Regular.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-Italic.woff'); + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-Bold.woff'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'Fira Sans'; + src: url('../../ext/FiraSans-BoldItalic.woff'); + font-weight: 700; + font-style: italic; +} + +@font-face { + font-family: 'Fira Mono'; + src: url('../../ext/FiraMono-Regular.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Fira Mono'; + src: url('../../ext/FiraMono-Bold.woff'); + font-weight: 700; + font-style: normal; +} + +pre, tt, code, kbd { + font-family: 'Fira Mono', FontAwesome, monospace; +} + +body { + overflow: hidden; + margin: 0; + padding: 0; + font-family: 'Fira Sans', FontAwesome, sans-serif; +} + +#yuu-canvas { + /* Specifying only width/height gives incorrect results on Chrome + 33.0.1750.152 when fullscreen on > 1 devicePixelRatio. The + canvas takes on the correct size, but is centered in a page of + e.g. 2x for 2 DPR so you only see the top-left quadrant. + + Specifying only top/bottom/left/right 0 also breaks, because in the + absence of a CSS size the browser tries to set the client size to + the canvas buffer size, which means it grows/shrinks by the DPR + every resize event. + + Specifying all six attributes makes it work as desired. */ + position: absolute; + width: 100%; + height: 100%; + bottom: 0; + left: 0; + right: 0; + top: 0; +} + +#yuu-canvas:focus { + outline: inherit; +} + +#yuu-licensing { + padding-left: 2em; + padding-right: 2em; + text-align: center; + font-size: 0.7em; +} + +pre#yuu-licensing { + text-align: left; +} + +[data-yuu-command] { + cursor: pointer; +} + +/* Animations */ + +.yuu-from-top-right { + transform: translate(50vw, -110%) !important; + -webkit-transform: translate(50vw, -110%) !important; +} + +.yuu-from-top { + transform: translate(-50%, -110%) !important; + -webkit-transform: translate(-50%, -110%) !important; +} + +.yuu-fade { + opacity: 0 !important; +} + +.yuu-squish { + margin-left: 0 !important; + margin-right: 0 !important; + max-width: 0 !important; + min-width: 0 !important; + overflow: hidden !important; + padding-left: 0em !important; + padding-right: 0em !important; +} + +/* Toasts are short-lived feedback to user actions. */ +.yuu-toast { + pointer-events: none; + background-color: rgba(50, 50, 50, 0.5); + border-radius: 0.2em; + border: solid rgba(255, 255, 255, 0.5) 1px; + color: #eee; + display: table-cell; + float: right; + font-size: 3em; + margin-left: 0.125em; + margin-right: 0.125em; + margin-top: 0.25em; + max-width: 60%; + /* Minimum size is a square: 1.25 + 0.125 * 2 for padding = 1.5em, + same as the line height. */ + min-width: 1.4em; + padding: 0 0.125em; + padding-top: 0.15em; + position: relative; + text-align: center; + transition: all 0.5s; + -webkit-transition: all 0.5s; +} + +/* Overlays are hidden HTML-based scenes that the director can load. + These appear over the game, and are modal. The primary use case is + configuration menus, copyright information, error feedback, + etc. */ + +.yuu-overlay { + background-color: rgba(50, 50, 50, 0.9); + border-radius: 0.2em; + border: solid rgba(255, 255, 255, 0.9) 1px; + color: #eee; + display: none; + width: 60%; + max-width: 600px; + min-width: 300px; + margin-left: auto; + margin-right: auto; + left: 50%; + max-height: 80%; + overflow: auto; + padding: 0 1em 1em 1em; + position: fixed; + transform: translate(-50%, 10vh) scale(1, 1); + -webkit-transform: translate(-50%, 10vh) scale(1, 1); + transition: transform 0.3s, opacity 0.3s; + -webkit-transition: -webkit-transform 0.3s, opacity 0.3s; +} + +/* Overlays are focusable but should not show it - they are always + somewhere in the event tree when visible. */ +.yuu-overlay:focus { + outline: inherit; +} + +.yuu-overlay h1 { + font-size: 1.2em; + font-weight: normal; + text-align: center; +} + +.yuu-overlay h2 { + font-size: 1.1em; + font-weight: normal; +} + +.yuu-overlay hr { + margin-bottom: 1em; + margin-top: 0.5em; +} + +/* For consistency overlays use custom CSS for controls, which + means we need a default focused behavior. */ +.yuu-overlay *:focus { + outline: solid grey 1px; +} + +div[data-yuu-command=dismiss] { + font-size: 1.5em; + width: 1.25em; + height: 1.25em; + text-align: center; + position: fixed; + margin-left: -0.6667em; +} + +div[data-yuu-command=dismiss]:after { + content: "\f00d"; +} + +/* Table layout for options screens. In general, two or three columns, + the leftmost is a simple control, the middle/last is a label, and + the last is a more complicated control like a range or select + dropdown. */ + +.yuu-options { + border-collapse: separate; + border-spacing: 0.25em; +} + +.yuu-options td:first-child { + min-width: 2em; + white-space: nowrap; +} + +.yuu-options td:last-child { + width: 100%; +} + +/* De/re-style checkboxes. This means hiding the actual + checkbox and making it tiny, and instead filling in the + label immediately after it. */ +input[type=checkbox][data-yuu-command] { + max-width: 0; + opacity: 0; +} + +input[type=checkbox][data-yuu-command] + label[for] { + cursor: pointer; + display: inline-block; + text-align: center; + width: 1.3333em; + font-size: 1.25em; +} + +input[type=checkbox][data-yuu-command] + label[for]:before { + display: inline-block; + padding-top: 0.2em; +} + +input[type=checkbox][data-yuu-command] + label[for]:before { + content: "\f096"; +} + +input[type=checkbox][data-yuu-command]:checked + label[for]:before { + content: "\f046"; +} + +input[type=checkbox][data-yuu-command]:focus + label[for] { + outline: solid grey 1px; +} + +/* De/re-style ranges. */ +input[type=range][data-yuu-command] { + -webkit-appearance: none; + background-color: gray; +} + +input[type=range][data-yuu-command]::-moz-range-track { + background: gray; + border: none; + outline: none; +} + +input[type=range][data-yuu-command]::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #444; + width: 1.5em; + height: 1em; +} + +input[type=range][data-yuu-command]::-moz-range-thumb { + border: none; + background-color: #444; + width: 1.5em; + height: 1em; +} + +/* Special-case icons for the mute checkbox. */ + +input[type=checkbox][data-yuu-command=mute]:checked + label[for]:before { + content: "\f026"; +} + +input[type=checkbox][data-yuu-command=mute] + label[for]:before { + content: "\f028"; +} + +@-moz-keyframes spin { + from { -moz-transform: rotate(0deg); } + to { -moz-transform: rotate(360deg); } +} + +@-webkit-keyframes spin { + from { -webkit-transform: rotate(0deg); } + to { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +.yuu-spinner:after { + content: "◔"; + -webkit-animation: spin 1s linear infinite; + -moz-animation: spin 1s linear infinite; + animation: spin 1s linear infinite; + display: inline-block; +} + +dl { + text-align: center; +} + +dt { + margin-top: 1em; + margin-bottom: 0.25em; + font-size: 0.8em; + font-weight: 200; +} + +dd { + margin-left: 0; +} diff --git a/src/yuu/director.js b/src/yuu/director.js new file mode 100644 index 0000000..8723014 --- /dev/null +++ b/src/yuu/director.js @@ -0,0 +1,696 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + + // It's vaguely plausible to want a director without any scenes + // (only entity0 and the canvas), which means the renderer is not + // required. + if (!yuu.E) require("./ce"); + if (!yuu.InputState) require("./input"); + if (!yuu.Material) require("./gfx"); + + yuu.Director = yT({ + constructor: function (commandStack, input, tickHz) { + /** Manage and update a set of Scenes + + The director is responsible for calling two functions + regularly on the Scene instances it controls, `tick` and + `render`. `tick` is called at a regular interval (or at + least pretends to be called at one, browser scheduler + permitting), and `render` is called when the browser asks + for a new display frame. + */ + this._scenes = []; + this.entity0 = new yuu.E(); + this._commandStack = commandStack || yuu.commandStack; + this.input = input || new yuu.InputState([yuu.defaultKeybinds]); + this._events = {}; + this._tickCount = 0; + this._timerStart = 0; + this._audioOffset = 0; + this._rafId = null; + this._tickHz = tickHz || 60; + this._afterRender = []; + + this.commands = yuu.extractCommands(this); + this._commandStack.push(this.commands); + this._dogesture = this.__dogesture.bind(this); + this._gesture = null; + this._resized = false; + this._toasts = {}; + this._devices = {}; + }, + + pushScene: function (scene) { + /** Add a Scene onto the director's stack */ + this.insertScene(scene, this._scenes.length); + }, + + popScene: function () { + /** Remove the top scene from the director's stack */ + this.removeScene(yf.last(this._scenes)); + }, + + pushPopScene: function (scene) { + /** Replace the top scene on the stack */ + this.popScene(); + this.pushScene(scene); + }, + + insertScene: function (scene, idx) { + var scenes = this._scenes.slice(); + scenes.splice(idx, 0, scene); + this._scenes = scenes; + this._commandStack.insertBefore( + scene.commands, + this._scenes[idx + 1] && this._scenes[idx + 1].commands); + this.input.insertBefore( + scene.keybinds, + this._scenes[idx + 1] && this._scenes[idx + 1].keybinds); + scene.init(this); + if (scene.inputs.resize) + scene.inputs.resize.call(scene, yuu.canvas); + }, + + insertUnderScene: function (scene, over) { + return this.insertScene(scene, this._scenes.indexOf(over)); + }, + + removeScene: function (scene) { + /** Remove a Scene onto the director's stack */ + this._scenes = yf.without(this._scenes, scene); + scene.done(); + this.input.remove(scene.keybinds); + this._commandStack.remove(scene.commands); + }, + + DOCUMENT_EVENTS: [ "keydown", "keyup", "visibilitychange" ], + + CANVAS_EVENTS: [ "mousemove", "mousedown", "mouseup" ], + + WINDOW_EVENTS: [ "popstate", "resize", "pageshow", + "yuugamepadbuttondown", "yuugamepadbuttonup" ], + + GESTURES: [ + "touch", "release", "hold", "tap", "doubletap", + "dragstart", "drag", "dragend", "dragleft", "dragright", + "dragup", "dragdown", "swipe", "swipeleft", "swiperight", + "swipeup", "swipedown", "pinch", "pinchin", "pinchout" + ], + + _dispatchSceneInput: function (name, args) { + var scenes = this._scenes; + for (var i = scenes.length - 1; i >= 0; --i) { + var scene = scenes[i]; + var handler = scene.inputs[name]; + if (handler && handler.apply(scene, args)) + return true; + + // FIXME: This may be a heavy ad hoc solution for the + // multiple input layer problems in pwl6. Something + // like this isn't required or allowed for e.g. + // individual keys, why not? + // + // REALLY FIXME: This doesn't even work correctly for + // joystick events, a) because they're prefixed and b) + // because they are in WINDOW_EVENTS so you have to + // manually enumerate them or you also ignore e.g. + // resize. + else if (scene.inputs.consume + && yf.contains(scene.inputs.consume, name)) + return false; + } + return false; + }, + + // Aside from the performance considerations, deferring + // resizing by multiple frames fixes mis-sizing during startup + // and fullscreen transition in node-webkit on Windows. (And + // probably similar bugs in other configurations.) + _doresize: yf.debounce(function () { + this._resized = true; + }, 500), + + _dovisibilitychange: function (event) { + if (event.target.hidden) + this._stopRender(); + else + this._startRender(); + }, + + _dopageshow: function (event) { + if (!history.state) + history.pushState("yuu director", ""); + this._stopRender(); + if (!document.hidden) + this._startRender(); + }, + + _dopopstate: function (event) { + var cmds = []; + if (this._dispatchSceneInput("back", []) + || (cmds = this.input.change("back"))) { + history.pushState("yuu director", ""); + yf.each.call(this, this.execute, cmds); + yuu.stopPropagation(event, true); + } else { + history.back(); + } + }, + + __dogesture: function (event) { + this._updateCaps(event.gesture.srcEvent.type.toLowerCase(), true); + var type = event.type.toLowerCase(); + var p0 = yuu.deviceFromCanvas(event.gesture.startEvent.center); + var p1 = yuu.deviceFromCanvas(event.gesture.center); + if (this._dispatchSceneInput(type, [p0, p1])) + yuu.stopPropagation(event, true); + }, + + // TODO: This munges events, but also, InputState's mousemove + // etc. munge events, in a slightly different but still + // related and fragile way. + // + // Additionally, things run in a Scene handler won't + // affect the InputState's internal state - good for + // avoiding bind execution, bad for consistency. Even if + // a scene handles e.g. "keydown a", input.pressed.a + // should be true. + // + // This is compounded by the lack of actual use cases for any + // of the non-gesture events other than "back" and + // "mousemove". + + _ARGS_FOR: { + keydown: function (event) { + return [yuu.keyEventName(event), {}]; + }, + keyup: function (event) { + return [yuu.keyEventName(event), {}]; + }, + mousemove: function (event) { + return [yuu.deviceFromCanvas(event)]; + }, + mouseup: function (event) { + return [event.button, yuu.deviceFromCanvas(event)]; + }, + mousedown: function (event) { + return [event.button, yuu.deviceFromCanvas(event)]; + }, + gamepadbuttondown: function (event) { + return [event.detail.gamepad, + event.detail.button]; + }, + gamepadbuttonup: function (event) { + return [event.detail.gamepad, event.detail.button]; + }, + }, + + _updateCaps: function (type, definite) { + if (type.startsWith("mouse")) { + if (this._devices.mouse === undefined || definite) + this._devices.mouse = Date.now(); + this._devices.touch = this._devices.touch || false; + } else if (type.startsWith("touch")) { + this._devices.mouse = this._devices.mouse || false; + this._devices.touch = Date.now(); + this._devices.keyboard = this._devices.keyboard || false; + } else if (type.startsWith("key")) { + this._devices.keyboard = Date.now(); + } else if (type.startsWith("gamepad")) { + this._devices.gamepad = Date.now(); + this._devices.touch = this._devices.touch || false; + } + }, + + preferredDevice: function (options) { + options = options || ["keyboard", "touch", "mouse", "gamepad"]; + var devices = this._devices; + var best = yf.foldl(function (best, option) { + var dbest = devices[best]; + var doption = devices[option]; + return dbest === undefined && doption ? option + : doption > dbest ? option : best; + }, options); + for (var i = 0; devices[best] === false && i < options.length; ++i) + if (devices[options[i]] !== false) + best = options[i]; + return best; + }, + + _doevent: function (event) { + var type = event.type.toLowerCase(); + if (type.startsWith("yuu")) + type = type.slice(3); + var args = this._ARGS_FOR[type](event); + var cmds; + this._updateCaps(type, false); + if (this._dispatchSceneInput(type, args)) + yuu.stopPropagation(event, true); + else if ((cmds = this.input[type].apply(this.input, args))) { + var ctx = yf.last(args); + yf.each.call(this, this.execute, cmds, yf.repeat(ctx, cmds.length)); + yuu.stopPropagation(event, true); + } + }, + + _addListener: function (target, name, handler) { + handler = (handler || this["_do" + name] || this._doevent).bind(this); + this._events[name] = { target: target, handler: handler }; + target.addEventListener(name, handler); + }, + + _removeListener: function (name) { + this._events[name].target.removeEventListener( + name, this._events[name].handler); + delete this._events[name]; + }, + + tickHz: { + get: function () { return this._tickHz; }, + set: function (hz) { + this._tickHz = hz; + this._tickCount = 0; + this._timerStart = 0; + } + }, + + currentTime: { get: function () { + return this._timerStart + 1000 * this._tickCount / this._tickHz; + } }, + + currentAudioTime: { get: function () { + /** Audio time of the current tick. + */ + return (this.currentTime + this._audioOffset) / 1000; + } }, + + _startRender: function () { + if (this._rafId !== null) + return; + this._tickCount = 0; + this._timerStart = 0; + // GNU/Linux with node-webkit sizes things incorrectly on + // startup, so force a recalculating as soon as the render + // loop runs. + this._resized = true; + var director = this; + this._rafId = window.requestAnimationFrame(function _ (t) { + if (!director._timerStart) { + director._timerStart = t; + director._audioOffset = yuu.audio + ? yuu.audio.currentTime * 1000 - t + : 0; + } + director._rafId = window.requestAnimationFrame(_); + director.render(t); + }); + }, + + _stopRender: function () { + if (this._rafId !== null) + window.cancelAnimationFrame(this._rafId); + this._rafId = null; + }, + + start: function () { + /** Begin ticking and rendering scenes */ + yf.each(this._addListener.bind(this, window), + this.WINDOW_EVENTS); + yf.each(this._addListener.bind(this, document), + this.DOCUMENT_EVENTS); + yf.each(this._addListener.bind(this, yuu.canvas), + this.CANVAS_EVENTS); + + this._gesture = typeof Hammer !== "undefined" + ? new Hammer(yuu.canvas, { "tap_always": false, + "hold_timeout": 300 }) + : { on: function () {}, off: function () {} }; + this._gesture.on(this.GESTURES.join(" "), this._dogesture); + + // Treat the back button as another kind of input event. Keep + // a token state on the stack to catch the event, and if no + // scene handles it, just go back one more. + // + // Because of browser session restore, state might already be + // on the stack. Throw it out if so. + if (!history.state) + history.pushState("yuu director", ""); + else + history.replaceState("yuu director", ""); + this._startRender(); + }, + + stop: function () { + /** Stop ticking and rendering, clear all scenes */ + this._stopRender(); + yf.eachr(function (scene) { scene.done(); }, this._scenes); + this._scenes = []; + yf.each.call(this, this._removeListener, Object.keys(this._events)); + this._gesture.off(this.GESTURES.join(" "), this._dogesture); + this._gesture = null; + }, + + message: function () { + /** Send a message to all entities/scenes, bottom to top */ + this.entity0.message.apply(this.entity0, arguments); + var scenes = this._scenes; + for (var i = 0; i < scenes.length; ++i) + scenes[i].message.apply(scenes[i], arguments); + }, + + _takeScreenshot: function () { + var date = (new Date()).toLocaleString(); + try { + yuu.downloadURL( + yuu.canvas.toDataURL("image/png"), + document.title + " (" + date + ").png"); + this.toast("\uf030", 0.5, "screenshot"); + } catch (exc) { + var dialog = yuu.showError(exc); + if (dialog) + this.showOverlay(dialog.id); + } + }, + + render: function (t) { + /** Tick and render all scenes, bottom to top */ + var i; + + if (this._resized) { + this._dispatchSceneInput("resize", [yuu.canvas]); + this._resized = false; + } + + t = t - this._timerStart; + var oneTick = 1000.0 / this._tickHz; + while (oneTick * this._tickCount < t) + this.message("tick", oneTick * this._tickCount++, oneTick); + this.message("tock", (t % oneTick) / oneTick); + + yuu.gl.clear(yuu.gl.COLOR_BUFFER_BIT); + var scenes = this._scenes; + var cursor = "default"; + for (i = 0; i < scenes.length; ++i) { + scenes[i].render(); + cursor = scenes[i].cursor || cursor; + } + + if (cursor !== yuu.canvas.style.cursor) + yuu.canvas.style.cursor = cursor; + + for (i = 0; i < this._afterRender.length; ++i) + this._afterRender[i](); + this._afterRender.length = 0; + }, + + toast: yuu.cmd(function (markup, duration, id) { + var toasts = this._toasts; + id = "yuu-toast-" + id; + var toast = id ? document.querySelector("#" + id) : null; + duration = duration || 4; + + if (!toast) { + toast = document.createElement("div"); + toast.id = id; + toast.className = "yuu-toast yuu-fade"; + document.body.appendChild(toast); + } + if (toasts[id]) { + clearTimeout(toasts[id]); + delete toasts[id]; + } + toast.innerHTML = markup; + yuu.afterAnimationFrame(function () { + toast.className = "yuu-toast"; + }); + + var to = setTimeout(function () { + toast.className = "yuu-toast yuu-fade"; + toast.addEventListener("transitionend", function fade () { + toast.removeEventListener("transitionend", fade); + // Stop if the toast was revived between the + // timeout event and transition end, i.e. while it + // was fading out. + if (id && toasts[id] !== to) + return; + toast.className += " yuu-squish"; + toast.addEventListener("transitionend", function squish () { + toast.removeEventListener("transitionend", squish); + if (id && toasts[id] === to) { + delete toasts[id]; + toast.parentNode.removeChild(toast); + } + }); + }); + }, duration * 1000); + if (id) + toasts[id] = to; + }, " ", "show a toast message"), + + showOverlay: yuu.cmd(function (id, animation, dismissKeys) { + var overlay = new yuu.Overlay( + document.getElementById(id), animation, dismissKeys); + this.pushScene(overlay); + }, " ", "show an HTML overlay"), + + screenshot: yuu.cmd(function () { + this._afterRender.push(this._takeScreenshot.bind(this)); + }, "take a screenshot"), + + fullscreen: yuu.cmd(function (v) { + if (arguments.length > 0) { + yuu.fullscreen = !!v; + // Most browser/OS combinations will drop key events + // during the "transition to fullscreen" animation. + // This means the key to enter fullscreen is recorded + // as "stuck down" inside the input code, and pressing + // it again won't trigger exiting fullscreen, just + // clear the stuck bit - you would have to press it + // *again* to actually transition out of fullscreen. + // + // Obviously this is not good, and the chance of the + // player actually trying to do something meaningful + // during fullscreen transition is unlikely, so just + // blow away the internal state and act like + // everything the player does is new. + this.input.reset(); + } + return yuu.fullscreen; + }, "", "enable/disable fullscreen"), + + execute: { proxy: "_commandStack.execute" }, + }); + + yuu.Scene = yT({ + constructor: function () { + /** A collection of entities, a layer, keybinds, and commands + + The single argument is as function that will be scalled + during construction with `this` as the newly-created + scene. + + */ + this.entity0 = new yuu.E(); + this.layer0 = new yuu.Layer(); + this.keybinds = new yuu.KeyBindSet(this.KEYBINDS); + this.commands = yuu.extractCommands(this); + }, + + addEntity: { proxy: "entity0.addChild" }, + removeEntity: { proxy: "entity0.removeChild" }, + addEntities: { proxy: "entity0.addChildren" }, + removeEntities: { proxy: "entity0.removeChildren" }, + message: { proxy: "entity0.message" }, + + init: function (director) { + /** Called when the director starts this scene */ + }, + + done: function () { + /** Called when the director stops this scene */ + }, + + render: function () { + /** Queue renderables from the entities and render each layer */ + this.message("queueRenderables", this.layer0.rdros); + this.layer0.render(); + this.layer0.clear(); + }, + + inputs: {}, + KEYBINDS: {} + }); + + yuu.Overlay = yT(yuu.Scene, { + constructor: function (element, animation, dismissKeys) { + yuu.Scene.call(this); + this.dismissKeys = dismissKeys + || (element.getAttribute("data-yuu-dismiss-key") || "").split(" "); + this.animation = animation + || element.getAttribute("data-yuu-animation") + || "yuu-from-top"; + this.element = element; + this.className = element.className; + this._keydown = function (event) { + var name = yuu.keyEventName(event); + if (this.inputs.keydown.call(this, name)) + yuu.stopPropagation(event); + }.bind(this); + }, + + inputs: { + back: function () { this.dismiss(); return true; }, + keydown: function (key) { + if (yf.contains(this.dismissKeys, key)) + this.dismiss(); + return true; + }, + touch: function () { this.dismiss(); return true; }, + mousedown: function () { this.dismiss(); return true; }, + }, + + init: function (director) { + var element = this.element; + var className = this.className; + var elements = element.querySelectorAll("[data-yuu-command]"); + + yf.each(function (element) { + var command = element.getAttribute("data-yuu-command"); + switch (element.tagName.toLowerCase()) { + case "input": + switch (element.type.toLowerCase()) { + case "range": + element.value = director.execute(command); + break; + case "checkbox": + var res = !!director.execute(command); + element.checked = res; + break; + } + break; + } + }, elements); + + yf.each(function (a) { + a.onclick = function (event) { + yuu.openURL(this.href); + yuu.stopPropagation(event, true); + }; + }, element.querySelectorAll("a[href]:not([yuu-href-internal])")); + + this._director = director; + + element.className = className + " " + this.animation; + element.style.display = "block"; + element.tabIndex = 0; + element.focus(); + element.addEventListener("keydown", this._keydown); + + yuu.afterAnimationFrame(function () { + element.className = className; + }); + }, + + dismiss: yuu.cmd(function () { + var element = this.element; + var className = this.className; + var director = this._director; + var scene = this; + element.className = className + " " + this.animation; + element.addEventListener("transitionend", function _ () { + element.removeEventListener("transitionend", _); + director.removeScene(scene); + }); + }, "", "dismiss this overlay"), + + done: function () { + this.element.style.display = "none"; + this.element.tabIndex = -1; + this.element.className = this.className; + this.element.removeEventListener("keydown", this._keydown); + this._director = null; + yuu.canvas.focus(); + }, + + KEYBINDS: { + "escape": "dismiss" + } + }); + + yuu.registerInitHook(function () { + var elements = document.querySelectorAll("[data-yuu-command]"); + + function handleElement (event) { + /*jshint validthis:true */ + /* `this` comes from being a DOM element event handler. */ + var command = this.getAttribute("data-yuu-command"); + switch (this.tagName.toLowerCase()) { + case "input": + switch (this.type.toLowerCase()) { + case "range": + command += " " + this.value; + break; + case "checkbox": + command += " " + (this.checked ? "1" : "0"); + break; + } + break; + } + yuu.director.execute(command); + yuu.stopPropagation(event); + } + + yf.each(function (element) { + switch (element.tagName.toLowerCase()) { + case "input": + switch (element.type.toLowerCase()) { + case "range": + element.oninput = handleElement; + element.onchange = handleElement; + break; + case "checkbox": + element.onchange = handleElement; + break; + } + break; + case "div": + case "span": + element.onclick = handleElement; + element.onkeydown = function (event) { + var name = yuu.keyEventName(event); + if (name === "space" || name === "return") + handleElement.call(this, event); + }; + break; + default: + element.onclick = handleElement; + break; + } + }, elements); + + yuu.defaultKeybinds.bind("control+`", "showDevTools"); + yuu.defaultKeybinds.bind("f11", "++fullscreen"); + yuu.defaultKeybinds.bind("f12", "screenshot"); + yuu.defaultKeybinds.bind( + "control+s", "++mute && toast \uf026 1 mute || toast \uf028 1 mute"); + + var director = yuu.director = new yuu.Director(); + /** The standard director */ + + yuu.registerInitHook(function () { + return yuu.ready(director.scenes); + }); + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/gfx.js b/src/yuu/gfx.js new file mode 100644 index 0000000..2c3088e --- /dev/null +++ b/src/yuu/gfx.js @@ -0,0 +1,665 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + var gl; + var canvas; + + var dpr = yuu.DPR = this.devicePixelRatio || 1; + + yT.defineProperty(Int8Array.prototype, "GL_TYPE", 0x1400); + yT.defineProperty(Uint8Array.prototype, "GL_TYPE", 0x1401); + yT.defineProperty(Int16Array.prototype, "GL_TYPE", 0x1402); + yT.defineProperty(Uint16Array.prototype, "GL_TYPE", 0x1403); + yT.defineProperty(Int32Array.prototype, "GL_TYPE", 0x1404); + yT.defineProperty(Uint32Array.prototype, "GL_TYPE", 0x1405); + yT.defineProperty(Float32Array.prototype, "GL_TYPE", 0x1406); + /** Patch the WebGL type onto arrays for data-driven access later + + Values from https://www.khronos.org/registry/webgl/specs/1.0/. + + See also notes in pre on Safari's typed array problems. + */ + + yuu.uniform = function (location, value) { + /** Set a uniform in the active program + + The type of the uniform is automatically determined from + the value: + + * Typed integer arrays of length 1-4 call uniform[1-4]iv + * Other sequences of length 1-4 call uniform[1-4]fv + * Sequences of length 9 or 16 call uniformMatrix[3-4]fv + * Non-sequences call uniform1fv (even if the parameter + is a valid integer) + * Sequences of other lengths throw a TypeError + + It is not possible to call uniformMatrix2fv via this + function. + */ + switch (value.constructor) { + case Int8Array: + case Uint8Array: + case Int16Array: + case Uint16Array: + case Int32Array: + case Uint32Array: + switch (value.length) { + case 1: return gl.uniform1iv(location, value); + case 2: return gl.uniform2iv(location, value); + case 3: return gl.uniform3iv(location, value); + case 4: return gl.uniform4iv(location, value); + default: throw new TypeError("unexpected array length"); + } + break; + default: + switch (value.length) { + case 1: return gl.uniform1fv(location, value); + case 2: return gl.uniform2fv(location, value); + case 3: return gl.uniform3fv(location, value); + case 4: return gl.uniform4fv(location, value); + case 9: return gl.uniformMatrix3fv(location, false, value); + case 16: return gl.uniformMatrix4fv(location, false, value); + case undefined: return gl.uniform1f(location, value); + default: throw new TypeError("unexpected array length"); + } + } + }; + + function isShaderSource (src) { + return src.indexOf("\n") >= 0 || yf.last(src.trim()) === ";"; + } + + var FRAGMENT_SHADER = 0x8B30; + var VERTEX_SHADER = 0x8B31; + var EXTS = {}; + EXTS[FRAGMENT_SHADER] = "frag"; + EXTS[VERTEX_SHADER] = "vert"; + + function compile (type, srcs) { + function getSource (src) { + return isShaderSource(src) + ? Promise.resolve(src) + : yuu.GET(yuu.resourcePath(src, "shaders", EXTS[type])); + } + return Promise.all(yf.map(getSource, srcs)) + .then(function (srcs) { + var src = srcs.join("\n"); + var shader = gl.createShader(type); + gl.shaderSource(shader, src); + gl.compileShader(shader); + if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { + var log = gl.getShaderInfoLog(shader); + throw new Error( + "Shader compile error:\n\n" + src + "\n\n" + log); + } + return shader; + }); + } + + yuu.ShaderProgram = yT({ + constructor: function (vs, fs) { + /** A linked program of vertex and fragment shaders + + vs and fs are arrays of vertex and fragment shader source + code or URLs. + */ + fs = fs || ["yuu/@default"]; + vs = vs || ["yuu/@default"]; + var id = this.id = gl.createProgram(); + var attribs = this.attribs = {}; + var uniforms = this.uniforms = {}; + this.ready = Promise.all([compile(VERTEX_SHADER, vs), + compile(FRAGMENT_SHADER, fs)]) + .then(function (shaders) { + yf.each(gl.attachShader.bind(gl, id), shaders); + gl.linkProgram(id); + if (!gl.getProgramParameter(id, gl.LINK_STATUS)) + throw new Error("Shader link error: " + + gl.getProgramInfoLog(id)); + return id; + }).catch(function (exc) { + yuu.showError(exc); + this.id = yuu.ShaderProgram.DEFAULT.id; + this.attribs = yuu.ShaderProgram.DEFAULT.attribs; + this.uniforms = yuu.ShaderProgram.DEFAULT.uniforms; + throw exc; + }.bind(this)).then(function (id) { + this.id = id; + yf.irange(function (i) { + var name = gl.getActiveAttrib(id, i).name; + attribs[name] = gl.getAttribLocation(id, name); + }, gl.getProgramParameter(id, gl.ACTIVE_ATTRIBUTES)); + yf.irange(function (i) { + var name = gl.getActiveUniform(id, i).name; + uniforms[name] = gl.getUniformLocation(id, name); + }, gl.getProgramParameter(id, gl.ACTIVE_UNIFORMS)); + return this; + }.bind(this)); + }, + + setUniforms: function () { + /** Set the values of program uniforms + + The arguments are any number of objects mapping + uniform names to values (floats, vec3s, etc.). + */ + for (var i = 0; i < arguments.length; ++i) + for (var name in arguments[i]) + yuu.uniform(this.uniforms[name], arguments[i][name]); + }, + + setAttribPointers: function (buffer) { + /** Bind the contents of a vertex buffer to attributes + + `buffer` is (or is like) a yuu.VertexBuffer instance. + */ + for (var name in this.attribs) + gl.vertexAttribPointer( + this.attribs[name], + buffer.spec.attribs[name].elements, + buffer.spec.attribs[name].View.prototype.GL_TYPE, + false, 0, buffer.arrays[name].byteOffset); + } + }); + + // This function is easier to read than a giant lookup table + // ({ textureWrapS: "TEXTURE_WRAP_S", ... x100 }) but slower. + function glEnum (gl, name) { + return gl[name.replace(/([A-Z]+)/g, "_$1").toUpperCase()]; + } + + function glScopedEnum (scope, gl, name) { + var value = glEnum(gl, scope + "_" + name); + if (value === undefined) + value = glEnum(gl, name); + return value; + } + + var glTextureEnum = glScopedEnum.bind(null, "texture"); + + yuu.Texture = yuu.Caching(yT({ + constructor: function (path, overrideOptions) { + /** A 2D texture + + The texture is set to a 1x1 white texture until it is + loaded (or if loading fails). + */ + var options = {}; + yf.ipairs(function (k, v) { + options[glTextureEnum(gl, k)] = glEnum(gl, v); + }, TEXTURE_DEFAULTS); + yf.ipairs(function (k, v) { + options[glTextureEnum(gl, k)] = glEnum(gl, v); + }, overrideOptions || {}); + + if (!path) { + var data = new Uint8Array([255, 255, 255, 255]); + this.id = gl.createTexture(); + this.width = this.height = 1; + this.src = "default / fallback 1x1 white texture"; + gl.bindTexture(gl.TEXTURE_2D, this.id); + gl.texImage2D( + gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, + gl.RGBA, gl.UNSIGNED_BYTE, data); + gl.texParameteri( + gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri( + gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.bindTexture(gl.TEXTURE_2D, null); + this.ready = Promise.resolve(this); + return; + } + + path = yuu.resourcePath(path, "images", "png"); + this.id = yuu.Texture.DEFAULT.id; + this.src = path; + this.width = yuu.Texture.DEFAULT.width; + this.height = yuu.Texture.DEFAULT.height; + + this.ready = yuu.Image(path).then(function (img) { + var id = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, id); + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + for (var opt in options) + gl.texParameteri(gl.TEXTURE_2D, opt, options[opt]); + gl.texImage2D( + gl.TEXTURE_2D, 0, gl.RGBA, + gl.RGBA, gl.UNSIGNED_BYTE, img); + gl.bindTexture(gl.TEXTURE_2D, null); + this.id = id; + this.width = img.width; + this.height = img.height; + this.src = img.src; + return this; + }.bind(this)).catch(function (e) { + this.src = "Error loading " + path + ": " + e; + yuu.log("errors", this.src); + gl.bindTexture(gl.TEXTURE_2D, null); + throw e; + }.bind(this)); + } + })); + + var TEXTURE_DEFAULTS = yuu.Texture.DEFAULTS = { + magFilter: "linear", + minFilter: "linear", + wrapS: "clampToEdge", + wrapT: "clampToEdge" + }; + + yuu.Material = yuu.Caching(yT({ + constructor: function (texture, program, uniforms) { + /** A material is a combination of a texture and shader program */ + if (yf.isString(texture)) + texture = new yuu.Texture(texture); + this.texture = texture || yuu.Texture.DEFAULT; + this.program = program || yuu.ShaderProgram.DEFAULT; + this.ready = yuu.ready([this.texture, this.program], this); + this.uniforms = uniforms || {}; + }, + + enable: function (uniforms) { + /** Enable this material and its default parameters */ + gl.bindTexture(gl.TEXTURE_2D, this.texture.id); + gl.useProgram(this.program.id); + for (var attrib in this.program.attribs) + gl.enableVertexAttribArray(this.program.attribs[attrib]); + this.program.setUniforms(this.uniforms, uniforms); + }, + + disable: function () { + /** Disable this material */ + gl.bindTexture(gl.TEXTURE_2D, null); + gl.useProgram(null); + for (var attrib in this.program.attribs) + gl.disableVertexAttribArray(this.program.attribs[attrib]); + } + })); + + yuu.VertexAttribSpec = function (spec) { + /** Ordering and types for vertex buffer layout + + Interleaved vertices (e.g. VTCVTCVTC) are not currently + supported, as ArrayBufferViews are not able to manage a buffer + with this kind of layout. + */ + var byteOffset = 0; + this.attribs = {}; + spec.forEach(function (a) { + var name = a.name; + var elements = a.elements; + var View = a.View || Float32Array; + this.attribs[name] = { elements: elements, + byteOffset: byteOffset, + View: View }; + byteOffset += elements * View.BYTES_PER_ELEMENT; + }, this); + this.bytesPerVertex = byteOffset; + }; + + yuu.V3T2C4_F = new yuu.VertexAttribSpec([ + /** vec3 position; vec2 texCoord; vec4 color; */ + { name: "position", elements: 3 }, + { name: "texCoord", elements: 2 }, + { name: "color", elements: 4 } + ]); + + yuu.IndexBuffer = yT({ + constructor: function (maxIndex, length) { + this._capacity = -1; + this._maxIndex = maxIndex; + this.buffer = null; + this.type = null; + this.length = length; + this._glBuffer = gl.createBuffer(); + this.dirty = true; + }, + + bindBuffer: function () { + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._glBuffer); + if (this.dirty) { + this.dirty = false; + gl.bufferData( + gl.ELEMENT_ARRAY_BUFFER, this.buffer, gl.DYNAMIC_DRAW); + } + }, + + GL_TYPE: { alias: "buffer.GL_TYPE" }, + + maxIndex: { + get: function () { return this._maxIndex; }, + set: function (maxIndex) { + var Array = yuu.IndexBuffer.Array(maxIndex); + if (maxIndex > this._maxIndex + && Array !== this.buffer.constructor) { + var buffer = new Array(this._capacity); + if (this.buffer) + buffer.set(this.buffer); + this.buffer = buffer; + this.dirty = true; + } + this._maxIndex = maxIndex; + } + }, + + length: { + get: function () { return this._length; }, + set: function (count) { + if (count > this._capacity) { + var Array = yuu.IndexBuffer.Array(this._maxIndex); + var buffer = new Array(count); + if (this.buffer) + buffer.set(this.buffer); + this.buffer = buffer; + this._capacity = count; + this.dirty = true; + } + this._length = count; + } + } + }); + + yuu.IndexBuffer.Array = function (maxIndex) { + if (maxIndex < 0 || maxIndex >= (256 * 256 * 256 * 256)) + throw new Error("invalid maxIndex index: " + maxIndex); + else if (maxIndex < (1 << 8)) + return Uint8Array; + else if (maxIndex < (1 << 16)) + return Uint16Array; + else + return Uint32Array; + }; + + yuu.VertexBuffer = yT({ + constructor: function (spec, vertexCount) { + /** A buffer with a specified vertex format and vertex count + + The individual vertex attribute array views from the + attribute specification are available via the .arrays + property, e.g. v.arrays.position. The underlying + buffer is available as v.buffer. + + The vertex count may be changed after creation and the + buffer size and views will be adjusted. If you've + grown the buffer, you will need to refill all its + data. Shrinking it will truncate it. + */ + this.spec = spec; + this._vertexCapacity = -1; + this.buffer = null; + this.arrays = {}; + this.vertexCount = vertexCount; + this._glBuffer = gl.createBuffer(); + this.dirty = true; + }, + + bindBuffer: function () { + gl.bindBuffer(gl.ARRAY_BUFFER, this._glBuffer); + if (this.dirty) { + this.dirty = false; + gl.bufferData(gl.ARRAY_BUFFER, this.buffer, gl.DYNAMIC_DRAW); + } + }, + + subdata: function (begin, length) { + return new yuu.VertexBuffer.SubData(this, begin, begin + length); + }, + + vertexCount: { + get: function () { return this._vertexCount; }, + set: function (count) { + if (count > this._vertexCapacity) { + var buffer = new ArrayBuffer( + this.spec.bytesPerVertex * count); + var arrays = {}; + yf.ipairs.call(this, function (name, attrib) { + arrays[name] = new attrib.View( + buffer, attrib.byteOffset * count, + attrib.elements * count); + if (this.arrays[name]) + arrays[name].set(this.arrays[name]); + }, this.spec.attribs); + this.buffer = buffer; + this.arrays = arrays; + this._vertexCapacity = count; + this.dirty = true; + } + this._vertexCount = count; + } + } + }); + + yuu.VertexBuffer.SubData = yT({ + constructor: function (parent, begin, end) { + var arrays = this.arrays = {}; + this._parent = parent; + this.spec = parent.spec; + this.buffer = parent.buffer; + yT.defineProperty(this, "vertexCount", end - begin); + for (var attrib in parent.arrays) { + var s = parent.spec.attribs[attrib].elements; + arrays[attrib] = parent.arrays[attrib].subarray( + begin * s, end * s); + } + }, + + dirty: { alias: "_parent.dirty" } + }); + + var rgbToHsl = yuu.rgbToHsl = yf.argcd( + /** Convert RBG [0, 1] to HSL [0, 1]. */ + function (rgb) { return rgbToHsl.apply(null, rgb); }, + function (r, g, b, a) { + var hsl = rgbToHsl(r, g, b); + hsl[3] = a; + return hsl; + }, + function (r, g, b) { + var max = Math.max(r, g, b); + var min = Math.min(r, g, b); + var h, s, l = (max + min) / 2; + + if (max === min) { + h = s = 0; + } else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + + return [h, s, l]; + } + ); + + var hslToRgb = yuu.hslToRgb = yf.argcd( + /** Convert HSL [0, 1] to RGB [0, 1]. */ + function (hsl) { return hslToRgb.apply(null, hsl); }, + function (h, s, l, a) { + var rgb = hslToRgb(h, s, l); + rgb[3] = a; + return rgb; + }, + function (h, s, l) { + var r, g, b; + + function hToC (p, q, t) { + if (t < 0) + t += 1; + if (t > 1) + t -= 1; + if (t < 1 / 6) + return p + (q - p) * 6 * t; + else if (t < 1 / 2) + return q; + else if (t < 2 / 3) + return p + (q - p) * (2/3 - t) * 6; + else + return p; + } + + if (s === 0) { + r = g = b = l; + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hToC(p, q, h + 1 / 3); + g = hToC(p, q, h); + b = hToC(p, q, h - 1 / 3); + } + + return [r, g, b]; + } + ); + + var deviceFromCanvas = yuu.deviceFromCanvas = yf.argcd( + /** Convert a point from client to normalized device space + + Normalized device space ranges from [-1, -1] at the + bottom-left of the viewport to [1, 1] at the top-right. + (This is the definition of the space, _not_ bounds on the + return value, as events can happen outside the viewport or + even outside the canvas.) + */ + function (p) { + return deviceFromCanvas(p.x || p.pageX || p[0] || 0, + p.y || p.pageY || p[1] || 0); + }, + function (x, y) { + x -= canvas.offsetLeft; + y -= canvas.offsetTop; + x /= canvas.clientWidth; + y /= canvas.clientHeight; + // xy is now in [0, 1] page space. + + x *= canvas.width; + y *= canvas.height; + // xy now in canvas buffer space. + + var vp = gl.getParameter(gl.VIEWPORT); + var hvpw = vp[2] / 2; + var hvph = vp[3] / 2; + x = (x - vp[0] - hvpw) / hvpw; + y = (y - vp[1] - hvph) / -hvph; + // xy now in normalized device space. + + return { + x: x, 0: x, + y: y, 1: y, + inside: Math.abs(x) <= 1 && Math.abs(y) <= 1 + }; + } + ); + + yuu.viewport = new yuu.AABB(); + + function onresize () { + var resize = canvas.getAttribute("data-yuu-resize") !== null; + var width = +canvas.getAttribute("data-yuu-width"); + var height = +canvas.getAttribute("data-yuu-height"); + + if (resize) { + canvas.width = canvas.clientWidth * dpr; + canvas.height = canvas.clientHeight * dpr; + } + + var vw = canvas.width; + var vh = canvas.height; + if (width && height) { + var aspectRatio = width / height; + if (vw / vh > aspectRatio) + vw = vh * aspectRatio; + else + vh = vw / aspectRatio; + } + var vx = (canvas.width - vw) / 2; + var vy = (canvas.height - vh) / 2; + gl.viewport(vx, vy, vw, vh); + yuu.viewport = new yuu.AABB(vx, vy, vx + vw / dpr, vy + vh / dpr); + } + + yuu.afterAnimationFrame = function (f) { + /* DOM class modifications intended to trigger transitions + must be delayed for at least one frame after the element is + created, i.e. after it has gone through at least one full + repaint. + */ + window.requestAnimationFrame(function () { + setTimeout(f, 0); + }); + }; + + yuu.registerInitHook(function (options) { + var bgColor = options.backgroundColor || [0.0, 0.0, 0.0, 0.0]; + + canvas = this.canvas = document.getElementById("yuu-canvas"); + var glOptions = { + alpha: options.hasOwnProperty("alpha") + ? options.alpha : bgColor[3] !== 1.0, + antialias: options.hasOwnProperty("antialias") + ? options.antialias : true + }; + if (!window.HTMLCanvasElement) + throw new Error(" isn't supported."); + gl = this.gl = canvas.getContext("webgl", glOptions) + || canvas.getContext("experimental-webgl", glOptions); + if (!gl) + throw new Error("WebGL isn't supported."); + + canvas.focus(); + + window.addEventListener('resize', onresize); + onresize(); + + this.ShaderProgram.DEFAULT = new this.ShaderProgram(); + this.Texture.DEFAULT = new this.Texture(); + this.Material.DEFAULT = new this.Material(); + + gl.clearColor.apply(gl, bgColor); + gl.disable(gl.DEPTH_TEST); + gl.clear(gl.COLOR_BUFFER_BIT); + gl.enable(gl.BLEND); + gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD); + gl.blendFuncSeparate(gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE); + }); + + var gui = yuu.require("nw.gui"); + yT.defineProperty(yuu, "fullscreen", { + get: function () { + return gui + ? gui.Window.get().isFullscreen + : !!(document.fullscreenElement + || document.mozFullScreenElement); + }, + set: function (v) { + if (gui) + gui.Window.get().isFullscreen = !!v; + else if (v) + document.body.requestFullscreen(); + else + document.exitFullscreen(); + } + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/input.js b/src/yuu/input.js new file mode 100644 index 0000000..ba58faf --- /dev/null +++ b/src/yuu/input.js @@ -0,0 +1,268 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + + yuu.KEY_NAMES = { + 32: "space", + 13: "return", + 16: "shift", + 18: "alt", + 17: "control", + + 37: "left", + 38: "up", + 39: "right", + 40: "down", + 9: "tab", + 27: "escape", + 8: "backspace", + 191: "slash", + 192: "`", + }; + + // Fill in the key name tables. + for (var i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); ++i) + yuu.KEY_NAMES[i] = String.fromCharCode(i).toLowerCase(); + for (i = "0".charCodeAt(0); i <= "9".charCodeAt(0); ++i) + yuu.KEY_NAMES[i] = String.fromCharCode(i); + for (i = 1; i <= 12; ++i) + yuu.KEY_NAMES[111 + i] = "f" + i; + + function splitKeys (keystring) { + return keystring.toLowerCase().split("+").sort(); + } + + var KeyBind = yT({ + constructor: function (keystring, command) { + /** An individual key to command binding. + + The key string is e.g. "a", "control+f", "left+alt+z". + "f+control" is equivalent to "control+f", and binding one + in a set will override the other. */ + this.keystring = keystring; + this.command = command; + this.keys = splitKeys(keystring); + }, + + uses: function (name) { + /** True if the given key name is relevant to this binding. */ + return yf.contains(this.keys, name.toLowerCase()); + }, + + on: function (pressed) { + /** True if all keys in this binding are pressed. */ + return yf.every.call(pressed, yf.getter, this.keys); + } + }); + + function longerBind (a, b) { + return a.keys.length > b.keys.length ? a : b; + } + + function longestBind (binds) { + return yf.foldl(longerBind, binds); + } + + function isActivate (bind) { + return bind.command[0] === '+' && bind.command[1] !== '+'; + } + + function anticommand (bind) { + return "-" + bind.command.substring(1); + } + + yuu.KeyBindSet = yT({ + constructor: function (binds) { + /** A group of key bindings. + + A set may only have one bind per key combination + (regardless of order) at a time. Binding already-bound + keys to a different command will overwrite, not duplicate, + that binding. + */ + this.binds = []; + yf.ipairs.call(this, this.bind, binds || {}); + }, + + bind: function (keystring, command) { + /** Bind keys to a command in this set. */ + var bind = new KeyBind(keystring, command); + this.binds = this.binds.filter(function (b) { + return !yf.seqEqual(b.keys, bind.keys); + }).concat(bind); + }, + + unbind: function (keystring) { + /** Unbind keys from this set. */ + var keys = splitKeys(keystring); + this.binds = this.binds.filter(function (b) { + return !yf.seqEqual(b.keys, keys); + }); + } + }); + + yuu.keyEventName = function (event) { + return yuu.keyCodeName(event.keyCode, event.key || event.keyIdentifier); + }; + + yuu.keyCodeName = function (code, defaultName) { + if (defaultName) + defaultName = defaultName.toLowerCase(); + if (defaultName === "unidentified") + defaultName = null; + var name = yuu.KEY_NAMES[code] || defaultName; + if (!name) + name = "key:" + code; + return name; + }; + + yuu.InputState = yT({ + constructor: function (bindsets) { + this._bindsets = yf.slice(bindsets || [yuu.defaultKeybinds]); + this.pressed = {}; + /** The current state of each key; 0 if not pressed, + the time it was pressed if it is pressed. */ + }, + + push: function (bindset) { + /** Add a key bind set to the handler stack. */ + this._bindsets = this._bindsets.concat(bindset); + }, + + remove: function (bindset) { + /** Remove a key bind set from the handler stack. */ + this._bindsets = yf.without(this._bindsets, bindset); + }, + + insertBefore: function (bindset, before) { + this._bindsets = yf.insertBefore( + this._bindsets.slice(), bindset, before); + }, + + _triggeredBinds: function (name) { + var pressed = this.pressed; + function triggered (bind) { + return bind.uses(name) && bind.on(pressed); + } + var binds = []; + yf.each(function (bindset) { + binds.push.apply(binds, yf.filter(triggered, bindset.binds)); + }, this._bindsets); + return binds; + }, + + _down: function (name) { + /** Mark the input as down, return an array of commands. + + This array is always of length 1 for down/change events. + + Returns null if no binds were triggered, which is slightly + different than binds being triggered but no commands are + to be executed. + */ + var pressed = this.pressed[name]; + this.pressed[name] = Date.now(); + var bind = longestBind(this._triggeredBinds(name)); + return bind ? pressed ? [] : [bind.command] : null; + }, + + _up: function (name) { + /** Mark the input as down, return an array of commands. + + Only binds for commands with the special + form are + returned on release, and the + is converted to a -. + + Returns null if no binds were triggered, which is slightly + different than binds being triggered but no commands are + to be executed. + */ + if (!this.pressed[name]) + return null; + var cmds = yf.map(anticommand, yf.filter( + isActivate, this._triggeredBinds(name))); + this.pressed[name] = 0; + return cmds.length ? cmds : null; + }, + + change: function (name) { + /** Mark the input as changed, return an array of commands. + + `change` is for inputs that do not have meaningful + "down" or "up" states, like moving a mouse. Instead, + it fires when the input's state changes - e.g. when + the x and y position change. + + The `pressed` table remains unmodified as a result of + `change` inputs. Like `down`, `change` returns only the + first match it finds. + */ + this.pressed[name] = Date.now(); + var bind = longestBind(this._triggeredBinds(name)); + this.pressed[name] = 0; + return bind ? [bind.command] : null; + }, + + keydown: { proxy: "_down" }, + keyup: { proxy: "_up" }, + + gamepadbuttondown: function (gamepad, button) { + return this._down("gamepad" + gamepad.index + "button" + button) + || this._down("gamepadbutton" + button); + }, + + gamepadbuttonup: function (gamepad, button) { + return this._up("gamepad" + gamepad.index + "button" + button) + || this._up("gamepadbutton" + button); + }, + + mousemove: function () { + return this.change("mousemove"); + }, + + mousedown: function (button) { + return this._down("mouse" + button); + }, + + mouseup: function (button) { + return this._up("mouse" + button); + }, + + reset: function () { + this.pressed = {}; + } + }); + + yuu.stopPropagation = function stopPropagation (event, preventDefault) { + event.stopPropagation(); + if (preventDefault) + event.preventDefault(); + if (event.stopImmediatePropagation) + event.stopImmediatePropagation(); + if (event.gesture && event.gesture !== event) + stopPropagation(event.gesture, preventDefault); + }; + + yuu.registerInitHook(function () { + yuu.defaultCommands.bind = yuu.cmd(function (key, command) { + yuu.defaultKeybinds.bind(key, command); + }, " ", "bind a key to a command"); + + yuu.defaultCommands.unbind = yuu.cmd(function (key) { + yuu.defaultKeybinds.unbind(key); + }, "", "unbind a key"); + + yuu.defaultKeybinds = new yuu.KeyBindSet(); + /** The default / debugging bind set */ + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/pre.js b/src/yuu/pre.js new file mode 100644 index 0000000..9fd7f5c --- /dev/null +++ b/src/yuu/pre.js @@ -0,0 +1,338 @@ +/* This is free and unencumbered software released into the public + domain. To the extent possible under law, the author of this file + waives all copyright and related or neighboring rights to it. +*/ + +(function () { + "use strict"; + + /** Polyfills and cross-browser fixes */ + + if (!Math.sign) + Math.sign = function (a) { return a && (a > 0) - (a < 0); }; + + if (!String.prototype.repeat) + Object.defineProperty(String.prototype, "repeat", { + value: function (count) { + var string = this.toString(); + var result = ''; + var n = count | 0; + while (n) { + if (n % 2 === 1) + result += string; + if (n > 1) + string += string; + n >>= 1; + } + return result; + } + }); + + if (!String.prototype.startsWith) + Object.defineProperty(String.prototype, "startsWith", { + value: function (sub) { + return this.lastIndexOf(sub, 0) !== -1; + } + }); + + if (!String.prototype.endsWith) + Object.defineProperty(String.prototype, "endsWith", { + value: function (sub) { + return this.indexOf(sub, this.length - sub.length) !== -1; + } + }); + + function toObject (o) { + if (o === null || o === undefined) + throw new TypeError("invalid ToObject cast"); + return Object(o); + } + + if (!Object.assign) + Object.defineProperty(Object, "assign", { + value: function (target) { + target = toObject(target); + for (var i = 1; i < arguments.length; ++i) { + var source = toObject(arguments[i]); + var keys = Object.keys(source); + for (var j = 0; j < keys.length; ++j) + target[keys[j]] = source[keys[j]]; + } + } + }); + + if (!Array.prototype.fill) + Object.defineProperty(Array.prototype, "fill", { + value: function (value) { + var beg = arguments.length > 1 ? +arguments[1] : 0; + var end = arguments.length > 2 ? +arguments[2] : this.length; + if (beg < 0) beg += this.length; + if (end < 0) end += this.length; + for (var i = beg; i < end; ++i) + this[i] = value; + return this; + } + }); + + if (typeof window !== "undefined") { + window.requestAnimationFrame = ( + window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame); + window.cancelAnimationFrame = ( + window.cancelAnimationFrame + || window.mozCancelAnimationFrame + || window.webkitCancelAnimationFrame); + + if (!window.AudioContext) + window.AudioContext = ( + window.webkitAudioContext + || window.mozAudioContext); + + if (window.AudioContext && !window.AudioContext.prototype.createGain) + window.AudioContext.prototype.createGain = + window.AudioContext.prototype.createGainNode; + + /** Canonicalize fullscreen function names if available. + + Based on http://fullscreen.spec.whatwg.org/, June 7th 2013. + */ + + if (!Element.prototype.requestFullscreen) + Element.prototype.requestFullscreen = ( + Element.prototype.requestFullScreen + || Element.prototype.webkitRequestFullscreen + || Element.prototype.webkitRequestFullScreen + || Element.prototype.mozRequestFullScreen + || function () {}); + if (!document.exitFullscreen) + document.exitFullscreen = ( + document.webkitExitFullscreen + || document.webkitCancelFullScreen + || document.mozCancelFullScreen + || function () {}); + if (!document.hasOwnProperty("fullscreenEnabled")) + Object.defineProperty(document, "fullscreenEnabled", { + enumerable: true, + get: function () { + return (this.webkitFullscreenEnabled + || this.mozFullScreenEnabled + || false); + } + }); + if (!document.hasOwnProperty("fullscreenElement")) + Object.defineProperty(document, "fullscreenElement", { + enumerable: true, + get: function () { + return (this.webkitFullscreenElement + || this.webkitCurrentFullScreenElement + || this.mozFullScreenEleement + || null); + } + }); + } + + // Check for Promise.all as Chrome 30 shipped an implementation + // without it and with some other quirks and we don't want to use + // that one. + if (typeof Promise === "undefined" || !Promise.all) (function () { + /* Polyfill based heavily on Christoph Burgmer's ayepromise + + https://github.com/cburgmer/ayepromise/blob/master/ayepromise.js + */ + /* Wrap an arbitrary number of functions and allow only one of + them to be executed and only once */ + function once () { + var wasCalled = false; + + return function (wrappedFunction) { + return function () { + if (wasCalled) { + return; + } + wasCalled = true; + wrappedFunction.apply(null, arguments); + }; + }; + } + + function getThenableIfExists (obj) { + // Make sure we only access the accessor once as required by the spec + var then = obj && obj.then; + + if (typeof obj === "object" && typeof then === "function") + return then.bind(obj); + } + + function aThenHandler (onFulfilled, onRejected) { + var deferred = defer(); + + function doHandlerCall (func, value) { + setTimeout(function () { + var returnValue; + try { + returnValue = func(value); + } catch (e) { + deferred.reject(e); + return; + } + + if (returnValue === deferred.promise) { + deferred.reject(new TypeError()); + } else { + deferred.resolve(returnValue); + } + }, 0); + } + + return { + promise: deferred.promise, + callFulfilled: function (value) { + if (onFulfilled && onFulfilled.call) { + doHandlerCall(onFulfilled, value); + } else { + deferred.resolve(value); + } + }, + callRejected: function (value) { + if (onRejected && onRejected.call) { + doHandlerCall(onRejected, value); + } else { + deferred.reject(value); + } + } + }; + } + + function defer () { + // States + var PENDING = 0, + FULFILLED = 1, + REJECTED = 2; + + var state = PENDING, + outcome, + thenHandlers = []; + + function doFulfill (value) { + state = FULFILLED; + outcome = value; + + thenHandlers.forEach(function (then) { + then.callFulfilled(outcome); + }); + thenHandlers = null; + } + + function doReject (error) { + state = REJECTED; + outcome = error; + + thenHandlers.forEach(function (then) { + then.callRejected(outcome); + }); + thenHandlers = null; + } + + function registerThenHandler (onFulfilled, onRejected) { + var thenHandler = aThenHandler(onFulfilled, onRejected); + + if (state === FULFILLED) { + thenHandler.callFulfilled(outcome); + } else if (state === REJECTED) { + thenHandler.callRejected(outcome); + } else { + thenHandlers.push(thenHandler); + } + + return thenHandler.promise; + } + + function safelyResolveThenable (thenable) { + // Either fulfill, reject or reject with error + var onceWrapper = once(); + try { + thenable( + onceWrapper(transparentlyResolveThenablesAndFulfill), + onceWrapper(doReject) + ); + } catch (e) { + onceWrapper(doReject)(e); + } + } + + function transparentlyResolveThenablesAndFulfill (value) { + var thenable; + + try { + thenable = getThenableIfExists(value); + } catch (e) { + doReject(e); + return; + } + + if (thenable) { + safelyResolveThenable(thenable); + } else { + doFulfill(value); + } + } + + var onceWrapper = once(); + return { + resolve: onceWrapper(transparentlyResolveThenablesAndFulfill), + reject: onceWrapper(doReject), + promise: { + then: registerThenHandler, + "catch": function (onRejected) { + return registerThenHandler(null, onRejected); + } + } + }; + } + + function Promise (callback) { + var deferred = defer(); + try { + callback(deferred.resolve, deferred.reject); + } catch (exc) { + deferred.reject(exc); + } + return deferred.promise; + } + + Promise.resolve = function (v) { + return new Promise(function (resolve) { resolve(v); }); + }; + + Promise.reject = function (error) { + return new Promise(function (_, reject) { reject(error); }); + }; + + Promise.all = function (promises) { + return new Promise(function (resolve, reject) { + var results = []; + var remaining = promises.length; + if (remaining === 0) + return resolve([]); + + promises.forEach(function (promise, i) { + var then = getThenableIfExists(promise); + function resolve1 (value) { + results[i] = value; + if (--remaining === 0) + resolve(results); + } + if (then) { + then.call(promise, resolve1, reject); + } else { + --remaining; + results[i] = promise; + } + }); + }); + }; + + this.Promise = Promise; + }).call(this); +}).call(this); diff --git a/src/yuu/rdr.js b/src/yuu/rdr.js new file mode 100644 index 0000000..a03cbec --- /dev/null +++ b/src/yuu/rdr.js @@ -0,0 +1,426 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (yuu) { + "use strict"; + + var yT = this.yT || require("./yT"); + var yf = this.yf || require("./yf"); + + if (!yuu.C) require("./ce"); + if (!yuu.Material) require("./gfx"); + + yuu.Renderable = yT({ + constructor: function (vbuf, primitive, material, uniforms, z) { + this.vbuf = vbuf; + this.primitive = primitive || yuu.gl.TRIANGLES; + this.material = material || yuu.Material.DEFAULT; + this.uniforms = uniforms || {}; + this.z = z || 0.0; + }, + + bind: function () { + this.material.program.setUniforms(this.uniforms); + this.vbuf.bindBuffer(); + this.material.program.setAttribPointers(this.vbuf); + }, + + draw: function () { + this.bind(); + yuu.gl.drawArrays(this.primitive, 0, this.vbuf.vertexCount); + }, + + vertexCount: { alias: "vbuf.vertexCount" } + }); + + yuu.IndexedRenderable = yT(yuu.Renderable, { + constructor: function (vbuf, primitive, material, uniforms, z, ibuf) { + yuu.Renderable.call(this, vbuf, primitive, material, uniforms, z); + this.ibuf = ibuf; + }, + + bind: function () { + yuu.Renderable.prototype.bind.call(this); + this.ibuf.bindBuffer(); + }, + + draw: function () { + this.bind(); + yuu.gl.drawElements( + this.primitive, this.ibuf.length, this.ibuf.GL_TYPE, 0); + }, + + vertexCount: { + get: function () { + return this.ibuf.length; + }, + set: function (vertexCount) { + this.vbuf.vertexCount = vertexCount; + this.ibuf.maxIndex = vertexCount; + } + } + }); + + yuu.Quad = yT({ + /** A vertex view containing a 2D quadrilateral + + You probably don't want to use this directly. If you want a + simple quad, look at QuadC. + */ + constructor: function (vbuf) { + this._vbuf = vbuf; + this.anchor = "center"; + this.position = [0.0, 0.0]; + this.size = [1.0, 1.0]; + this.texBounds = [0.0, 0.0, 1.0, 1.0]; + this.color = [1.0, 1.0, 1.0, 1.0]; + }, + + size: { + get: function () { + var b = this._vbuf.arrays.position; + return [b[6] - b[0], b[4] - b[1]]; + }, + set: function(size) { + var position = this.position; + var b = this._vbuf.arrays.position; + b[0] = b[3] = b[1] = b[7] = 0; + b[6] = b[9] = size[0]; + b[4] = b[10] = size[1]; + this.position = position; + this._vbuf.dirty = true; + } + }, + + position: { + get: function () { + var b = this._vbuf.arrays.position; + return yuu.anchorPoint(this.anchor, b[0], b[1], b[6], b[4]); + }, + set: function (position) { + var size = this.size; + var b = this._vbuf.arrays.position; + var bottomLeft = yuu.bottomLeft( + this.anchor, position[0], position[1], size[0], size[1]); + b[0] = b[3] = bottomLeft[0]; + b[1] = b[7] = bottomLeft[1]; + b[6] = b[9] = bottomLeft[0] + size[0]; + b[4] = b[10] = bottomLeft[1] + size[1]; + this._vbuf.dirty = true; + } + }, + + x: { synthetic: "position[0]" }, + y: { synthetic: "position[1]" }, + + // Texture coordinate vertices: 12 +... + // 2,3 6,7 + // 0,1 4,5 + + texBounds: { + get: function() { + var b = this._vbuf.arrays.texCoord; + return [b[0], b[1], b[6], b[7]]; + }, + set: function (uv0uv1) { + var b = this._vbuf.arrays.texCoord; + b[0] = b[2] = uv0uv1[0]; + b[1] = b[5] = uv0uv1[1]; + b[6] = b[4] = uv0uv1[2]; + b[3] = b[7] = uv0uv1[3]; + this._vbuf.dirty = true; + } + }, + + // Color vertices: 20 +... + // 4,5,6,7 12,13,14,15 + // 0,1,2,3 8,9,10,11 + + color: { + get: function () { + var b = this._vbuf.arrays.color; + return [b[0], b[1], b[2], b[3]]; + }, + set: function (rgba) { + var b = this._vbuf.arrays.color; + var a = rgba[3]; + b[0] = b[4] = b[8] = b[12] = rgba[0]; + b[1] = b[5] = b[9] = b[13] = rgba[1]; + b[2] = b[6] = b[10] = b[14] = rgba[2]; + if (a !== undefined) + b[3] = b[7] = b[11] = b[15] = a; + this._vbuf.dirty = true; + } + }, + + luminance: { + get: function () { + var color = this.color; + return 0.2126 * color[0] + + 0.7152 * color[1] + + 0.0722 * color[2]; + }, + + set: function (v) { + this.color = [v, v, v]; + } + }, + + alpha: { + get: function () { return this._vbuf.arrays.color[3]; }, + set: function (a) { + var b = this._vbuf.arrays.color; + b[3] = b[7] = b[11] = b[15] = a; + this._vbuf.dirty = true; + } + } + }); + + yuu.QuadBatch = yT({ + constructor: function (capacity) { + this.vbuf = new yuu.VertexBuffer(yuu.V3T2C4_F, capacity * 4); + this.ibuf = new yuu.IndexBuffer( + this.vbuf.vertexCount, capacity * 6); + this._capacity = capacity; + this._resetAllocations(); + }, + + _vbufSlotFromQuad: function (quad) { + if (quad._vbuf.arrays.position.buffer !== this.vbuf.buffer) + throw new Error("invalid quad buffer"); + var offset = quad._vbuf.arrays.position.byteOffset; + var bytesPerQuad = ( + this.vbuf.spec.attribs.position.View.BYTES_PER_ELEMENT + * this.vbuf.spec.attribs.position.elements + * 4 /* vertices per quad */); + return offset / bytesPerQuad; + }, + + createQuad: function () { + var slot = this._freeVbufSlots[this._allocated]; + if (slot === undefined) + throw new Error("out of batch slots"); + var subdata = this.vbuf.subdata(slot * 4, 4); + var index = this._allocated++; + var n = 6 * index; + this.ibuf.buffer[n + 0] = slot * 4 + 0; + this.ibuf.buffer[n + 1] = slot * 4 + 1; + this.ibuf.buffer[n + 2] = slot * 4 + 2; + this.ibuf.buffer[n + 3] = slot * 4 + 2; + this.ibuf.buffer[n + 4] = slot * 4 + 1; + this.ibuf.buffer[n + 5] = slot * 4 + 3; + this.ibuf.length += 6; + this.ibuf.dirty = true; + this._vbufToIndex[slot] = index; + return new yuu.Quad(subdata); + }, + + disposeQuad: function (quad) { + var slot = this._vbufSlotFromQuad(quad); + var index = this._vbufToIndex[slot]; + this._allocated--; + if (index !== this._allocated) { + // Unless this was the last index, swap the last index + // into the new hole. + var n = 6 /* indices per quad */ * index; + var m = 6 /* indices per quad */ * this._allocated; + var b = this.ibuf.buffer; + var lastVbufSlot = b[m] / 4 /* vertices per quad */; + if (this._vbufToIndex[lastVbufSlot] !== this._allocated) + throw new Error("allocation index mismatch"); + b[n + 0] = b[m + 0]; + b[n + 1] = b[m + 1]; + b[n + 2] = b[m + 2]; + b[n + 3] = b[m + 3]; + b[n + 4] = b[m + 4]; + b[n + 5] = b[m + 5]; + this.ibuf.dirty = true; + this._vbufToIndex[lastVbufSlot] = index; + } + this._freeVbufSlots[this._allocated] = slot; + this.ibuf.length -= 6; + }, + + _resetAllocations: function () { + this.ibuf.length = 0; + var Array = yuu.IndexBuffer.Array(this._capacity); + this._freeVbufSlots = new Array(this._capacity); + yf.transform(yf.counter(), this._freeVbufSlots); + this._allocated = 0; + this._vbufToIndex = new Array(this._capacity); + }, + + disposeAll: function () { + this._resetAllocations(); + } + }); + + yuu.QuadC = yT(yuu.C, { + /** A 2D quadrilateral that tracks the entity's transform + + By default, the extents of this quad are [-0.5, -0.5] to + [0.5, 0.5], and its model matrix is identical to the + entity's transform, i.e. it is centered around [0, 0] in + the entity's local space, or the entity's nominal location + in world space. This can be changed by adjusting the + anchor, position, and size properties. + */ + + constructor: function (material) { + var buffer = new yuu.VertexBuffer(yuu.V3T2C4_F, 4); + this._quad = new yuu.Quad(buffer); + this._rdro = new yuu.Renderable( + buffer, yuu.gl.TRIANGLE_STRIP, material, + { model: mat4.create() }, 0.0); + }, + + TAPS: ["queueRenderables"], + + queueRenderables: function (rdros) { + mat4.copy(this._rdro.uniforms.model, + this.entity.transform.matrix); + rdros.push(this._rdro); + }, + + // TODO: yT should offer some way to specify these in two + // lists, i.e. the rdro aliases, and the quad aliases. + + material: { alias: "_rdro.material", chainable: true }, + z: { alias: "_rdro.z", chainable: true }, + uniforms: { alias: "_rdro.uniforms" }, + size: { alias: "_quad.size", chainable: true }, + position: { alias: "_quad.position", chainable: true }, + anchor: { alias: "_quad.anchor", chainable: true }, + xy: { alias: "_quad.position", chainable: true }, + texBounds: { alias: "_quad.texBounds", chainable: true }, + color: { alias: "_quad.color", chainable: true }, + alpha: { alias: "_quad.alpha", chainable: true }, + luminance: { alias: "_quad.luminance", chainable: true }, + }); + + yuu.QuadBatchC = yT(yuu.C, { + /** A 2D quadrilateral batch that tracks the entity's transform + + */ + + constructor: function (capacity, material) { + this._batch = new yuu.QuadBatch(capacity); + this._rdro = new yuu.IndexedRenderable( + this._batch.vbuf, yuu.gl.TRIANGLES, material, + { model: mat4.create() }, 0.0, this._batch.ibuf); + }, + + TAPS: ["queueRenderables"], + + queueRenderables: function (rdros) { + mat4.copy(this._rdro.uniforms.model, + this.entity.transform.matrix); + rdros.push(this._rdro); + }, + + material: { alias: "_rdro.material", chainable: true }, + z: { alias: "_rdro.z", chainable: true }, + uniforms: { alias: "_rdro.uniforms" }, + createQuad: { proxy: "_batch.createQuad" }, + disposeQuad: { proxy: "_batch.disposeQuad" }, + disposeAll: { proxy: "_batch.disposeAll" }, + }); + + function sortRenderables(a, b) { return a.z - b.z; } + + yuu.Layer = yT({ + /** List of renderables and per-layer uniforms + + These uniforms usually include the projection and view + matrices, set to a [-1, 1] orthographic projection and the + identity view by default. + */ + + // TODO: This is a bad design. Too powerful to be efficient or + // a straightforward part of Scene; not enough to abstract + // hard things like render passes. + + constructor: function () { + this.rdros = []; + this.uniforms = { + projection: mat4.ortho(mat4.create(), -1, 1, -1, 1, -1, 1), + view: mat4.create() + }; + }, + + worldFromDevice: yf.argcd( + function (p) { + var t = this.worldFromDevice(p.x || p.pageX || p[0] || 0, + p.y || p.pageY || p[1] || 0); + t.inside = p.inside; + return t; + }, + function (x, y) { + var p = { 0: x, 1: y }; + var m = mat4.mul(mat4.create(), + this.uniforms.projection, this.uniforms.view); + m = mat4.invert(m, m); + vec2.transformMat4(p, p, m); + p.x = p[0]; p.y = p[1]; + return p; + } + ), + + worldFromCanvas: yf.argcd( + function (p) { + return this.worldFromDevice(yuu.deviceFromCanvas(p)); + }, + function (x, y) { + return this.worldFromDevice(yuu.deviceFromCanvas(x, y)); + } + ), + + resize: function (x, y, w, h) { + /** Set a 2D orthographic project with an origin and size + + Arguments: + scene.resize(originX, originY, width, height) + scene.resize(width, height) // Origin at 0, 0 + scene.resize(origin, size) + scene.resize(size) // Origin at 0, 0 + */ + if (y === undefined) { + w = x[0]; h = x[1]; x = y = 0; + } else if (w === undefined) { + if (x.length === undefined) { + w = x; h = y; x = y = 0; + } else { + w = y[0]; h = y[1]; + y = x[1]; x = x[0]; + } + } + mat4.ortho(this.uniforms.projection, x, x + w, y, y + h, -1, 1); + }, + + render: function () { + /** Render all queued renderables */ + this.rdros.sort(sortRenderables); + var mat = null; + for (var j = 0; j < this.rdros.length; ++j) { + var rdro = this.rdros[j]; + if (mat !== rdro.material) { + if (mat) + mat.disable(); + mat = rdro.material; + rdro.material.enable(this.uniforms); + } + rdro.draw(); + } + }, + + clear: function () { + this.rdros.length = 0; + } + }); + +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" + ? this.yuu : (module.exports = require('./core'))); diff --git a/src/yuu/storage.js b/src/yuu/storage.js new file mode 100644 index 0000000..1ad702e --- /dev/null +++ b/src/yuu/storage.js @@ -0,0 +1,188 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (exports) { + "use strict"; + + var yT = this.yT || require('./yT'); + + var FakeStorage = exports.FakeStorage = yT({ + /** Fake, ephemeral storage roughly like Web Storage + + This is the fallback storage when permission is denied or + otherwise busted. It just stores a dictionary for as long as + the object survives. + */ + constructor: function () { + this._storage = {}; + }, + + getItem: function (key) { + return (key in this._storage) ? this._storage[key] : null; + }, + + setItem: function (key, value) { + this._storage[key] = value.toString(); + }, + + removeItem: function (key) { + delete this._storage[key]; + }, + + clear: function () { + this._storage = {}; + }, + + length: { + get: function () { return Object.keys(this._storage).length; } + }, + + key: function (n) { + // Object.keys isn't guaranteed to have a consistent order + // even when nothing changes, so normalize it by sorting. + var keys = Object.keys(this._storage).sort(); + return (n >= 0 && n < keys.length) ? keys[n] : null; + } + }); + + var PrefixedStorage = exports.PrefixedStorage = yT({ + /** Per-application storage roughly like Web Storage + + This storage prefixes all keys with a special token, so you + can run multiple applications on the same origin without + the risk of conflicting keys. + + A caveat of this approach is clear() is not atomic. + */ + + constructor: function (storage, prefix) { + this._storage = storage; + this._prefix = prefix + " -- "; + }, + + _key: function (key) { + return this._prefix + key; + }, + + _unkey: function (key) { + return key.substring(this._prefix.length); + }, + + _iskey: function (key) { + return key.startsWith(this._prefix); + }, + + _keys: function () { + var keys = []; + var key; + var i = 0; + while ((key = this._storage.key(i++)) !== null) + if (this._iskey(key)) + keys.push(this._unkey(key)); + return keys; + }, + + getItem: function (key) { + return this._storage.getItem(this._key(key)); + }, + + setItem: function (key, value) { + return this._storage.setItem(this._key(key), value); + }, + + removeItem: function (key) { + return this._storage.removeItem(this._key(key)); + }, + + clear: function () { + this._keys().forEach(this.removeItem, this); + }, + + length: { + get: function () { return this._keys().length; } + }, + + key: function (n) { + var keys = this._keys().sort(); + return (n >= 0 && n < keys.length) ? keys[n] : null; + } + }); + + var Storage = exports.Storage = yT({ + /** Higher-level access to Web Storage-esque things + + Storage lets you store and retrieve JSON-serializable + objects inside a Web Storage container. + + You can specify default values. If you retrieve an object + that hasn't been set, you get its default value. + + Storage automatically falls back to an ephemeral storage + backend if a SecurityException occurs during startup. + */ + + constructor: function (storage, defaults) { + this._storage = storage || new FakeStorage(); + this._defaults = defaults || {}; + + try { + this.setFlag('__ystorage__'); + } catch (exc) { + this._storage = new FakeStorage(); + console.error("Unable to use provided storage:", exc); + } + }, + + getObject: function (key, fallbackValue) { + var v = this._storage.getItem(key); + if (v === null) { + return (key in this._defaults) + ? this._defaults[key] + : fallbackValue; + } + try { + return JSON.parse(v); + } catch (exc) { + console.error("Malformed storage value:", key, v, exc); + return (key in this._defaults) + ? this._defaults[key] + : fallbackValue; + } + }, + + setObject: function (key, value) { + this._storage.setItem(key, JSON.stringify(value)); + }, + + removeObject: { proxy: '_storage.removeItem' }, + + getFlag: function (key) { + return !!this.getObject(key, false); + }, + + setFlag: function (key) { + return this.setObject(key, true); + }, + + clearFlag: function (key) { + return this.setObject(key, false); + }, + + clear: { proxy: '_storage.clear' } + }); + + exports.getStorage = function (prefix, defaults, backend) { + /** Create a Storage with prefixed access to localStorage. */ + prefix = prefix + || (document && + (document.documentElement.getAttribute('data-appid') + || document.title)); + backend = backend || localStorage; + return new Storage(new PrefixedStorage(backend, prefix), defaults); + }; + +}).call(typeof exports === 'undefined' ? this : exports, + typeof exports === 'undefined' ? (this.ystorage = {}) : exports); diff --git a/src/yuu/yT.js b/src/yuu/yT.js new file mode 100644 index 0000000..0c86c89 --- /dev/null +++ b/src/yuu/yT.js @@ -0,0 +1,364 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function (module) { + "use strict"; + + /** yT - yuu type creation + + yT is a function like `Object.create`, but with support for + more powerful property descriptors (referred to as _extended + property descriptors (XPDs)_). Most standard JavaScript + property descriptors are valid XPDs, but XPDs allow shortcuts + to specify common descriptor patterns. + + Equivalents for `Object.defineProperties` and + `Object.defineProperty` are also provided. + + ## Extended Property Descriptors + + Any standard descriptor that has a `get` function (called an + 'accessor descriptor') or a `value` property (called a 'data + descriptor') is also valid XPD. + + An extended descriptor that does not have either of these and + does not meet any of the other conditions below is equivalent + to a data descriptor with a `value` of itself, referred to as + a 'bare value descriptor'. For example, the following two XPDs + are equivalent: + + { x: 1 } { x: { value: 1 } } + + (This means a useless descriptor like `{}` is interpreted as a + data descriptor with value `undefined` by `Object.create` but + a bare value descriptor with value `{}` by `yT`.) + + In addition, extended descriptors have several other formats + which can be used to generate different kinds of idomatic + accessors: + + * `alias` - This property is a synonym for a different property. + Reads and writes to it will be mapped to reads and writes + to the aliased property. + { firstChild: { alias: "children[0]" } } + is equivalent to + { firstChild: { + get: function () { return this.children[0]; }, + set: function (v) { this.children[0] = v; } + } } + + * `proxy` - This property is a synonym for a method call + on a different object. + { start: { proxy: "engine.start" } } + is equivalent to + { start: { value: function () { + return this.engine.start.apply(this.engine, arguments); + } } } + + Using `alias` rather than `proxy` would result in the + wrong (non-engine) `this` argument being passed to the + `start` method. + + * `aliasSynthetic` - Aliases don't work if one of the + properties in the lookup chain is a temporary variable. + For example, aliasing `x` to `position[0]` is no good if + `position` itself has a getter like `transform.slice(12)` + because the assignment to the returned value will have + no effect. + + `aliasSynthetic` can be used to capture the temporary, + assign to it, and then assign the whole temporary back. + { x: { aliasSynthetic: "position[0]" } } + Generates the same `get` as `alias`, but `set` is + function (v) { + var t = this.position; + t[0] = v; + this.position = t; + } + + `aliasSynthetic` assumes the next-to-last value is the + temporary, e.g. in `a.b.c.d`, `a.b.c` is the temporary. + If rather e.g. `a.b` is the temporary, you can separate + the `alias` and `synthetic` parts: + { x: { alias: "a.b.c.d", synthetic: "a.b" } } + + * `swizzle` - Swizzling lets you treat separate properties + as one array property. For example if you have a color + class with individual r, g, and b properties, + { rgb: { swizzle: ["r", "g", "b"] } } + is equivalent to + { rgb: { + get: function () { return [this.r, this.g, this.b] }, + set: function (v) { + this.r = v[0]; + this.g = v[1]; + this.b = v[2]; + } + } } + + Any descriptor may also have the `chainable` property set, + which generates a chainable setter function. Chainable data + descriptors are writable by default. + { x: { value: 0, chainable: true } } + is equivalent to + { x: { value: 0, writable: true }, + setX: { value: function (v) { this.x = v; return this; } } + } + + ## Example + + An example of a simple 2D Point class using XPDs: + + var Point = yT(Object, { + constructor: function (x, y) { + this.x = x || 0; + this.y = y || 0; + }, + + 0: { alias: "x" }, + 1: { alias: "y" }, + xy: { swizzle: "xy" }, + yx: { swizzle: "yx" }, + + angle: { + chainable: true, + get: function () { + return Math.atan2(this.y, this.x); + }, + set: function (angle) { + var magnitude = this.magnitude; + this.x = Math.cos(angle) * magnitude; + this.y = Math.sin(angle) * magnitude; + } + }, + + magnitude: { + chainable: true, + get: function () { + return Math.sqrt(this.x * this.x + this.y * this.y); + }, + set: function (magnitude) { + var angle = this.angle; + this.x = Math.cos(angle) * magnitude; + this.y = Math.sin(angle) * magnitude; + } + }, + + length: 2 + }); + + var p = new Point(3, 0); + p[0] === 3; // true + p.y = 4; p[1] == 4; // true + p.magnitude = 1; // normalize + p.xy = p.yx; // transpose + + new Point().setMagnitude(m).setAngle(a); + // construct a point from an angle and magnitude in a + // single step. + */ + + /* jshint -W054 */ // Function constructors are the whole point here. + + function isFunction (o) { + /** Check if a value is a function */ + return Object.prototype.toString.call(o) === '[object Function]'; + } + + function update (dst, src) { + /** Copy every enumerable key and its value from src to dst */ + for (var k in src) + dst[k] = src[k]; + return dst; + } + + function rooted (path) { + if (typeof path === "number") + return "[" + path + "]"; + else if (path[0] !== "." && path[0] !== "[") + return "." + path; + else + return path; + } + + function chainableName (name) { + return "set" + name[0].toUpperCase() + name.substring(1); + } + + function chainableSetter (name) { + return new Function( + "value", + "this" + rooted(name) + " = value; " + "return this;"); + } + + function alias (path, readonly) { + path = rooted(path); + return readonly + ? { get: new Function("return this" + path + ";") } + : { get: new Function("return this" + path + ";"), + set: new Function("v", "return this" + path + " = v;") }; + } + + function proxy (path) { + path = rooted(path); + var prop = path.substr(0, path.lastIndexOf(".")); + return { + value: new Function( + "return this" + path + ".apply(this" + prop + ", arguments);") + }; + } + + function swizzle (props) { + props = Array.prototype.map.call(props, function (p) { + return "this" + rooted(p); + }); + var assignments = props.map(function (p, i) { + return p + " = x[" + i + "];"; + }); + return { + get: new Function("return [" + props.join(", ") + "];"), + set: new Function("x", assignments.join("\n")) + }; + } + + function aliasSynthetic (path) { + var idx = Math.max(path.lastIndexOf("."), path.lastIndexOf("[")); + return synthetic(path.substring(0, idx), path); + } + + function synthetic (synthPath, path) { + synthPath = rooted(synthPath); + path = rooted(path).substring(synthPath.length); + return { + get: new Function("return this" + synthPath + path + ";"), + set: new Function("v", + ["var t = this" + synthPath + ";", + "t" + path + " = v; ", + "this" + synthPath + " = t;", + ].join("\n")) + }; + } + + function isAccessorDescriptor (pd) { + /** Check if `pd` is a descriptor describing an accessor */ + return pd && typeof pd === "object" && isFunction(pd.get); + } + + function isDataDescriptor (pd) { + /** Check if `pd` is a descriptor describing data */ + return pd && typeof pd === "object" && ("value" in pd); + } + + function isDescriptor (pd) { + /** Check if `pd` is any kind of descriptor */ + return isDataDescriptor(pd) || isAccessorDescriptor(pd); + } + + function createDescriptors (name, xpd, pds) { + if (xpd.alias !== undefined) { + if (xpd.synthetic !== undefined) + pds[name] = update(xpd, synthetic(xpd.alias, xpd.synthetic)); + else + pds[name] = update(xpd, alias(xpd.alias, xpd.readonly)); + } else if (xpd.proxy !== undefined) { + pds[name] = update(xpd, proxy(xpd.proxy)); + } else if (xpd.swizzle !== undefined) { + pds[name] = update(xpd, swizzle(xpd.swizzle)); + } else if (xpd.aliasSynthetic !== undefined) { + pds[name] = update(xpd, aliasSynthetic(xpd.aliasSynthetic)); + } + + pds[name] = isDescriptor(xpd) ? xpd : { value: xpd }; + if (xpd.chainable) { + pds[chainableName(name)] = { value: chainableSetter(name) }; + if (isDataDescriptor(pds[name]) && !("writable" in pds[name])) + pds[name].writable = true; + } + } + + function xpdsToPds (xpds) { + var pds = {}; + Object.keys(xpds).forEach(function (k) { + createDescriptors(k, xpds[k], pds); + }); + return pds; + } + + function T (parent, xpds) { + /** Create a new class described by XPDs + + This function is similar to `Object.create` but supports + extended property descriptors as described above. + + yT(parent, map of extended descriptors) + yT(map of extended descriptors) + // The parent is assumed to be Object + + This returns a _function_ which acts as a constructor for + the provided type. If there is a property descriptor named + `constructor` it is returned; otherwise a new function + that calls the parent's. + + `parent` may be either the parent constructor or a + prototype. + */ + if (!xpds) { + xpds = parent; + parent = Object; + } + parent = isFunction(parent) && parent.prototype || parent; + var pds = xpdsToPds(xpds); + var ctor = pds.constructor && pds.constructor.value; + if (!ctor || ctor === {}.constructor) { + ctor = parent + ? function () { parent.constructor.apply(this, arguments); } + : function () { }; + pds.constructor = { value: ctor }; + } + ctor.prototype = Object.create(parent, pds); + return ctor; + } + + T.defineProperties = function (o, xpds) { + /** Add properties described by XPDs to an object + + This function is similar to`Object.defineProperties`, + but supports the same features as `yT`. + */ + return Object.defineProperties(o, xpdsToPds(xpds)); + }; + + T.defineProperty = function (o, name, xpd) { + /** Add a property described by an XPD to an object + + This function is similar to`Object.defineProperty`, + but supports the same features as `yT`. + */ + var xpds = {}; + xpds[name] = xpd; + return T.defineProperties(o, xpds); + }; + + T.getPropertyDescriptor = function (o, name) { + /** Look up a descriptor from `o`'s prototype chain */ + var v = null; + while (!v && o) { + v = Object.getOwnPropertyDescriptor(o, name); + o = Object.getPrototypeOf(o); + } + return v; + }; + + T.isAccessorDescriptor = isAccessorDescriptor; + T.isDataDescriptor = isDataDescriptor; + T.isDescriptor = isDescriptor; + + if (module) + module.exports = T; + else + this.yT = T; +}).call(typeof exports === "undefined" ? this : exports, + typeof exports === "undefined" ? null : module); diff --git a/src/yuu/yf.js b/src/yuu/yf.js new file mode 100644 index 0000000..5df966d --- /dev/null +++ b/src/yuu/yf.js @@ -0,0 +1,578 @@ +/* Copyright 2014 Yukkuri Games + Licensed under the terms of the GNU GPL v2 or later + @license http://www.gnu.org/licenses/gpl-2.0.html + @source: http://yukkurigames.com/yuu/ +*/ + +(function () { + "use strict"; + + /** yf - yuu foundation + + A collection of tools for functional programming and the kind + of sequence (array) manipulations usually associated with + functional programming. + + yf doesn't depend on yuu specifically, but may use standard + features not yet widely supported provided by yuu/pre. + */ + + function isFunction (o) { + /** Check if a value is a function */ + return Object.prototype.toString.call(o) === '[object Function]'; + } + + function isString (s) { + /** Check if a value is a string */ + return Object.prototype.toString.call(s) === "[object String]"; + } + + function I (x) { return x; } + + function K (x) { return function () { return x; }; } + + /** Get the minimum or maximum of two objects + + The default JavaScript Math.min and Math.max are unsuitable as + generic functions. They don't work on strings. Because they + support a variable numbers of arguments they don't work + correctly when passed directly to higher-order functions that + pass "bonus" arguments such as Array.prototype.reduce. + + These functions work on any objects comparable with < and >, + and only consider two arguments. + */ + function min (a, b) { return b < a ? b : a; } + function max (a, b) { return b > a ? b : a; } + function clamp(x, lo, hi) { return max(lo, min(hi, x)); } + + /** Get a property from the this object by name */ + function getter (key) { return this[key]; } + + /** Set a property value on the this object by name */ + function setter (key, value) { this[key] = value; } + + function unbind (f) { + /** Factor out the special 'this' argument from a function + + unbind(f)(a, b, c) is equivalent to f.call(a, b, c), and + you may store the return value for later use without + storing the original function. + */ + + // return f.call.bind(f) is ~15% slower than this closure on + // Chrome 31 and negligibly slower on Firefox 25. + return function () { + return f.call.apply(f, arguments); + }; + } + + /** Unbound versions of useful functions */ + var slice = unbind(Array.prototype.slice); + + function contains (seq, o) { + return Array.prototype.indexOf.call(seq, o) !== -1; + } + + function lacks (seq, o) { + return !contains(seq, o); + } + + /** The first element of a sequence */ + function head (a) { return a[0]; } + + /** All but the first element of a sequence */ + function tail (a) { return slice(a, 1); } + + /** The last element of a sequence */ + function last (a) { return a[a.length - 1]; } + + /** All but the last element of a sequence */ + function most (a) { return slice(a, 0, -1); } + + /** The length of a sequence */ + function len (seq) { return seq.length; } + + /** Note that yf's argument order is slightly different from + JavaScript's normal order (but the same as most other + languages with functional elements). + + This is irrelevant for `fold` and `filter`, but `each` and + `map` can take multiple sequences to allow callback functions + with arbitrary arity. + + Because of this difference, there is no final `thisArg` as in + e.g. the standard Array's forEach. Instead the `this` of + the original call is forwarded. For example, + someArray.forEach(callback, thisArg) + becomes + yf.each.call(thisArg, callback, someArray) + */ + + function foldl (callback, seq, value) { + /** Like Array's reduce, but with no extra arguments + + This traverses the sequence in indexed order, low-to-high, + and calls the provided function with the accumulated value + and the sequence item. + */ + var i = 0; + if (arguments.length === 2) + value = seq[i++]; + for (; i < seq.length; ++i) + value = callback.call(this, value, seq[i]); + return value; + } + + function foldr (callback, seq, value) { + /** Like foldl, but reversed. + + This traverses the sequence in indexed order, high-to-low, + and calls the provided function with the sequence item and + the accumulated value. + */ + var i = seq.length - 1; + if (arguments.length === 2) + value = seq[i--]; + for (; i >= 0; --i) + value = callback.call(this, seq[i], value); + return value; + } + + function call (f, x) { return f.call(this, x); } + + function compose () { + /** Create a function by composing multiple functions + + compose(f, g, h)(x, y, z) is equivalent to f(g(h(x, y, z))). + */ + var inner = last(arguments); + var funcs = most(arguments); + return function () { + return foldr.call(this, call, funcs, inner.apply(this, arguments)); + }; + } + + // Generating specialized functions for plucking the nth argument + // and passing it to a callback is 100-120x faster than the + // generic one in V8. + // + // So generate specialized functions for small argc, and only + // resort to the generic approach when there's many sequences. + var CALLS = []; + + /* jshint -W054*/ /* Function constructor is a form of eval */ + for (var args = []; args.length < 32; + args.push(", seqs[" + args.length + "][i]")) + CALLS[args.length] = new Function( + "callback", "i", "seqs", + "return callback.call(this" + args.join("") + ");"); + + function lookup (prop) { + /** Return a function that gets a particular property */ + + // Building this as a closure is ~2-5x faster than writing + // a function lookup(prop, o) and binding it. + return function (s) { return s[prop]; }; + } + + function callx (callback, i, seqs) { + return callback.apply(this, seqs.map(lookup(i))); + } + + function calln (argc) { + return CALLS[argc] || callx; + } + + function argv (f) { + /** Provide a variadic-like version of f + + Arguments passed to the function including and after the + final named one are collected and passed as a single + sequence (not necessarily Array) value. + */ + var length = f.length; + switch (length) { + case 0: throw new Error("don't use argv for 0-ary functions"); + case 1: return function () { return f.call(this, arguments); }; + default: + return function () { + arguments[length - 1] = slice(arguments, length - 1); + return f.apply(this, arguments); + }; + } + } + + var each = argv(function (callback, seqs) { + /** Call a function on the given sequences' elements + + If one sequence is longer than the others, `undefined` + will be passed for that sequence's argument. + + For example, each(f, [a, b, c], [x, y]) is equivalent to + f(a, x); + f(b, y); + f(c, undefined); + + If you want to pass a thisArg to the callback, use + each.call(thisArg, callback, ...). + */ + var length = Math.max.apply(Math, seqs.map(len)); + var fn = calln(seqs.length); + for (var i = 0; i < length; ++i) + fn.call(this, callback, i, seqs); + }); + + var eachr = argv(function (callback, seqs) { + /** Call a function on the given sequences' elements, backwards + + If one sequence is longer than the others, `undefined` will be + passed for that sequence's argument. + + For example, each(f, [a, b, c], [x, y]) is equivalent to + f(c, undefined); + f(b, y); + f(a, x); + + If you want to pass a thisArg to the callback, use + eachr.call(thisArg, callback, ...). + */ + var length = Math.max.apply(Math, seqs.map(len)); + var fn = calln(seqs.length); + for (var i = length - 1; i >= 0; --i) + fn.call(this, callback, i, seqs); + }); + + function pusher (a) { + // Ridiculously faster than a.push.bind(a). :( + return function (o) { a.push(o); }; + } + + function map () { + /** Build an array by applying a function to sequences + + Similar to Array.prototype.map, but allows passing multiple + sequences to call functions of any arity, as with each. + + If you want to pass a thisArg to the callback, use + map.call(thisArg, callback, ...). + */ + var a = []; + arguments[0] = compose(pusher(a), arguments[0]); + each.apply(this, arguments); + return a; + } + + function mapr () { + /** Build an array by applying a function to sequences backwards + + As eachr is to each, so mapr is to map. + */ + var a = []; + arguments[0] = compose(pusher(a), arguments[0]); + eachr.apply(this, arguments); + return a; + } + + function filter (callback, seq) { + /** Build an array without the elements that fail the predicate + + Like Array.prototype.filter, but if null is passed for the + predicate, any false-y values will be removed. + */ + var a = []; + callback = callback || I; + function _ (o) { if (callback.call(this, o)) a.push(o); } + each.call(this, _, seq); + return a; + } + + function packed (f) { + /** Pack arguments to a function into an Array + + packed(f)([a, b, c]) is equivalent to f(a, b, c). + */ + return function (args) { return f.apply(this, args); }; + } + + function argcd () { + /** Create a function that dispatches based on argument count + + Pass a list of functions with varying argument lengths, e.g. + var f = argcd(function () { ... }, + function (a, b) { ... }, + function (a, b, c) { ... }); + + This can be used for function overloading, clearer + defaults for positional parameters, or significantly more + evil things. + + The functions can also be accessed directly by their + argument count, e.g. f[0], f[2], f[3] above. + + If no matching argument count is found for a call, a + TypeError is raised. + */ + if (arguments.length === 1) + throw new Error("don't use argcd for one function"); + var table = (function table () { + return table[arguments.length].apply(this, arguments); + }); + for (var i = 0; i < arguments.length; ++i) + table[arguments[i].length] = arguments[i]; + return table; + } + + var irange = argcd( + /** Call the provided callback counting as it goes + + irange(x) counts from [0, x), by 1. + + irange(x, y) counts from [x, y), by 1. + + irange(x, y, s) counts from [x, y), by s. + */ + function (callback, stop) { + return irange.call(this, callback, 0, stop, 1); + }, + function (callback, start, stop) { + return irange.call(this, callback, start, stop, 1); + }, + function (callback, start, stop, step) { + var length = Math.max(Math.ceil((stop - start) / step), 0); + for (var i = 0; i < length; ++i) + callback.call(this, start + step * i); + } + ); + + function capture1 (ifunc) { + /** Build an array from the values of an iterating function + + The elements added to the array are the first arguments + the iterating function passes. + */ + return function () { + var a = []; + var args = slice(arguments); + args.unshift(pusher(a)); + ifunc.apply(this, args); + return a; + }; + } + + /** Generate an Array from range of numbers, as irange */ + var range = capture1(irange); + + function ipairs (callback, o) { + /** Call the provided callback with each key and value of the object */ + each.call(this, function (k) { callback.call(this, k, o[k]); }, + Object.keys(o)); + } + + function iprototypeChain (callback, o) { + /** Traverse an object and its prototype chain */ + do { + callback.call(this, o); + } while ((o = Object.getPrototypeOf(o))); + } + + function allKeys (o) { + /** Get *ALL* property names. Even unowned non-enumerable ones. */ + var props = []; + iprototypeChain(compose(packed(props.push).bind(props), + Object.getOwnPropertyNames), + o); + return props.sort().filter(function (p, i, a) { + return p !== a[i - 1]; + }); + } + + var some = argv(function (callback, seqs) { + callback = callback || I; + var length = Math.max.apply(Math, seqs.map(len)); + var fn = calln(seqs.length); + for (var i = 0; i < length; ++i) + if (fn.call(this, callback, i, seqs)) + return true; + return false; + }); + + var eachrUntil = argv(function (callback, seqs) { // Reverse of `some` + callback = callback || I; + var length = Math.max.apply(Math, seqs.map(len)); + var fn = calln(seqs.length); + for (var i = length - 1; i >= 0; --i) + if (fn.call(this, callback, i, seqs)) + return true; + return false; + }); + + function not (f) { + /** Build a function equivalent to !f(...) */ + return function () { return !f.apply(this, arguments); }; + } + + function every () { + arguments[0] = not(arguments[0] || I); + return !some.apply(this, arguments); + } + + function none () { + return !some.apply(this, arguments); + } + + function repeat (o, n) { + return (new Array(n)).fill(o); + } + + function arrayify (o) { + /** Equivalent to [].concat(o) but faster */ + return Array.isArray(o) ? o : [o]; + } + + function stash (key, value, a) { + each(function (o) { o[key] = value; }, a); + } + + function without (seq, o) { + if (arguments.length === 2) + return filter(function (a) { return a !== o; }, seq); + var os = slice(arguments, 1); + return filter(lacks.bind(null, os), seq); + } + + function construct (ctr, args) { + args = slice(args); + args.unshift(ctr); + return new (Function.prototype.bind.apply(ctr, args))(); + } + + function new_ (ctr) { + return function () { return construct(ctr, arguments); }; + } + + function counter (start) { + var i = +(start || 0); + return function () { return i++; }; + } + + function volatile (f) { + return { valueOf: f }; + } + + function transform (callback, seq) { + irange.call(this, function (i) { + seq[i] = callback.call(this, seq[i]); + }, seq.length); + } + + function mapValues (callback, o) { + var r = {}; + for (var k in o) + r[k] = callback.call(this, o[k]); + return r; + } + + function insertBefore (seq, o, before) { + var idx = seq.lastIndexOf(before); + if (idx === -1) + seq.push(o); + else + seq.splice(idx, 0, o); + return seq; + } + + function seqEqual (a, b) { + if (a.length !== b.length) + return false; + for (var i = 0; i < a.length; ++i) + if (a[i] !== b[i]) + return false; + return true; + } + + function debounce (callback, wait) { + wait = wait || 100; + var this_ = null; + var args = null; + var id = null; + + function _ () { + callback.apply(this_, args); + this_ = null; + args = null; + id = null; + } + + return function () { + if (id !== null && this_ !== this) + _(); + clearTimeout(id); + this_ = this; + args = arguments; + id = setTimeout(_, wait); + }; + } + + function pluck (prop, seq) { + return map(lookup(prop), seq); + } + + Object.assign(this, { + allKeys: allKeys, + argcd: argcd, + argv: argv, + arrayify: arrayify, + clamp: clamp, + compose: compose, + construct: construct, + contains: contains, + counter: counter, + debounce: debounce, + each: each, + eachUntil: some, + eachr: eachr, + eachrUntil: eachrUntil, + every: every, + filter: filter, + foldl: foldl, + foldr: foldr, + getter: getter, + head: head, + I: I, + insertBefore: insertBefore, + ipairs: ipairs, + irange: irange, + isFunction: isFunction, + isString: isString, + K: K, + lacks: lacks, + last: last, + len: len, + lookup: lookup, + map: map, + mapr: mapr, + mapValues: mapValues, + max: max, + min: min, + most: most, + new_: new_, + none: none, + pluck: pluck, + range: range, + repeat: repeat, + seqEqual: seqEqual, + setter: setter, + slice: slice, + some: some, + stash: stash, + tail: tail, + transform: transform, + unbind: unbind, + volatile: volatile, + without: without, + + VERSION: 0 + }); + +}).call(typeof exports !== "undefined" ? exports : (this.yf = {})); diff --git a/test/jshint.config b/test/jshint.config new file mode 100644 index 0000000..3a5ca20 --- /dev/null +++ b/test/jshint.config @@ -0,0 +1,34 @@ +{ + "browser": true, + "laxbreak": true, + "globalstrict": true, + "validthis": true, + "devel": true, + "unused": "vars", + "camelcase": true, + "eqeqeq": true, + "latedef": true, + "nonew": true, + "undef": true, + "trailing": true, + "globals": { + "Event": false, + "Promise": false, + "Hammer": false, + "Buffer": false, + "gl": false, + "yf": false, + "yT": false, + "yuu": false, + "ystorage": false, + "mat4": false, + "vec3": false, + "vec2": false, + "quat": false, + "exports": false, + "module": false, + "process": false, + "require": false, + "escape": true + } +} diff --git a/test/spec/yuu/core.js b/test/spec/yuu/core.js new file mode 100644 index 0000000..13098e2 --- /dev/null +++ b/test/spec/yuu/core.js @@ -0,0 +1,105 @@ +var JS = this.JS || require('jstest'); +var yuu = require('yuu/core'); + +JS.Test.describe('yuu core', function () { with (this) { + it("knows signum", function () { with (this) { + assertEqual(-1, Math.sign(-10)); + assertEqual(1, Math.sign(10)); + assertEqual(0, Math.sign(0)); + }}); + it("knows signum for weird numbers", function () { with (this) { + assertEqual(-1, Math.sign(-Infinity)); + assertEqual(1, Math.sign(Infinity)); + assert(Number.isNaN(Math.sign(NaN))); + }}); + + it("String endsWith", function () { with (this) { + assert("12345".endsWith("12345")); + assert("12345".endsWith("45")); + assert("12345".endsWith("5")); + assert("12345".endsWith("")); + assertNot("12345".endsWith("0")); + assertNot("12345".endsWith("35")); + assertNot("12345".endsWith("34")); + }}); + + it("String startsWith", function () { with (this) { + assert("12345".startsWith("12345")); + assert("12345".startsWith("12")); + assert("12345".startsWith("1")); + assert("12345".startsWith("")); + assertNot("12345".startsWith("0")); + assertNot("12345".startsWith("13")); + assertNot("12345".startsWith("23")); + }}); + + it("splits path extensions", function () { with (this) { + assertEqual(["a", ".png"], yuu.splitPathExtension("a.png")); + assertEqual(["a.b", ".png"], yuu.splitPathExtension("a.b.png")); + assertEqual(["a", ""], yuu.splitPathExtension("a")); + assertEqual(["a.b/c", ".png"], yuu.splitPathExtension("a.b/c.png")); + assertEqual([".gitignore", ""], yuu.splitPathExtension(".gitignore")); + }}); + + JS.Test.describe("resourcePath", function () { with (this) { + var f = yuu.resourcePath; + it("leaves ordinary paths alone", function () { with (this) { + assertEqual("foo.png", f("foo.png", "error", "error")); + assertEqual("foo/bar.png", f("foo/bar.png", "error", "error")); + assertEqual("foo@2x.png", f("foo@2x.png", "error", "error")); + }}); + it("expands @ paths", function () { with (this) { + assertEqual("data/images/foo.png", f("@foo", "images", "png")); + assertEqual("data/images/foo.png", f("@foo.png", "images", "png")); + assertEqual("data/images/foo.jpg", f("@foo.jpg", "images", "png")); + assertEqual("data/images/foo/bar.png", f("@foo/bar", "images", "png")); + assertEqual("foo/data/images/bar.png", f("foo/@bar", "images", "png")); + }}); + it("expands yuu/@ paths", function () { with (this) { + assertEqual(yuu.PATH + "data/images/bar.png", + f("yuu/@bar", "images", "png")); + }}); + }}); + + JS.Test.describe('lerping', function () { with (this) { + it("lerps numbers", function () { with (this) { + assertEqual(0.0, (0).lerp(1, 0.0)); + assertEqual(0.5, (0).lerp(1, 0.5)); + assertEqual(1.0, (0).lerp(1, 1.0)); + }}); + + var arrayTypes = { + "untyped": Array, + "float32": Float32Array, + "float64": Float64Array, + "int8": Int8Array, + "uint8": Uint8Array, + "int16": Int16Array, + "uint16": Uint16Array, + "int32": Int32Array, + "uint32": Uint32Array + }; + + Object.keys(arrayTypes).forEach(function (name) { + var A = arrayTypes[name]; + it("lerps " + name + " arrays element-wise", function () { with (this) { + var a = new A([0, 0, 0]); + var b = new A([0, 10, 20]); + assertEqual(a, a.lerp(b, 0)); + assertEqual(b, a.lerp(b, 1)); + assertEqual(new A([0, 5, 10]), a.lerp(b, 0.5)); + }}); + }); + + Object.keys(arrayTypes).forEach(function (name) { + var A = arrayTypes[name]; + it("slices " + name + " arrays", function () { with (this) { + var a = new A([0, 1, 2, 3, 4, 5]); + var b = a.slice(); + assertEqual(a, b); + assertKindOf(A, b); + assertNotSame(a, b); + }}); + }); + }}); +}}); diff --git a/test/spec/yuu/input.js b/test/spec/yuu/input.js new file mode 100644 index 0000000..1bd00e4 --- /dev/null +++ b/test/spec/yuu/input.js @@ -0,0 +1,146 @@ +var JS = this.JS || require('jstest'); +var yuu = require('yuu/input'); + +JS.Test.describe('yuu input', function () { with (this) { + it("has consistent key names", function () { with (this) { + Object.keys(yuu.KEY_NAMES).forEach(function (code) { + assertEqual(yuu.KEY_NAMES[code], yuu.keyCodeName(code)); + }); + }}); + it("handles unknown key names", function () { with (this) { + Object.keys(yuu.KEY_NAMES).forEach(function (name) { + assertEqual("key:123456", yuu.keyCodeName(123456)); + }); + }}); + it("handles event-known key names", function () { with (this) { + Object.keys(yuu.KEY_NAMES).forEach(function (name) { + assertEqual("bogus", yuu.keyCodeName(123456, "BOGUS")); + }); + }}); + it("ignores browser default names", function () { with (this) { + Object.keys(yuu.KEY_NAMES).forEach(function (name) { + assertEqual("key:123456", yuu.keyCodeName(123456, "Unidentified")); + }); + }}); + + JS.Test.describe('KeyBindSet', function () { with (this) { + it("holds binds", function () { with (this) { + var bindset = new yuu.KeyBindSet(); + assertEqual(0, bindset.binds.length); + bindset = new yuu.KeyBindSet({ a: 'a', b: 'b' }); + assertEqual(2, bindset.binds.length); + }}); + + it("binds new binds", function () { with (this) { + var bindset = new yuu.KeyBindSet({ a: 'a', b: 'b' }); + assertEqual(2, bindset.binds.length); + bindset.bind('c', 'c'); + assertEqual(3, bindset.binds.length); + }}); + + it("doesn't bind duplicates", function () { with (this) { + var bindset = new yuu.KeyBindSet({ a: 'a', b: 'b' }); + assertEqual(2, bindset.binds.length); + bindset.bind("a", "a different a"); + assertEqual(2, bindset.binds.length); + bindset.bind("a+b", "a and b"); + assertEqual(3, bindset.binds.length); + bindset.bind("b+a", "b and a"); + assertEqual(3, bindset.binds.length); + }}); + + it("unbinds", function () { with (this) { + var bindset = new yuu.KeyBindSet({ a: 'a', b: 'b' }); + assertEqual(2, bindset.binds.length); + bindset.unbind('a'); + assertEqual(1, bindset.binds.length); + bindset.unbind('x'); + assertEqual(1, bindset.binds.length); + bindset.bind('a', 'a'); + assertEqual(2, bindset.binds.length); + }}); + }}); + + JS.Test.describe('InputState', function () { with (this) { + var bindset1 = new yuu.KeyBindSet({ + "a": "a", + "b": "++b", + "c": "+c", + "a+b": "a and b", + }); + var bindset2 = new yuu.KeyBindSet({ + "a": "a different a", + "a+b+c": "a and b and c", + "mousemove": "mouse moved", + "d+mousemove": "mouse moved and d", + }); + + it("activates simple binds", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(["a"], input.keydown("a")); + assertNot(input.keyup("a")); + assertEqual(["a"], input.keydown("a")); + assertNot(input.keyup("a")); + }}); + + it("doesn't activate nothing", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(null, input.keydown("x")); + assertEqual(null, input.keyup("x")); + }}); + + it("doesn't repeat", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(["a"], input.keydown("a")); + assertEqual([], input.keydown("a")); + input.keyup("a"); + assertEqual(["a"], input.keydown("a")); + }}) + + it("activates toggle binds", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(["++b"], input.keydown("b")); + }}); + + it("activates flag binds", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(["+c"], input.keydown("c")); + assertEqual([], input.keydown("c")); + assertEqual(["-c"], input.keyup("c")); + }}); + + it("handles multiple keys", function () { with (this) { + var input = new yuu.InputState([bindset1]); + assertEqual(["a"], input.keydown("a")); + assertEqual(["a and b"], input.keydown("b")); + }}); + + it("handles change states", function () { with (this) { + var input = new yuu.InputState([bindset2]); + assertEqual(["mouse moved"], input.mousemove()); + assertEqual(["mouse moved"], input.mousemove()); + }}); + + it("handles change states with a key", function () { with (this) { + var input = new yuu.InputState([bindset2]); + assertEqual(null, input.keydown("d")); + assertEqual(["mouse moved and d"], input.mousemove()); + assertEqual(["mouse moved and d"], input.mousemove()); + assertEqual(null, input.keyup("d")); + assertEqual(["mouse moved"], input.mousemove()); + }}); + + it("masks lower sets", function () { with (this) { + var input = new yuu.InputState([bindset1, bindset2]); + assertEqual(["a different a"], input.keydown("a")); + }}); + + it("always picks the longest command", function () { with (this) { + var input = new yuu.InputState([bindset1, bindset2]); + input.keydown("b"); + assertEqual(["a and b"], input.keydown("a")); + assertEqual(["a and b and c"], input.keydown("c")); + }}); + + }}); +}}); diff --git a/test/spec/yuu/storage.js b/test/spec/yuu/storage.js new file mode 100644 index 0000000..3361d5b --- /dev/null +++ b/test/spec/yuu/storage.js @@ -0,0 +1,113 @@ +var JS = this.JS || require('jstest'); +require('yuu/pre'); +var ystorage = require('yuu/storage'); + +JS.Test.describe('ystorage', function () { with (this) { + JS.Test.describe("PrefixedStorage", function () { with (this) { + before(function () { + this.backend = new ystorage.FakeStorage(); + this.a = new ystorage.PrefixedStorage(this.backend, "a"); + this.b = new ystorage.PrefixedStorage(this.backend, "b"); + this.c1 = new ystorage.PrefixedStorage(this.backend, "c"); + this.c2 = new ystorage.PrefixedStorage(this.backend, "c"); + }); + + it('starts empty', function () { with (this) { + assertEqual(0, this.backend.length); + assertEqual(0, this.a.length); + assertEqual(0, this.b.length); + assertEqual(0, this.c1.length); + assertEqual(0, this.c2.length); + assertEqual(null, this.backend.key(0)); + assertEqual(null, this.a.key(0)); + assertEqual(null, this.b.key(0)); + assertEqual(null, this.c1.key(0)); + assertEqual(null, this.c2.key(0)); + }}); + + it('stores and retrieves a value', function () { with (this) { + this.a.setItem("key", "value"); + assertEqual(1, this.backend.length); + assertEqual(1, this.a.length); + assertEqual(0, this.b.length); + assertEqual(0, this.c1.length); + assertEqual(0, this.c2.length); + assertEqual("a -- key", this.backend.key(0)); + assertEqual("key", this.a.key(0)); + assertEqual(null, this.b.key(0)); + assertEqual(null, this.c1.key(0)); + assertEqual(null, this.c2.key(0)); + }}); + + it('avoids other values when clearing', function () { with (this) { + this.a.setItem("key", "value a"); + this.b.setItem("key", "value b"); + assertEqual(2, this.backend.length); + assertEqual(1, this.a.length); + assertEqual(1, this.b.length); + this.a.clear(); + assertEqual(1, this.backend.length); + assertEqual(0, this.a.length); + assertEqual(1, this.b.length); + assertEqual(null, this.a.key(0)); + assertEqual(null, this.a.getItem("key")); + assertEqual("key", this.b.key(0)); + assertEqual("value b", this.b.getItem("key")); + }}); + + it('shares with the same prefix', function () { with (this) { + this.c1.setItem("key", "value"); + assertEqual("key", this.c1.key(0)); + assertEqual("key", this.c2.key(0)); + assertEqual("value", this.c1.getItem("key")); + assertEqual("value", this.c2.getItem("key")); + }}); + + }}); + + JS.Test.describe("PrefixedStorage", function () { with (this) { + it('stores objects', function () { with (this) { + var storage = new ystorage.Storage(); + assertEqual(undefined, storage.getObject("key")); + storage.setObject("key", [1, 2, 3]); + assertEqual([1, 2, 3], storage.getObject("key")); + }}); + it('handles defaults', function () { with (this) { + var storage = new ystorage.Storage(null, { + 'should be null': null, + 'should be undefined': undefined, + 'should be false': false + }); + assertEqual(null, storage.getObject('should be null')); + assertEqual(false, storage.getObject('should be false')); + assertEqual(undefined, storage.getObject('should be undefined')); + assertEqual(undefined, storage.getObject('should not exist')); + }}); + it('handles fallbacks', function () { with (this) { + var storage = new ystorage.Storage(); + assertEqual(undefined, storage.getObject('?', undefined)); + assertEqual(null, storage.getObject('?', null)); + assertEqual(false, storage.getObject('?', false)); + }}); + it('prefers defaults to fallbacks', function () { with (this) { + var storage = new ystorage.Storage(null, { + 'should be null': null, + 'should be undefined': undefined, + 'should be false': false + }); + assertEqual(null, storage.getObject('should be null', 0)); + assertEqual(false, storage.getObject('should be false', 0)); + assertEqual(undefined, storage.getObject('should be undefined', 0)); + assertEqual(0, storage.getObject('should not exist', 0)); + }}); + it('keeps defaults', function () { with (this) { + var storage = new ystorage.Storage(null, { a: 'a' }); + assertEqual('a', storage.getObject('a')); + storage.setObject('a', 'b'); + assertEqual('b', storage.getObject('a')); + storage.removeObject('a'); + assertEqual('a', storage.getObject('a')); + }}); + }}) + +}}); diff --git a/test/spec/yuu/yT.js b/test/spec/yuu/yT.js new file mode 100644 index 0000000..dc07ccb --- /dev/null +++ b/test/spec/yuu/yT.js @@ -0,0 +1,227 @@ +var JS = this.JS || require('jstest'); +var yT = this.yT || require('yuu/yT'); + +JS.Test.describe('yT', function() { with (this) { + + it("makes Object subclasses", function () { with (this) { + var A = yT(Object, {}); + assertKindOf(Object, new A()); + }}); + it("makes Object subclasses from a prototype", function () { with (this) { + var A = yT(Object.prototype, {}); + assertKindOf(Object, new A()); + }}); + it("makes a non-Object subclass", function () { with (this) { + var A = yT(null, {}); + var a = new A(); + assertKindOf("object", a); + assertNot(a instanceof Object); + }}); + it("makes Object subclasses by default", function () { with (this) { + var A = yT({}); + assertKindOf(Object, new A()); + }}); + it("makes nested subclasses", function () { with (this) { + var A = yT({}); + var B = yT(A, {}); + assertKindOf(Object, new B()); + assertKindOf(A, new B()); + assertKindOf(B, new B()); + }}); + it("makes nested subclasses from a prototype", function () { with (this) { + var A = yT({}); + var B = yT(A.prototype, {}); + assertKindOf(Object, new B()); + assertKindOf(A, new B()); + assertKindOf(B, new B()); + }}); + + it("sets constructors", function () { with (this) { + function ctor () {}; + var A = yT({ constructor: ctor }); + var a = new A(); + assertSame(A, a.constructor); + assertSame(ctor, a.constructor); + }}); + it("auto-creates root constructors", function () { with (this) { + var A = yT({}); + var a = new A(); + assertSame(A, a.constructor); + }}); + it("auto-creates parent-calling constructors", function () { with (this) { + var A = yT({ constructor: function (x, y) { this.i = x + y; } }); + var B = yT(A, {}); + var b = new B(1, 2); + assertEqual(3, b.i); + assertSame(B, b.constructor); + assertNotSame(A, b.constructor); + }}); + + it("creates data descriptors", function () { with (this) { + var A = yT({ X: { value: 1 } }); + var a = new A(); + assertEqual(1, a.X); + a.X = 2; + assertEqual(1, a.X, "X should not be writable"); + }}); + it("creates writable data descriptors", function () { with (this) { + var A = yT({ x: { value: 1, writable: true } }); + var a = new A(); + assertEqual(1, a.x); + a.x = 2; + assertEqual(2, a.x); + }}); + it("creates bare value descriptors", function () { with (this) { + var A = yT({ X: 1 }); + var a = new A(); + assertEqual(1, a.X); + a.X = 2; + assertEqual(1, a.X, "X should not be writable"); + }}); + it("creates read-only aliases", function () { with (this) { + var A = yT({ a: { alias: "b", readonly: true } }); + var a = new A(); + a.b = "hello"; + assertEqual("hello", a.a); + a.b = "world"; + assertEqual("world", a.a); + a.a = "goodbye"; + assertEqual("world", a.a); + assertEqual("world", a.b); + }}); + it("creates read-write aliases", function () { with (this) { + var A = yT({ a: { alias: "b", readonly: false } }); + var a = new A(); + a.b = "hello"; + assertEqual("hello", a.a); + a.b = "world"; + assertEqual("world", a.a); + a.a = "goodbye"; + assertEqual("goodbye", a.a); + assertEqual("goodbye", a.b); + }}); + it("creates read-write aliases by default", function () { with (this) { + var A = yT({ a: { alias: "b" } }); + var a = new A(); + a.b = "hello"; + assertEqual("hello", a.a); + a.b = "world"; + assertEqual("world", a.a); + a.a = "goodbye"; + assertEqual("goodbye", a.a); + assertEqual("goodbye", a.b); + }}); +}}); + +JS.Test.describe('an example Point type', function() { with (this) { + var Point = yT({ + constructor: function (x, y) { + this.x = x || 0; + this.y = y || 0; + }, + + x: { value: 0, chainable: true }, + y: { value: 0, chainable: true }, + 0: { alias: "x" }, + 1: { alias: "y" }, + xy: { swizzle: "xy" }, + yx: { swizzle: "yx" }, + + angle: { + chainable: true, + get: function () { + return Math.atan2(this.y, this.x); + }, + set: function (angle) { + var magnitude = this.magnitude; + this.x = Math.cos(angle) * magnitude; + this.y = Math.sin(angle) * magnitude; + } + }, + + magnitude: { + chainable: true, + get: function () { + return Math.sqrt(this.x * this.x + this.y * this.y); + }, + set: function (magnitude) { + var angle = this.angle; + this.x = Math.cos(angle) * magnitude; + this.y = Math.sin(angle) * magnitude; + } + }, + + length: 2 + }); + + it("constructs 0, 0 by default", function () { with (this) { + var p = new Point(); + assertEqual(0, p.x); + assertEqual(0, p.y); + assertEqual(2, p.length); + }}); + + + it("has chainable setters", function () { with (this) { + var p = new Point().setX(1).setY(2); + assertEqual(1, p.x); + assertEqual(2, p.y); + }}); + + it("x is also 0", function () { with (this) { + var p = new Point(); + assertEqual(0, p.x); + assertEqual(0, p[0]); + p.x = 1; + assertEqual(1, p.x); + assertEqual(1, p[0]); + p[0] = 2; + assertEqual(2, p.x); + assertEqual(2, p[0]); + }}); + it("y is also 1", function () { with (this) { + var p = new Point(); + assertEqual(0, p.y); + assertEqual(0, p[1]); + p.y = 1; + assertEqual(1, p.y); + assertEqual(1, p[1]); + p[1] = 2; + assertEqual(2, p.y); + assertEqual(2, p[1]); + }}); + + it("x and y have swizzling", function () { with (this) { + var p = new Point(); + assertEqual([0, 0], p.xy); + assertEqual([0, 0], p.yx); + p.xy = [1, 0]; + assertEqual([1, 0], p.xy); + assertEqual([0, 1], p.yx); + p.xy = p.yx; + assertEqual([0, 1], p.xy); + assertEqual([1, 0], p.yx); + }}); + + it("can change magnitude", function () { with (this) { + var p = new Point(1, 0); + assertEqual(1, p.magnitude); + p.magnitude = 10; + assertEqual([10, 0], p.xy); + }}); + it("can change angle", function () { with (this) { + var delta = 1e-13; + var p = new Point(1, 0); + assertEqual(0, p.angle); + p.angle = Math.PI / 2; + assertInDelta(Math.PI / 2, p.angle, delta); + assertInDelta(0, p.x, delta); + assertInDelta(1, p.y, delta); + p.angle = Math.PI / 4; + assertInDelta(Math.PI / 4, p.angle, delta); + assertInDelta(Math.sqrt(2) / 2, p.x, delta); + assertInDelta(Math.sqrt(2) / 2, p.y, delta); + assertInDelta(p.x, p.y, delta); + }}); +}}); + diff --git a/test/spec/yuu/yf.js b/test/spec/yuu/yf.js new file mode 100644 index 0000000..5205aad --- /dev/null +++ b/test/spec/yuu/yf.js @@ -0,0 +1,227 @@ +var JS = this.JS || require('jstest'); +require('yuu/pre'); +var yf = this.yf || require('yuu/yf'); + +JS.Test.describe('yf', function() { with (this) { + + it("allKeys", function () { with (this) { + assert(yf.contains(yf.allKeys(Object(1)), "hasOwnProperty")); + assertNot(yf.contains(yf.allKeys(Object(1)), "not a property")); + }}); + + it('argcd', function () { with (this) { + var f = yf.argcd( + function () { return 0; }, + function (a) { return 1; }, + function (a, b, c, d) { return 4; } + ); + assertEqual(0, f()); + assertEqual(1, f("")); + assertEqual(4, f("", "", "", "")); + assertThrows(TypeError, f.bind(null, "", "")); + }}); + + it('arrayify', function () { with (this) { + assertEqual([1], yf.arrayify(1)); + assertEqual([1], yf.arrayify([1])); + }}); + + it('clamp', function () { with (this) { + assertEqual(0.5, yf.clamp(0.5, 0, 1)); + assertEqual(1, yf.clamp(10, 0, 1)); + assertEqual(0, yf.clamp(-1, 0, 1)); + }}) + + it('compose', function () { with (this) { + function inc (a) { return a + 1; } + function add (a, b) { return a + b; } + + var plus1 = yf.compose(inc); + var plus2 = yf.compose(inc, inc); + var plus3 = yf.compose(inc, inc, inc); + var addplus3 = yf.compose(plus3, add); + + assertEqual(1, plus1(0)); + assertEqual(2, plus2(0)); + assertEqual(3, plus3(0)); + assertEqual(6, addplus3(1, 2)); + + function this_ () { return this; } + var f = yf.compose(this_, this_, this_); + assertSame(this, f.call(this)); + }}); + + it('construct', function () { with (this) { + assertEqual([], yf.construct(Array, [])); + assertEqual([1, 2, 3], yf.construct(Array, [1, 2, 3])); + }}); + + it('counter', function () { with (this) { + var c0 = yf.counter(0); + var c5 = yf.counter(5); + assertEqual(0, c0()); + assertEqual(1, c0()); + assertEqual(2, c0()); + assertEqual(5, c5()); + assertEqual(6, c5()); + }}); + + it('new_', function () { with (this) { + var a = yf.new_(Array); + assertEqual([], a()); + assertEqual([1, 2, 3], a(1, 2, 3)); + }}); + + it('foldl', function () { with (this) { + function sumString (v, i) { return v + i.toString(); } + var a = [1, 2, 3]; + assertEqual("123", yf.foldl(sumString, a)); + assertEqual("0123", yf.foldl(sumString, a, "0")); + }}); + + it('foldr', function () { with (this) { + function sumString (i, v) { return v + i.toString(); } + var a = [1, 2, 3]; + assertEqual("321", yf.foldr(sumString, a)); + assertEqual("4321", yf.foldr(sumString, a, "4")); + }}); + + JS.Test.describe('isFunction', function() { with (this) { + it("detects functions", function () { with (this) { + assert(yf.isFunction(Object)); + assert(yf.isFunction(assert)); + assert(yf.isFunction(yf.isFunction)); + }}); + it("detects non-functions", function () { with (this) { + assertNot(yf.isFunction(undefined)); + assertNot(yf.isFunction(null)); + assertNot(yf.isFunction(23)); + assertNot(yf.isFunction(yf)); + }}); + }}); + + JS.Test.describe('isString', function () { with (this) { + it("detects strings", function () { with (this) { + assert(yf.isString("")); + assert(yf.isString("hello world")); + }}); + it("detects Strings", function () { with (this) { + assert(yf.isString(new String(""))); + assert(yf.isString(new String("hello world"))); + }}); + it("detects non-strings", function () { with (this) { + assertNot(yf.isString(undefined)); + assertNot(yf.isString(null)); + assertNot(yf.isString(23)); + assertNot(yf.isString([1, 2, 3])); + }}); + }}); + + JS.Test.describe('insertBefore', function () { with (this) { + it("inserts at start", function () { with (this) { + var a = [1, 2]; + yf.insertBefore(a, 0, 1); + assertEqual([0, 1, 2], a); + }}); + it("inserts at middle", function () { with (this) { + var a = [0, 2]; + yf.insertBefore(a, 1, 2); + assertEqual([0, 1, 2], a); + }}); + it("inserts at end if missing", function () { with (this) { + var a = [0, 1]; + yf.insertBefore(a, 2, 99); + assertEqual([0, 1, 2], a); + }}); + }}); + + JS.Test.describe('contains', function () { with (this) { + var a = [1, 2, 3]; + it("finds things", function () { with (this) { + assert(yf.contains(a, 1)); + assert(yf.contains(a, 3)); + }}); + it("doesn't find things", function () { with (this) { + assertNot(yf.contains(a, -1)); + assertNot(yf.contains(a, 4)); + }}); + it("handles the empty sequence", function () { with (this) { + assertNot(yf.contains([], 1)); + assertNot(yf.contains([], undefined)); + assertNot(yf.contains([], null)); + }}); + it("uses identity, not equality", function () { with (this) { + assertNot(yf.contains(a, "1")); + }}); + }}); + + JS.Test.describe('repeat', function () { with (this) { + it("repeats nothing", function () { with (this) { + assertEqual([], yf.repeat("hello", 0)); + assertEqual([], yf.repeat(1, 0)); + assertEqual([], yf.repeat(null, 0)); + }}); + it("repeats something", function () { with (this) { + assertEqual([1], yf.repeat(1, 1)); + assertEqual([1, 1], yf.repeat(1, 2)); + assertEqual([1, 1, 1, 1], yf.repeat(1, 4)); + }}); + }}) + + JS.Test.describe('without', function () { with (this) { + var a = [1, 2, 3]; + it("doesn't remove wrongly", function () { with (this) { + assertEqual([1, 2, 3], yf.without(a, 4)); + }}); + it("removes by ===", function () { with (this) { + assertEqual([1, 2, 3], yf.without(a, "1")); + }}); + it("removes one element", function () { with (this) { + assertEqual([2, 3], yf.without(a, 1)); + }}); + it("removes multiple elements", function () { with (this) { + assertEqual([3], yf.without(a, 1, 2)); + assertEqual([2], yf.without(a, 1, 3)); + assertEqual([], yf.without(a, 1, 2, 3)); + }}); + it("handles the empty sequence", function () { with (this) { + assertEqual([], yf.without([])); + assertEqual([], yf.without([], 1)); + assertEqual([], yf.without([], 1, 2)); + }}); + }}); + + it("some", function () { with (this) { + assert(yf.some(null, [1])); + assert(yf.some(null, [1, 2])); + assert(yf.some(null, [1, 0])); + + assertNot(yf.some(null, [])); + assertNot(yf.some(null, [0, NaN])); + assertNot(yf.some(null, [0])); + }}); + + it('every', function () { with (this) { + assert(yf.every(null, [])); + assert(yf.every(null, [1])); + assert(yf.every(null, [1, 2])); + + assertNot(yf.every(null, [0])); + assertNot(yf.every(null, [1, 0])); + assertNot(yf.every(null, [1, 2, NaN])); + }}); + + it('none', function () { with (this) { + assert(yf.none(null, [])); + assert(yf.none(null, [0])); + assert(yf.none(null, [0, NaN])); + + assertNot(yf.none(null, [1])); + assertNot(yf.none(null, [1, 0])); + }}); + + it('pluck', function () { with (this) { + assertEqual([], yf.pluck("foo", [])); + assertEqual([1, 2, 3], yf.pluck("length", ["a", "ab", "abc"])); + }}); +}}); diff --git a/tools/LICENSE.rcedit b/tools/LICENSE.rcedit new file mode 100644 index 0000000..437dd58 --- /dev/null +++ b/tools/LICENSE.rcedit @@ -0,0 +1,57 @@ +Copyright (c) 2013 GitHub Inc. +https://github.com/atom/rcedit/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Also it's mostly using code from Rescle that GitHub has stripped the +copyright notice from, because who needs to follow licenses when +you've got piles of VC money and a terrible culture literally woven +into your furniture? + +-- + +Copyright (c) 2009 Yoshio Okumura +https://code.google.com/p/rescle/ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tools/composer/composer.js b/tools/composer/composer.js new file mode 100644 index 0000000..75bb81c --- /dev/null +++ b/tools/composer/composer.js @@ -0,0 +1,85 @@ +"use strict"; + +function titleCase (text) { + return text.replace("_", " ").replace(/\w\S*/g, function (word) { + return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase(); + }); +} + +function setOptions (select, dict) { + yf.irange.call(select, select.remove, select.options.length - 1, -1, -1); + yf.each(function (name) { + var opt = document.createElement("option"); + opt.text = titleCase(name); + opt.id = name; + select.appendChild(opt); + }, Object.keys(dict).sort()); +} + +window.addEventListener("load", function () { + var playing; + + yuu.init({}).then(function () { + setOptions(document.getElementById("instrument"), yuu.Instruments); + setOptions(document.getElementById("scale"), yuu.Scales); + }); + + function play () { + if (playing) + playing.disconnect(); + var instruments = document.getElementById("instrument"); + var scales = document.getElementById("scale"); + var instrument = yuu.Instruments[ + instruments.options[instruments.selectedIndex].id]; + var scale = yuu.Scales[ + scales.options[scales.selectedIndex].id]; + var score = yuu.parseScore( + document.getElementById("score").value, + scale, document.getElementById("tonic").value); + var bps = +document.getElementById("tempo").value / 60; + playing = yuu.audio.createGain(); + playing.gain.value = 0.5; + var t = yuu.audio.currentTime + 0.25; + yf.each(function (note) { + instrument.createSound( + yuu.audio, + t + note.time / bps, + note.hz, + 1.0, + note.duration / bps + ).connect(playing); + }, score); + playing.connect(yuu.audio.destination); + } + + function jam (key) { + if (key === "`") + key = "0"; + else if (key === "0") + key = "10"; + var instruments = document.getElementById("instrument"); + var scales = document.getElementById("scale"); + var tonic = document.getElementById("tonic").value; + var instrument = yuu.Instruments[ + instruments.options[instruments.selectedIndex].id]; + var scale = yuu.Scales[scales.options[scales.selectedIndex].id]; + var note = yuu.parseScore(key, scale, tonic)[0]; + var bps = +document.getElementById("tempo").value / 60; + if (note) + instrument.createSound( + yuu.audio, + yuu.audio.currentTime + 0.01, + note.hz, + 1.0, + note.duration / bps + ).connect(yuu.audio.destination); + } + + document.getElementById("play").addEventListener("click", play); + + document.getElementById("jam") + .addEventListener("keydown", function (event) { + jam(yuu.keyEventName(event)); + }); +}); + diff --git a/tools/composer/index.html b/tools/composer/index.html new file mode 100644 index 0000000..3202fab --- /dev/null +++ b/tools/composer/index.html @@ -0,0 +1,35 @@ + + + + Yuu Composer + + + + + + + + + + + +
+ click and type ` to 0 to jam +
+
+ +
+ +
+
+ Instrument:
+ Tonic:
+ Scale:
+ Tempo (BPM):
+
+ + diff --git a/tools/generate-appcache b/tools/generate-appcache new file mode 100755 index 0000000..a729f0b --- /dev/null +++ b/tools/generate-appcache @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +# Turn a website into an HTML5 application with an application cache +# manifest. +# +# http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html +# https://developer.mozilla.org/en/docs/HTML/Using_the_application_cache + +import os +import re +import shutil +import time + +def is_html(filename): + return filename.lower().endswith(".html") + +def main(appdir): + if not os.path.isdir(appdir): + raise StandardError("input (%r) is not a directory" % appdir) + all_files = [] + for root, dirnames, filenames in os.walk(appdir): + root = os.path.relpath(root, appdir) + for filename in filenames: + all_files.append(os.path.join(root, filename)) + all_files.sort() + appcache = os.path.join(appdir, "manifest.appcache") + with open(appcache, "w") as fobj: + fobj.write("CACHE MANIFEST\n") + fobj.write("# Generated on %s\n" % time.strftime("%Y %T %z")) + for filename in all_files: + fobj.write(filename + "\n") + + for filename in filter(is_html, all_files): + filename = os.path.join(appdir, filename) + # This call to relpath is the entire reason this tool is in + # Python and not a shell script. + relpath = os.path.relpath(appcache, os.path.dirname(filename)) + html = open(filename).read() + html = re.sub(" ])", '"']))+.)["']?""" + +def main(appdir): + if not os.path.isdir(appdir): + raise StandardError("input (%r) is not a directory" % appdir) + indexes = [] + icons = [] + for root, dirnames, filenames in os.walk(appdir): + root = os.path.relpath(root, appdir) + for filename in filenames: + if filename.lower() == "index.html": + indexes.append(os.path.join(root, filename)) + if ("icon" in filename.lower() + and filename.lower().endswith((".ico", ".png"))): + icons.append(os.path.join(root, filename)) + + indexes.sort(key=lambda fn: (fn.count("/"), fn)) + icons.sort(key=lambda fn: (fn.count("/"), fn)) + name = os.path.basename(appdir).split(".")[0] + package = { + "main": indexes[0], + "name": name, + "version": "0.0.0", + "window": { + "show": False, + "toolbar": False, + "title": name, + "min_width": 300, + "min_height": 200, + } + } + + if icons: + package["window"]["icon"] = icons[0] + + with open(os.path.join(appdir, indexes[0]), "r") as fobj: + header = fobj.read(4096) + try: + title = re.search("([^<]+)<", header).groups()[0] + except AttributeError: + print >>sys.stderr, "No <title> found in %r." % fobj.name + else: + package["window"]["title"] = title + try: + version = re.search(attr("version"), header).groups()[0] + except AttributeError: + print >>sys.stderr, "No version found in %r." % fobj.name + else: + package["version"] = version + try: + appid = re.search(attr("appid"), header).groups()[0] + except AttributeError: + print >>sys.stderr, "No appid found in %r." % fobj.name + else: + package["name"] = appid + + if "+" not in package["version"]: + package["version"] += "+" + package["version"] += time.strftime("%Y%m%d%H%M%S") + + with open(os.path.join(appdir, "package.json"), "w") as fobj: + json.dump(package, fobj) + +if __name__ == "__main__": + import sys + try: + appdir = sys.argv[1] + except IndexError: + raise SystemExit("Usage: %s appdir" %( + sys.argv[0])) + else: + main(appdir) + diff --git a/tools/generate-osx-app b/tools/generate-osx-app new file mode 100755 index 0000000..dd05cdd --- /dev/null +++ b/tools/generate-osx-app @@ -0,0 +1,59 @@ +#!/usr/bin/env python + +import os +import zipfile +import re +import plistlib +import shutil +import json +import re + +from os.path import join, basename + +def xp_filename(basename): + return re.sub('["<>*?|\\\\]', "_", + basename.replace("/", "-").replace(":", ".")) + +def versionify(version): + return ".".join(filter(lambda x: x.isdigit(), + re.split("[-+.]", version))[:3]) + +def main(nwdir, nwpackage): + if not os.path.isdir(nwdir): + raise StandardError("input (%r) is not a directory" % nwdir) + nwzip = zipfile.ZipFile(nwpackage) + icnss = filter(lambda f: f.lower().endswith(".icns"), + nwzip.namelist()) + package = json.load(nwzip.open("package.json")) + app = join(nwdir, "node-webkit.app") + title = package["window"]["title"] + exe = package["name"].split(".")[-1] + plist = dict( + CFBundleDisplayName=title, + CFBundleExecutable=exe, + CFBundleIdentifier=package["name"], + CFBundleInfoDictionaryVersion="6.0", + CFBundleName=title, + CFBundlePackageType="APPL", + CFBundleShortVersionString=package["version"], + CFBundleIconFile="nw.icns", + CFBundleVersion=versionify(package["version"]), + LSMinimumSystemVersion="10.6.0", + NSPrincipalClass="NSApplication", + NSSupportsAutomaticGraphicsSwitching=True, + ) + if icnss: + icnss.sort() + os.remove(join(app, "Contents", "Resources", "nw.icns")) + nwzip.extract(icnss[0], join(app, "Contents", "Resources")) + plist["CFBundleIconFile"] = icnss[0] + plistlib.writePlist(plist, join(app, "Contents/Info.plist")) + exedir = join(app, "Contents", "MacOS") + shutil.move(join(exedir, "node-webkit"), join(exedir, exe)) + shutil.copy(nwpackage, join(app, "Contents", "Resources", "app.nw")) + shutil.move(app, join(app, "..", xp_filename(title) + ".app")) + +if __name__ == "__main__": + import sys + main(*sys.argv[1:]) + diff --git a/tools/nw-linux-wrapper b/tools/nw-linux-wrapper new file mode 100755 index 0000000..d13e39f --- /dev/null +++ b/tools/nw-linux-wrapper @@ -0,0 +1,25 @@ +#!/bin/sh + +# https://github.com/rogerwang/node-webkit/issues/136 +# https://github.com/rogerwang/node-webkit/wiki/The-solution-of-lacking-libudev.so.0 +# +# Though that page would be more accurately titled "apparently even +# Intel, Google, and every commercial distribution can't be bothered +# to maintain trivial compatibility on desktop Linux." + +SELF=$(readlink -f "$0") +NWDIR=$(dirname "$SELF")/nw +NWBIN=$(command -v "$NWDIR/nw" nw | head -n 1) +PACKAGE="$NWDIR/package.nw" + +if [ ! -x "$NWBIN" ]; then + echo "node-webkit (nw) executable could not be found." >&2 + exit 127 +fi + +"$NWBIN" "$@" "$PACKAGE" +if [ "$?" = "127" -a -w "$NWBIN" ]; then + echo "Applying libudev.so.1 hack." >&2 + sed -i 's/udev\.so\.0/udev.so.1/g' "$NWBIN" + "$NWBIN" "$@" "$PACKAGE" +fi diff --git a/tools/rcedit.exe b/tools/rcedit.exe new file mode 100644 index 0000000000000000000000000000000000000000..9a8cb7146ef35fdcf0119b0186a59d2951e3862f GIT binary patch literal 53248 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 literal 0 HcmV?d00001 -- 2.30.2