From 6be6217d1fda27ec6c168466111cd26e52bf59a2 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Mon, 22 Sep 2014 02:00:36 +0200 Subject: [PATCH] Initial import. --- .gitattributes | 2 + .gitignore | 7 + .projectile | 2 + Makefile | 101 + README.md | 6 + rules/git.mk | 13 + rules/icons.mk | 39 + rules/javascript.mk | 62 + rules/node-webkit.mk | 99 + rules/pngcrush.mk | 20 + rules/programs.mk | 13 + src/data/images/face.png | Bin 0 -> 11504 bytes src/data/images/logotype_horizontal_1.png | Bin 0 -> 9281 bytes src/data/images/logotype_horizontal_2.png | Bin 0 -> 48983 bytes src/data/images/text.png | Bin 0 -> 51764 bytes src/data/license.txt | 15 + 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/index.html | 160 + src/main.css | 527 +++ src/main.js | 83 + src/yuu/audio.js | 524 +++ src/yuu/ce.js | 646 ++++ src/yuu/core.js | 908 +++++ 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 | 369 ++ src/yuu/director.js | 689 ++++ 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 | 83 + tools/generate-osx-app | 59 + tools/nw-linux-wrapper | 26 + tools/rcedit.exe | Bin 0 -> 53248 bytes 61 files changed, 14882 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/face.png create mode 100644 src/data/images/logotype_horizontal_1.png create mode 100644 src/data/images/logotype_horizontal_2.png create mode 100644 src/data/images/text.png create mode 100644 src/data/license.txt 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/index.html create mode 100644 src/main.css create mode 100644 src/main.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..ab7e9e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,101 @@ +#!/usr/bin/make -f + +node-webkit-version := 0.10.4 + +.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 := yuu +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 `echo $(*F) | sed -E 's/.+_[^0-9]+//'` + cd $@.tmp && $(ZIP) -r ../$(@F) . + $(RM) -r $@.tmp diff --git a/README.md b/README.md new file mode 100644 index 0000000..a265ea9 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Yuu Game Library + +This is the library used for several of our games at +[Yukkuri Games](https://yukkurigames.com). + +It is released under the terms of the GNU GPL version 2 or later. 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..dd46e17 --- /dev/null +++ b/rules/node-webkit.mk @@ -0,0 +1,99 @@ +# 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-directx = $(addprefix $(node-webkit-prefix),d3dcompiler_43.dll d3dcompiler_46.dll) + +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 + cp -a $(node-webkit-directx) $(@:.zip=) + 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) $(node-webkit-directx) + $(call node-webkit-package-win,$<,$(word 2,$^)) + +$(node-webkit-directx): + wget -O $@ 'https://github.com/cefsharp/cef-binary/raw/1e51255cf77d267899bf7834768b8774affaad2d/cef_binary_3.y.z_windows32/Release/'$(notdir $@) + +$(node-webkit-prefix)dxwebsetup.exe: + wget -O $@ http://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe 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/face.png b/src/data/images/face.png new file mode 100644 index 0000000000000000000000000000000000000000..19188970ca04e4c28653e214235560af3783d45f GIT binary patch literal 11504 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 NML9LuDrvKj{{w^-S8@OV literal 0 HcmV?d00001 diff --git a/src/data/images/logotype_horizontal_1.png b/src/data/images/logotype_horizontal_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a845d248c90efb43d037d8f1a82f98d7949e921e GIT binary patch literal 9281 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 literal 0 HcmV?d00001 diff --git a/src/data/images/logotype_horizontal_2.png b/src/data/images/logotype_horizontal_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae1d090b5c9416f0fe80863add227d745ca31bc GIT binary patch literal 48983 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 Tp3;}|00000NkvXXu0mjf&K3re literal 0 HcmV?d00001 diff --git a/src/data/images/text.png b/src/data/images/text.png new file mode 100644 index 0000000000000000000000000000000000000000..4982347fd19210fc883b7a24af0f5023c848b0f3 GIT binary patch literal 51764 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 literal 0 HcmV?d00001 diff --git a/src/data/license.txt b/src/data/license.txt new file mode 100644 index 0000000..fdd9313 --- /dev/null +++ b/src/data/license.txt @@ -0,0 +1,15 @@ +This demonstration project, aside from the Yukkuri Games logo, is +released into the public domain. + +The person who associated a work with this deed has dedicated the work +to the public domain by waiving all of his or her rights to the work +worldwide under copyright law, including all related and neighboring +rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for +commercial purposes, all without asking permission. + +See https://creativecommons.org/publicdomain/zero/1.0/ for details. + +The source code under src/yuu remains under the terms of the GNU GPL +versions 2 or later, unless specified otherwise in the files. 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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�x|H*&wF=Vh~e*)pTb-{f!rf`ny3){lg%pKGQEo3%UMZM!riU z2b5oEKIiwu`v;`NKoEG^WANU=a3UyTBO_y9>d`&(-=urg?Y zI1W5v98Met>`JU+EUX+*p#(M`HcM7bW*H{15SPOhhz$-M5gVCPTsEqKc)K_n7#LX`I+8;oKuRKkz=0=%!-d0$U4>PG Zg_TEZ2jlHlhoosB|wr$(C&5do_w#|)gYh!0$zE|(BcdJg#^tq?+%}_F^}-HFWslK7SziGf3fHK)aN&n+qWT03z_Cq4*DA!I0%< z4(7H$oW+l>;YVkx+)Q6)Zs`2u3-;fbkpBlna~n^yAC3e7L`Mh!`p!E7It)Yhl0EpA%|9lBSa6!H83~fz+xR9Uu#r)_r6h1t{9PFK406^S`007J} z0Dy8^Q;SpX;AHyaEB5;1OZOk@@2OGUO^wWc;{4ygg8zrn3uWh@_P^)@rg;nJ{%faH z{)-6!Fqh$O>9JvKU}9jf2Vw*Tj%Z-?(>L)!AkpmS0SCZm0TBcKdv9iJoZa6)*+2Ma z$Y{F1e;&LbBMPgq-zPgizp*@hAW(3h8U$y^pD-^rP!UUl@fW3{fdMF>2^o?D@Z&#| zFeMe_h&Xckpr-knccW#LC$t%bFA(y4P$;W#QrPkedVmsvfOycz_Uq3tt&pnJ114bl zg~FWaistB(zB$l>d|5;m26GOFSGZ}!gdDMJ@*yRrI9hWbukeJ16F$*#OU@){7b#J$ zBI-`I?UPbZOxRH1f?+Rx9_09X5mGuyNolovrQ}AH5+Yly{$Kzbq8O?pNrD)y3~Vopj4Nh+nJR7glz6zvGYFi@p&!f;@z^8B!s z_}bgY1ipE1FZJ8A>lK%WUeBGg74N6$EY{}-s*km)sqW$E?*0d!v8F2n?#(p=B`vt6 zu8XQ%FXg%mQQoTBi*oX(a(pv8ag2{HCLI<%!!?=)UxXOF7Xqun;~bY-nGRomGTgoc zKfp?9;(y8gN#8xd0f-df4+sRf0Eq!Ee-hINXa@`f!T@G~PJk?c9Pkei;jy8s*d?be zh`0@h01`O7M##B=+LRGL>RkW^HM|^aWWpVK3~9;klo0I*L?93-0=H3zm0wUSkp)hK zA>kv$M}*959Z|@_&E4cYo53tSnNaC|Zat@bN)kV~4L-y6B`49+1b8XFyo`-$4u;UO zF?*bJ{rH9f&ss?4wgMdU+EXH6$#Ms3HJ5!ad_sqPd=flxV>YuaJ}z-VofCncWI0L) z-(t;lP9eMpE$7I>3D9_^Nt;yw&(0Uu3R?aybEZ~DiRC2MPsH~6ZFJK)}jCC&9Z z9=3srWW;Sm82}|BB&PZnhCSCq1Ae6RF(;55aD4aMKL@h;W=(`At;H3dQ4P||Z*%K@ zDymDZV>VjI-M-SQ{14^Khu&=O7)UNY%#fh*K-S#Hw^ZOe4^1tL1w5#*7rWQL!j_AO zs%{LvM)JkJ2Ce^1Edc1>KLCQq#&i#q2hOT11&=#8cf+(nJrbxyHHZU<1P$l_S|M9h zF`IO&jbtjtdZQ_A>Xn3^$yit#M{75C+#v@}&XU|#=?tK`iB&G+(bQ78UGkD@=Fdwq z%anCav0V~>4XM*-o-+hMFe>%>i>)X3pHlBAHfC`P62>h~+?$!7a51z4|Yc#=a{Kx3q0>()l?W zGcgICObc?EuzZNYt$HvhWn{(&4`u~;5C3{quz za!#jZj^kicqzWCuxwTHpuWCu@&C9!uzR9Xmn8Q{zb0FI&}kNv+^^w|;cuDN(C4Jly$lYEqQPGPuWl%=yxP3IFt;bFhPvTf9pCLeeQC?ut4y~ob zn-Mn!Qbw;4OM`VK){G}fYJz-iBqwJuGwCOAD>KcdZOykdpg!9%6Pi%s1l7Ji+!r%k zCUNmJQ)>b(B*ejp&SnpRmHBE4maU%E*pS1^$wWyp4(z*iXtM^}ScObI9g9i0MaVih zMBB}!yV=>yr66#k}&!1DX9-(@i3-jL^IllIFzi z_%}LQ+wv|PFqp=9TH05AmV+X#c%iJx8+9|icd-Aj3b-TG4%h7BGUw>xj}p{;bC#cT6=DLUuvp=h zb~3I*`d%-3)bn`adyWSnI;NH``31ABgt!XFde`#VCC!r8r>{)o7~PqEGvyiZjq!|* zrxst8C%5KEl++isl@;jU^HS#bmFOarE;@B8bzXot*iumXlhD@Hj^{~DC{O&^=MS{z zFgAq-Do}!dL{*xX+mpusqZxO+a=4xv#RDha+YDlM-$MBoCe`t}2CLT*NWTqyz4Na? z{t#>WFS4lP>HYbYOFOt^rG2_du^jRr)3jWnrs%vRY|e2Bj^(@eMCW@5KL5G&xY-YO zgB=V~dR@Tovp_!S*xm#%FI_6@G`H_)bL#gEXE8f}jsBZx50s%ARc@JRs%Ev?)M@nX zD^d(NlJshXva!s1&{8*yqEMWI2(}c6)&!OTH#8OAkYFmW!;v(QKv*tn^^=o-Wph;A zhZEC|OlodYTL)i?VaD{5ideze2$Q-`6}6~Ru_%vIMp#nlw6?AxCh>F5pEH=#MOi9T zDPi%mB?{BpQsqh(S8r@XMXg}vYHrPqFT`wds*>xMQUKR)A{QwifgI3Wk0_yXhzM~* znB<3)Kd;BHGijv-Hy%intEy6MTX|9`_+{}pwL*jPDiV7l;`h{y}t*jFRf4uWF$oI-bAp+_IMxYkbWA&q^wVy>Tf zkXGFG})MmP{ZNxkAYwQl;=>j?s5j#alZ0QrY|m#ODe7 zBwA)Y67#TX+*pz`4O~o6u5{8^F}ZIvOb|6X&X92f$VN=y_-R#1Z&y2^$EO02tSsb{ zfKuVq8zB3D)m{}pW<&((4pd^HN*d%Ep{F;Xx6%xH-|u?_ww{ruEhzLi(iRRmXbwsz zDm`s1M00fWXpCC1%Vv5Cs6a+5>){QCBn%A{96sJAejda~OG~s(PD6hmF)<9P-dQ>{ zYT_zNXyik5N^=1i_et}p@NxvkG*&nXBMMt;F9@fh-3HeyJvjO>Ucjyf{Bj3eL%kp! zn4%RJRsWBbh+6flDL z5nrcT7BvO4yTCthYA1SqC*&h*Y0dzVaLxL(M`QzK`oGOQKHS%&_AGg22a&w1r%qii zUevJM$97Fvl&OS-HXTU7)p95i5;V2P7n692xxR%Dovi^i#{c$f%Jjc)rpnszcXkb7 zn(;0?4%U_HDEO6oYd)`1lx-X@_E0|?M&^`K@oTGo#um_g7RVu}vOfG9jsi zS+KlxjIT)U(V=k+i~^h<07ysgs(Rp<8E#TDjz%ZTnw~e1WF@eZ9Sftq zc`eZ*y`kK=9Bo1GqCBr( z!sGSeo6jN@EOEiBYI;-F!_QZ^SP(bkZ$YT8!ZdC8%&D$bV#U)3K0vRs5T0;Sh6x=& z&S$Z41pkAiBD}f5jhH0-TO?yi>Q!z<$^k5J^P~`+Vo3PL#rr8lNd z&9;mG7==dvC?`C&G;0yOs$-&~igWqUI0t>Boj$X3>xxyBfDzx)X4AzuZ=$gE+SV|K ze`t)qlDDfUD_; z7oyU{CDb6Jrb=TmLki$79uGF<=o59#H$$rD$u_wXM>rXJ%x&gr3M9D z)J(LcZjMZSMOVlv@#IU(OBq&>3!tI6t=J8rO|APK+K{uU3@33$4Cn~A8v7Y4fYSi~ z1R;%OuXe%d5I*CSQV23Mh9U+AHDO_tVU*39Mi}nwkSD58cTG?c3D%8i!QH}F zKiK^x&*ui_aI|Dl#MI_$wO(OB3}aDX_fooiy9fTRu*x|< z3k08#j|$QWz_n-OyC(kX_3;11t*;TKEs`1gz`(4Puw%?fvCsHo<}wIB+Nt$o&2NP2k*;H`SMk3{4bi^u$yQKtyVD1HDJSI&? zkbO4&tKvK`kh9@|rh3Y)Hw9D-GLH}_N8&Eu(2P(+kLY8Ze4{-@rnUYcIg+mvM(b% zwGbC?nX}-KRg(sKrJ`@qsgmA(HPHd#CJnrRN7u1uG+r+rdgBZdW4w7!WGL_wN4}UR zUM5HWgb>ldH+e&rzj-SPg3c?`k~iC9tOahNd~>;VHCWWCKkJ`1!DdA8w_5i7@%QO^ zHVa78;bhM2Ayr-Iy_Tf&(xz7uhTU-Q&+t0Di$W8iRb|;tQ^0(_)=g^Y8ON?Ra~S} zVZ@E(pq{x})QxsZE4X(eUb&)SPk;W;3S^2Go0#c>R7uL=jV~!d)QN2Wg5b>GOMS-= z<>8!KS>nr8Pe`X}tv3h1Eb8e21&*6)^UQDn3RK$DMq6E}e zcZejqGrwk~n?fdYjKst<j(uN1o`nY6RI;sXt7t5j8tLmK! z`k-V`C|F29z4DY#qYQlBL4% zC||EmhrRp!N+RdNN#pjBcOJyx8w0v@LPolAP00s)8BKcizh<(1mZ{yR2C5(6SR2yN z-V=!X<5e)ib;z{>eq2n`qglcQC!zkh_=;LUWtz8JxaJ4rm(X*W^co086rr?OO&&w( zs^Ji}(7#~kq_K-4ADU@#V#Y@xKsr}WOS#Y{PxWH5A%bje2oW_ntWiAp92EEHi`R@) znxiMPeFtl&vEZUxX*SweHuAj#h$@nWc`XEi;($%aRkvp6=~~sKG)b;!hz9h?Vgfp$ zYZRE$FMwURN`S(4baCR-L3uNtj3I8UP(t8K_EHWSRu&OdO#cLX z%U0ht7p%M79+v4@#)tmu7nY}QKtQ8`Kg%H_MIc{D=G}^O9kMQDUY^1RD zb9h||_;w{yTxbN~P(lb9UcJ^6dfz*B^=zd`D8UKYrvP)?%!{_PQKdMZX_8?^1*`#M zX0|X3LKll(0N^=NA2R23_RQo&b`u_9QRfd?Ri9VQaO5!cKNJG6`D5x z4JttY^!u>Qiib^2%6)*;oqIZgHcg&@$1i&Fwzp)t-3lE!4eEMuGrLb4?FyRAd?Co} zsIaoovkJse1V$WZZm}|DiWy_AP}Nki;G4!sv!YyMr!-JXnUzAg(-4+jy~To%A(OZA z3lU6gse~vqtp#7ipB6d>zjq1t(6BanW=6vjJwOm@aGu5602>qTZKFINJ^_kBC0OHB zI7oAk$z}H2BLH*U(Fk%0b-q~O_|y`8(pjGb{J5`|W0gQZU+ctv4$teNLYRUatDxi8U7&kimd>4;7PPCJ3k)l_j|F)!KHJpR(?Z(*y_D{ii)&n$Yoe4Hrzt=o57=k31Be0KnB~{ zKz-lyziGGeO1|!T9Ww_hncBVorvG}o^S2wydFt-=!$q+QnfsG8fceUz`!>MCIUu1h|tVrP6fQ8w>gPfp8C?PM?2N_rf} zf(XxR0pY+UKtAK3;(8E=N_RlVaZgHop{vBCp5W@B5-CLzdPDkmiy=i=DiHs5 z*`(x1lsuk9e^MZ)4sWtUszOz&B>s_U90Uw3h@jE~Imn3Z`e+Ztb=HNA7PQGQFc@Yb z%=&c(9V5y{(NG~Wgy2(r&p#p6T7AiXE!FsMy8}iCiuMe%XgTE|d(}>X3Qm8^gF;=w zYLsXIqyDKa_E;g<%J}FVCTQ-dwG1bSu~I#pC9K)b{vFt_yV_hovIDtQ9a4Z1fDX>| z&6HQ4NuUC1G?G4}B8Glb#Q>xjXc}InUEQP&+F+Sgv92bF4omRoMG zM7~lH9WVg{`n|E`A}Y5?RBna(UcjP}0P*$*F+!vwfi`Q{XCDMfZ!~*Zu{!X-4FQ_C!quDgBE3e)Rs? zvqD1-mA&_t0H>$DwYGTMtWOhBGjBHBU2;MZjQAD zJFDPr{kQf0w5EzHtbx-m)Q`U0&aBQs9VwI;@fhn$2@r|*$7r7V$k*cRB#O7oU`NL$ zjV?(SE8IMfmsRsMt5kLS$1Tn!l+SRUPH`E!O>Rz6UJonMXA4uwbOZppVR)U0Zg~pN z%>9piUAu`XcF23LN|ulo!O7TqmyGzo?cIPh7du|C@>~r?|MJz23ZHmlU&gd9HJE6G zg@t#;KjO#WzIN*!lHvizrZaLmT~qy*nzLh^+$3nDB=O2V)-)~@HUL8308#(cjt z*VxHg+mm-iR`falC8U;;C7q(*5P$Q5od0P`WWG`IqwO_c{tS%${mygL$6`j!ZELy0 zQBcnS5}E*G)mtv90Y}?OCLS%xMU!z5RvJ&|#A703L2Fp^QfvZ=0|#F>fD1R8sVg#u z^;>>=*X2PAXScC-X6kDkt@Z8x@PQr84R@zG^Q)+ngh`!V)$|L&GVP;A%RsaIt>)Ke zny^QwDk(Q>GZtm$;5)8MCo6s%GiEf{$VqN}qn;*#jsqSavx6^~`eB8d zQ`n4k9}pY?n4!g=eOlHuTvm!@{DT5)CKA5@rcP~sdwr9lc%^s`)BEo>=2d1@X-V!U zH^@qdvwY$bI;{Qo`+2dnR3-9CaV)Dk>XE_z+Yb;yf)=`FsLDt>Xr(6`Y3nQu>sUb- zmWGY{H!g>Z(N1v1xQb5RdJ0;gw3nrVCd)g4RMSR?;YUr>wOKR--VvtgUij7CzgZZ1 zuW*2)dF7XvTK!$`f6Cz}1)r!NbJ4SKF#e&odgX7dgnBW|+UeBkPBD{ZmY%wzdSl9g zwOiPlp<9R*$yp_aN8A8vG9Ya2q!MX|hzYJMH3t{C3w~o2yrhOSQKImR3`xP01)F4? zg(DFr2?bdTh-R@}r=S(H9A=VGVQgQsil*j)%O3|FO*5w!XP0mN!^?P@lto zH1~sKO@n{0*EwGW++UihXKh;`8jE!e8JH3**Td{8Ifmb-XvSl|Fv>F>*FcWov$6=A zQQg-T>y#7PuZepOL1kOv1NOg*ZTN`g)sK8CZE{PU_-3j0pv&I=u=Q8PMRlX&Kv0)d z0s2Z8vPiZe9CWFDb`}?z8Z0mALf+ZBa6v#fThQpTxc8g{1EALp={JL|DZ@A^dsbi* zXb7Y&5qXoA<8a2#a|J9R} zf%g^|K>j&{p!XGNz4GotcO6{OC)b91PqyWCdlq?pS&Q?SLocgy4jDhg9_I=N1{O>C zVKu6-SYs8xbCTh2KDo_7)<4WREVz2S03)f>-JhvuKP1e`=n?fy;rbx(WKZ+h#ni z09%?tMoBO327>lRf#T~`X?K67?SMbm`;pu3msd$haGr*5FJk8Ld05 z^^#Sr4UK8k#;}P)|NYURd@Ih2zEj0at>yWoBYf)#wKM#vIl+V8NpK9V{Hz#vXPp27 zv2zJ7`(by)F8I~S-%QkLl+O3`--DbDMdE+)#{U&`ipr@@R>XR+vRYix*vl9?9&)8C zQ1-e2YV*pIZ$dPi69CE0)&`lyA&G`)J_PlBYe!f+{&=$`D1%oCMP+tHt-#JY0*eGp zF`U^5sT)tL8^-a}xccPb^0 z%WKysFG#^xMcX}9T$@A|5k6yLJ2mXCnf+nN6pj`kBQLbFvekscM+*#F82y{_4rxWq z(VzU(+NoM74M?zSR#5-Rh)ji+Cg;@zoew~%>4*9FYC)98%XzB+~TDX;>i)RO|-Z8!bh(fwCs9QpJw$5mKhXp$$S1{#@lD!W*y* zUtq(hI$e}|zh>G0n>!D*yIqI^6EB9GiN$xum0dN3j#VVWVyo6vBR<7Jg%Z6vp&F#( zLYr_9GAp6+m0bv1F>vOHK@AFxebzv1&_O6hU+9H8e-^4g+h%^>DW4vFPX~>2CBZkO zgY(R87`94s9=>g-;aDO(0Wq~Y0@I6FyqRMuvlOA_UtHO^;iDCF2T{{V=`jmzS&Qbh za7WN+mj-vAhV~G8s)a;8kS1F#F*@FqRkOCUyt&iv=h5rr_+Z}a)(8L8`4{-t@aqa+ zO-IRu&x7EK_czR!Tx}ioNlbI7CfgRe<7nqQ$Ej2btA79~8*+se4iM*pJg;77k_A2x zI-9a!sGur^e;eQ7)EsGDoS1vJ;BPH6Mhy}1-=}AaMc@hj4GO<8h~~Ow6Fj^8DtMK= zU);WscSm1zyCwRf<{7<$*tA{b_M%$KRojREB!!at9-*Mor-!(ke)+(x}biIojd#)iItJPIu{nrh9(J@4eysmU*Vza{aUZm10 zn&zQ=b{O(^Bl!*jX)~{y;hkMfq<^`i26vU z*GJLad<6{}kRfCSrLOGd@@!N02y{4G$J|y88u~$*rZwY|neetM_%8*e?}t7Z41W+E zTuN6rx?t%hbJBJNJfq4R!u#5ynAE|MsBIvQazxGULG)dGx+6nayZ$U+55x{p7Tx-4 zSPZ357!U=d^v1kWL`af_!L5A!Cln!CL53w2FjeKHZU<&=_Xn6GkZ1HJQuL;D?W@TJ z3_Cpv0bM{{x5I<;5tJgeOLpERV)L)J{s)D!i~Ng*7UU#@TJ0Dsc@o8y8ZRmm93C`< zH+%`jBxcjkE|R_b&WjyrOyreN9WM&{E-+5mD{UdvtENB&4z1(oUvKUQeF9rzzZg_$ zrxGbtG2x*f*#R!1O6i7JOwP3)J}0kt83AFPu-WuWxDYI;qo?L47Tl&GM^ceGt4p^EX}zv z7Ef`{Rp4D02@_E81cy9v3bM)637H?9C)W@5b?dI*jngFOS}*q7|0?r(uRkR8RzGU7 zy!#|fJAj#b`Nc7aT09G4v@&(nqn&!mC4Qr!EzYeP>9btmIt{@Jfuu|DMsj)>%d_TU z(e9pc!qV@=B`DGykt(f6gbrVKi`+}vM(LCV(g~oo?N>xXdMqP(&c0XSn{Hn{>Lsq=- z5s%t1edvzE|FnltYXcXmRrfg%oX52Dc2qUrY|ZT@ClY`U>TH+mej1cRqES-T`42eV z9l&~RESByVzpg6V7;cs5O?4)rj~4>h96lR$b)?82rS4Up*7N&4Bb994Cj2L zhOO*9IkgKyyaIOxMSW2nQfR;i%FUIWY5lukq2+K*#+beadup|2kHuvqEcYc=@lv2s zu)J1ztK7iE_+snad0;x>Q7oO6rFlV2uRVi0=6RiCcFVe@OZUOW$eE!b7EJpyH0w05 zx3ZewDd!s$JdCCFrHUPK!Hz^uWhq!U82i<{0W$ZGJtS?Pt}4Iu^5`3bS_3|<(AuhB^7;Pmp1-0o zSsK8PcCJ9tn}P+9Y$vGD7=hN@mFlC>@@vmT360>v6j|LndV_cll$6 z=`bU&8KjSIy1OMQY`a0{XRZAk>>Xxa!MQ@oba zP8BmTfeI(=ZaP1-X$4h`c0AbJgt+#_$+>ciRU+*Zzx_fc1){6G%C8UUi-e)GV2KrS z9`))RHnbF|ry3FkT3KjT+1x7qb17Zrp}LevLC|2tNF-P%F}NOM&CD4zuMjPeDFu#dS3gZBB#D3OfgJl`R`3N z_k2-F$}iB-T@}2+^2buf#$D7NJx9a-@&Yt4)nfg%b&~*Uv)hiKRhq_KmP~XvHPfDv zZmyh1_pY;BvGZHEy3ejDf4}243!k*;?uEgAusSw}eeT@KjhakG@b8+PgXD<5a@Hlk z)%+1+_~{Y<$iY3g>zoa5Mq*gEwkTSq`I>9Tt~uXTyzG@(PrTGnHEB=;_|iZE!S9tZ zg|S&vqKWx=YT)=^z2Dd=iS-A! z?0l7X7?pEN6%Mt71KR+285}Tuy#TC1^Z=;8q7jEkL?&Y8>Y;doYQlnC{By=f>;M|Ei#&ArjA)}pyzVL#% ztW%IS523zea@-S(*-&~wRV|Q`M{J)m1-&P*`hs?6kbYkVW&(MhQWFG{#(Nm?Q!Uc| z#N2Ky)@MU8!vSzs6$`RE7EaYI^=Or;T}>L={ir7KI#gByC{Q6$s7l~ zTia(#?Mr_wiG+A9^KO~fiXAtbo@cqkESKYok3ky)bEM0~7Q$i25nhr=#^IMZjEl{X z2V|Y0)#%ez_K@75YIh$<(?{;0QyA?JX2NiF9@lKHSf|FRr>|=T3rfeLAe1AuJ}Ej^ z6oomq)RGpV2lS>r#SnD#qZd>Y*M5c`o`@kHEzJg}L-dTw(O=pP%E9kfi| ze51y7(ZNDkTQ^Y4N3PY5n1|<5u706*n&~4OFOO9l*Ov5PmycIftZ-Ew9C&S1;c|7S zIWL{lor0Cpj2)^B@x=)fID@hR$f6?-wCesAE)-0}&3}ujsW+g4LE&}e*Ku)eEh_*F zh9A{rMDyh)Wc2Msg7tpw$G6k8tTAbP_RRR!?M&k|4JeeFGwm>Y;lagS!h#Ed*v^dQ z?%r+oz*!Qc0!4KFG49hc*E_s32~rw7=I-DMq8%|@xVe&*bJ6`?B7F$-a*HTwu*91d zNTFIUpXFCfaHiSWf}Kk*v5UmF>KF~SI^i_yi^L+)B@U~ywi@3px4WfmG$QDw7P7&TN=yD!Nqz9f2p z1tE*TW5C2~cz@7_0X;QKkH7aC+tyj*HCv6i*@uh2jWI~v0E)k0`q!e5f@h72A~j+h z11Lbe8~p490+NYf72vuR+58xefl%3#%{JnFHskPHqIk5o7vYry0cEgP%YraaI+hB0 zv9}U?DWGyWF29PuHbSdO^w2`>VNZ zlcn%9FU6kvpH9aK^mE&-|ILIm1b#Z_v%0)aYw%|fEFwP{AP9U{#V?A~?I9`8C*bS1 zuKYB=|41Bpuk+RVM|?PScSb0m3=`1k)c7ok0%H)Af{;Y}boyFk0i*5`Tk&AK-KB!3 zcr$@SD8&aM7oUt&;ytk&U6YlnS%E-dB1>fN91MAp4H1g5y!4+C7f3A`v*>ln85n|-~H4-k!`w5|pIZNp2gxwG` z^jD&>I5Si+T6mgS<`;h*s;oSrgF0;l%nL*M;^fEN(~}vzmk}_yc_|y#(e&-_p0J*D z^@7|ff$jFY0DM@8c@*eS;H<$Az0zoyu9TrmG~lWT9v&G`D(@(kRLavbNKj)YN?&(0 zxTJ1$Fd%5EevriB8HLdEBwUj8x&3#MOUE6Y>5EyEx&2OiBIdrMSR+dcax!@}j(=hl z#Z-cZWbEt6%mw5n$t20W%JKBLp*89p3#E%hTX2uA2Ab!~I|ueWs?ZU46=(W>&VX#5 zldkl0QUp8<3{DEgj<3Fd`@DvI5gXR1)!&)*tdDL>n)SL8yaAkco1yUI$=TbUbiJHT z1ngqzY??Vii!d;0`G;8Uz3epZ%1O2)X*@>GaH@t1Z-$U?K+U~URK)7$1Hkld7~wbqVd8Cx&LK5o<4^HqPfF(;(O19Ds&X5%hW`Ooel7sTk(s2spfQk5VI2^aiJ0$} z+(5-frm1Kwt4W2f*gB~oRjMq-Q#f_UOSnuf=2bH zQ;yS~uDEBlwc%A(=$oD&u8llg{K>a)KQ|a| zUU2Cee{vA0x>@ySUnFtVIQ2CSJNQ;Na)4abkCoiaXuSTy)qbqsPsu@}&jc-U+obV( z&5G#`ekyy!E+)PiqzmMzoju{i?sSe;qT0w3|&|IE}Quij>0LV*_~D-F`UsX5)L=5_?rD ziP$J^XkxcL_iw%ayv@|s%KVt9a(0%&I6d3_v#ZvUai+R^Ig>8hh+)VZ$WQ% zPLli2iO=udIzz}Z3f7~XkgE)CGn3R3Qgb#-v;Qq6>3&uTvImG8YVM|77QyB zq}qtdmPEj((uCp1Sj;CN&$S^i3g2hpW6hJtt2D=W`(DTbzvm8-+az`Sc1#UpsX zSlEhgIz||kVHBr0iHrsJ5Et^i7B`>e^W1n2$&z=Ad)4N~1-9Pfm{z`aY`t>i5qQiK zhuUkJ{Qd7O*~8kycsHP2(^$%U_rX1{oztkzaa3ao6=iF5`z1I2`G&vB=j$w?*sYL3 z)xq-%yJ}X54T$sU3dx?I!nC+b&!exYbu1A5I*6@bmt9$okY=V5i!Z5|Q_#yRM_N)j z)r6t)*GXK9RW^L5+UORPY>_gup%=Tny!{Q{;rMJg{#u6eoSOAgQ-;?WGJDVY4s~1X z?^~(cj;#3SYx0}-t8c9tmjp3@IX$ zZD352!>Yy(Is9-I%4xPX@GaJ8IfB2wXYf_Qw;Hox!zAP*D$E{iNsE@M${zZzn67c* z;|LnmZv(>cW5QB4`~1mk!s0vP_~dnoW4kYpbK#6SVxGpYr|A{b?iWnqbEh7+G@G4d zpUwwL-%qFeto!;Dbx5mot7?89o0D~N_}x#^m;w(a+6cKkLALbVU~Myhcruv1VmuK* zOmV?^`cRo&Vhr-csh8ToN&Rh0s!L92Xj#AYQxptu~@(7T2ad+k!2ks2l^RGl%7!;DGqbXJG&w zq1S9}XkAKwNIHVUbU_(Y%aIjF=Tzw7&{5W~(?~5}lI~?}GdO3iPT3XTl67O2{GIOa z?~h|~K3SG5w<~>c!9UD*R2?@fFFsx_x2N~;;x^mLlM_e>j6T^=a+jZ_%*ul}lptAY8Qa6~jIKxH3MlHlu*H595<+p20e-&NrH?(b_MYiNt$HjXJ7y4GbDU+Ht0aCl;x zUelgr01j!C$)@FcwF*^cQH{H)(tLjvZeDuAq#IgcZr&`UXusmXmUB-(DWql{*jhdF zdhdhsMjq{%mtX=Vz6G9ZPo>qIm!3i8VtP`VtBZ+Iv&c25Io{p)*L8r))+Fmhe}$N| z&@%|=xuyMD(TuezHzP!|KK5jaXByXdXXukT*hartiB1Mj#8iPs6MxeMa#{3F%5x@_ zSYtJVrmpMAt2$WJ)#t+z`yiJ_UdPS2Gt&gcxwM%2p02ZNP}P#fGP0f|FaNnlq6GC; zYX5|tloqZpRot`E#`ZRBL#U(~{9y}qiNTiIA&;kXCw0XxV536Ha?0)VM4D~Oqu`hR z)FLRpHht(uaLS*A!&h17Np(Co2Hw*J9EM2g5|_pSDlK(IFdS!Y_EM>7HU5Rnl!7P| zqaoIN_)Q@5HuGwR*6?zDmcZMNUu2gE6y}!%W{gC$ER_9&dLO81*s1gMND)J)8`7l!XYMgUAkByVcz}ri?U^@oT6en=77m{@)xN9X9 zPH|x#r?oO;TC&FP585&BE9^wHD7O z=s3*%IW>4S{oMBy{>@ISSkW*ufK+Q-&RZBAovqDkx9X(AS5Dl`W4O#h4qHsHa=$?8 zd{5k@bvhqj`+W?aQ0o_$n7$wmp4Z$c7_|?ifuwRmop`LrTw>MkHh?!d;R4l;oQYVA zq%4a=nh^vp`mUy}7zWMAr%Hd}De zGB%j0?H<~^G_(0$k+yog)bV@o$tM#~_!ocf$;0Mp+p^ZvaWDME#xXaA({%SY;_(Ap zpk1ImpsL5NQ4(AlNV8QLZ?G+QS{@rV z4ABD%s{Gh4+*_S25o-s}GeEUjJMOa4u~;2*A)hFaM#hVj4okc^XHPayaXenPFE>yB zP~BcNxr?dsx->5(NfSF1dV=NsM}1sH-y<@*1{W=hV_$UtA~#y$t%p*+p;u+L8bo`pNne`oa+3XXS z2Q?SAPvIqH2_sNHX0Y>)sPwAh1_?;Si?=kiNRp>aV2cMt)sz}fmU=s8<|3ejpxH>Oj+}iPz>UdhKdfLEcZ37m4Rmx*%Lv>V6YOO}_QDXV%p=4T%0uJtf08~J$zay_@ z^-yJ*yk2<8$b>Te=%gjL+vOfr`=kQTsk#uUnll{L1UE#6X#}4-`mLOg_{ox-mTG#~ zAZmhaq#zE7q+pZ0b8LY(&gd}*nW0IqVdr3^iabp?nL%bR z1Kfr@kj9|cz7)0i&MuoNXG)=>aaSjTUP~ph`u2Dj1efE&p_=n`r235tIlkG}q|p;i$twk#&;N?( zwI1$i8id4nC0CR!{f(FGRC9@B>6hmDjAXI5xuSaXm+?foQ+mJ0#P?uY0IxN@M#JUK z(}vZ*B{{zw$bZ=>|K&`gy|y9qoxd^B>%F^4VfVf4%G6Yt zuG8TLK^VWJnA72Mqx1wqFMPdlGe-kg<}rwcdGgPW|Br_b^peqz{#9$5SFIi1z2i3R zT|eFI-<8Z>y}|FYc%6sWoOs+jvv|`B|IeQFH-F@X?RH~#q1hPUC|SmC+u;}WC-$ZK zZyYAg?Bq$SK{I*@*|{{|YXmba0?jq2F$0yAW*hU`-pIH_b?brnJ`vwD)!9 zD&{cr0`p7e-rnw8>g;>b@D9M&pf5^%iVu8sXh$XiAFeCM<_OXc5vH%}76Mn6f$?j&!?D zbBiV|SU&hcvpuajRjsy88Q4>rwB7u{ciWzZEKMDpQjcu(OD2(c!tFh)n~Y{d>rMKd zcI%OZ$7cGl$$5p|@V*wKiJx-ygxsvqRBviBnf0wV>vxLgBgrLAt(#n3l7|T2rBiPH z%MbB3zx#$}4aY_TS2|gCeLK63(=^}U_S<;4*3yjE*6)EU&OPh#LUW5v!~b{gn!gMu zKW>-!H`PMT#!ThxD6<*!b8SLODpkq@_-#_>_m*0Kpq@uVIc_(K_7Odh|FRUH!ug#L zN4k3O+v}ph7l+B7tMi0Pr5qksW%C)qw=~Qw=w~g z%7CmsqRAx)dgMiL6W~mYrnS%mKi{gunSnV)W4dtQD`YLXgRK3^SCl{hi_3Q2{!Apr zHHj=C9INGYL>uA#PSfp=um=ZPpC$1V@4e4`*He$&ZgTqhh?eLu)f+T*m{XBwZr^#C z^6wn;;IAHd;8)7O{^|k#^0-mYTR6Q=r_pohQSFSzJ>!43a9*=>`|j88+c>%Y%x$-P zZ`>1)Iwc)}CK{bi&slk*H^wjLYkC174LwXhbCe{R@@j-=yrM?%fIyQ@$wzUum3Jg@ z<=um71A@CXF|}=B`s%y)?4pr+dU|F&1nCuHJf^IU14<_&r89GuKHnapCRypNxq-nUomEW_zy#-K9P!58zAsmZ)| zdS5j!(2_H{L3dw@=36W6%EO3jZJph#RKu9;%$LIJ;M!Ea zp2=+Ut@n0BSDik2GOy|2@~Mw<#`!x4LJe;rtlQ_KK!ob)ir(@s!-&#lzLHCU04 zC*?fN|9VZ5hUMKrdE86|&BUmLJ`PQ&ni)91@JK86wGph%9Y@-1(AiKU~|LFFAJ#bf@N$ ze*&0_w(fNsvCUSYlvs_1D|@MVJA5A(W^L~5{szl7T3vAo);k-p3Gkt|=F*r}+=r^l zXaHJ?xB)a~k7M0*iOU94b;OE61Bzy7#Ib5AUIknyieJ6%_(Ok6hB(RC`}9G%CmgB#e4o<+v869 zqm}^6AZo?Cx<3AZcH;q;bM?kZaN>$}`>F{nM3^%V$1tvD|t=>y7*}w`0n_gFw5&o1bXwNeC+OFSe zVfp^ztt;#&e(oC=>>pm+Cq2((8T8_gr!i};C54I3kjSY!KVeQozJe|crLZ5pw=E8* zD$~EkPU<-aYX7pC1V9Nay< zy7MA?udn{hpD%ouO@8GwTW{Zx;L{sd`&=&H>WyhWvElY=TxI~)%{a)I>zJ}sjh7us z%H5Un2;EX`WWd;2?xqHV?o=&amWrJ;QWhmmrqqqL)@$X1t?U5vjRU@>E!T2@v7KIARBmmr`pfhQzbs%CE(cuc6)B>Woa2BHi3tmaho&e%>!0EN@ z8CwAPn$_r=4D|d3;-173;Vfd_aCO`$TpqhuULk;0Jsws8-K1__^MMn&wuNSZLOL-mgh^UZnR2I)7O1mIIvaL1O631*eVz=C zlXWLHSbzCTa?LOGwxO;QzkK4B`!}$^O(>IV+et~dIy6_E*H*)5+4OH1vms#z=wO1Bulo=beiVbrbIKUM}XBK-rk)ULdqW$*IIyY!xR72jAnVn2 zavdy++!C#-g9Iv8AQ#*nNKOa^hjO-NbdH!JAeGq*C)P(Dsc3_G`k#LyfrK!55s zf+91>j4>OS_hVK@)Wrl+xDoUEy8q_bqW|UuMUtV4JjCO^Sg@v){WJxm-)e*fWgO;L zithQ7(!zP?Dzu%eoHNkhNx-4h5P&K-n$MTk!Rk};tVSv_hH46T|LE$5T`jXq6yy$- zjRdaLm0omwqNX{OHIQIg$~jza;1$RS874tTf1CuM^Jq8^#QV2BT)CkmEBS|4PoA_} z=K;x1POcvIOWBSaDi3cfzWne6(2Tx^Uw)I}W{UBC)dt=lFRp*=#Aa<@duU_2Z(`S4 zbt{dvyC(Y58$<1V+RY~(TfgZu{!e~SdD#D%P1E1Q99mTxeFe<6>zL!rEzF$&*@u~z z7!*9rX?bHszB4J`mzHmIQFStyZ{H}eg+BZkLeTQPwmEXLQ&)(?oif(Q%?Aw)( z8=XC4tK8zC!{Ow0X1(6kX);+x##f^&kjr%z)?^!JGI3giDWWqO_3%mBjYfmfXg8S6 z27}qsXRz^{#@5RVyfCccd6sQdks6%BzwPVRdHOcrbLp*@?z+Jk_jtVCra-sxhFwr` z_m)17F0$HW>TD0hHJs6E)oM-sZnu=Q5RFEWUY4v)o)~+))Y4xV2RbH*$ zV%9s1<|YGt+FcrLlUYZaSW6SD^fWXUX?1f?%)F4J4y|U@ zmoz@*Y=`MCHsxV~CTKu!YozSaF5E!Ur$+0UdvITL)l<)m+abo=^YvXp z>1MKhxyB6P~2x~f6w<4fxSf~{5A ze=92SOLk8xRk}u%)4smvH*>0-HpR;mb0s%O{w;HwS&zF#?ELay-u;>vt~Sj!<0&+m zot&Bgp$$$Ogf^%{q3!c66K+qln#P}sZE#*crDEHrKEeJ4o3SG@xN6%jI@>P??)D3I zraPT)T~ECS&4Rp5_0?dj!Io-44aLhgJ@fTbL%$plryN@+Osqy@WO@5T^B=kWuk%0c_v~xlaKP1E zY<78EP|p7(|I)R0{lm@HCbP+4GHHzBCdbhK9_+k!b^imartj<}rDOl_%I8-N4sYr) z9oX*P={5<1$)$^bY~VTN&(G(&{QhGbJeRxU&vwLT+TA<4{I0f0_xFk8fvyKzT7BJK z_byk|PK-TnkE^eD!@vAnLyW>^DrfakUQ`t^(Nb;2Y~(Daac$+)ZK<%xs+(m~op3m$ z%Bc)4HJWsPs(D9?Rc{YBNdX)8|5EoJ;BB4f+3q5M zTy4_&@7E-aCBpyvJnsPrQk3JQ{jUG|Z3;N!JqPE!^O^TuXG)Kxb!rEh_{#l!qp4PF z?TPi0L4!vDa(Q;|G z*ji_@_s4py+FDa1fB#n|h(oQT_cqlDW?xVru&Pb9yWFv!xZ0|(7XqDIh@71~sGV-e z#F;!Jm3@+}DDb)rmsyy}YF&xg!HCAW>LsKy1eh@40L zHYKV(naE0SrX(5FR=%I4pHp>OTii{S^y3aEFKkFAC9hLw?d`FsZ3d@s=;0J^RH<9K zT6A_nsPWXgbo$O@$LI?EYSz-^Zn1W%o-6%DKW|kVC26!H*{PQ_5pSJf*R2~?tBic= z;X{JcU{f1gnj&VM(<`akJGy+L)A2a7YqU|>dOPwLb19fW=!3Jb0pfIFh_X|3DKu1N z_bnZ3yorbbUt1vZX71P@Hu$}f){~EqP7P1B-9q+#P4n8lADq2~N_zpu#Usr^~$hkW)sEOqBQ=S$a4N;THM{rx4V zs|0I}G)W$T{s3^$Q=|!>P5it!dL`P1J&pxPlbii!?KSJ z42%)-IvMq1UIbO%hLDrXAv;LKxD5URO8bi7U!X8y{2M_J6-$7JvCPZJ2pK;Q3?82^ z1B3v%N12=vr|+t`61NgpvU54AqzSEhRHkc*LFj;|68YX%o`yWYZcr6G0uy~LxY7Y? zC+`Y@IMTt06*ZE*C|-o0CE0TK@Bo%3X>)Z z=7wHyi-oMY7TQ$(MDgZ>r?rpJiN?_L)6cc4%s8k zlcwvgKV#%=*19w9Cf-^4v!A;CcB@AqD)NtC__H^Ryxr=3*wai5h0>2pcl@0@z^>&# zf2PhV8_!&SUFk>jUc1BZ{wW!A@=d(_u-9rezVT;YDEUio*V^p?_ur9wNL|55n#;J0 zjGMVxk@8NTIL5UNBVN zSNJI|#S*<*lt}r@O|%N-(AN%U`vyZj`OW9MSF;6F>g6SYx{IAEp|S z_eY1L(c$ml=RC={WBh^S@NjbJ*_gXj;df<}^7G`MjIwOJ@EVj={*?9o9<-Nta0zah zBVaIZd4tw-p#@{hT3~8$v)Yu4IbAGgDuRPB?`~lMkX`aiYP;n0MHS;Y+ADl$;$ntA z`j2Zi(Z$Y0s32(~AU1XbqD8YvWKKFTOwN%7QcO&McX%REy1aC%cUTPCRo1R(u+k`ABe#$eKrHoI&aya~SMoH0?uh4*ao^d5DJB4Cm6wRA@2J9o0m!f(M z%qi4k4rD#Yuz9=C;aPBZVO*X=8(A>AyEI^*$Z3H487dD1BCA3b3mT?3Nyn&BUQn5% zF)%l{yXZlEEgF)6-=vM6&xccVP2;Q%z|G0&<-E#_*?!$tkpDnnK<5ON0WDS+bTWt{ zO=4tEkWX5CvYp3VzXa+sjbHro;tQId=^o7si(mdCt+ouEkxQAx#4D2Zxlb)+KSh#9 zHd!ovJABzslJ67Mr@m~r+F-)AS?yo`RO#(f=#z;Fn4~8XFOg!2&{`~&;-znFI^x^W zXMuHyr#fayx`W%qakd~Ja-_Q1X9H5Qz^BW}J^`JBeX3RL6JR>jh*M~&i?}VG{m&=s-v&#O^quiScUtOeFh+_U5opf+&nk?pyq61V|(znuVEDp&0pWh{!r1dQqnHQ`~}cbKiKrdZgE$>4i;(5^OY$!!2tdom7FUf6=v zAoa!k9PL!#w#;`zfcM@$a9la-3rOKfkxz;~&0)i`QRHT=4OG29p(3f}PtPIBYXC!aX>qUcB8_y=BluCLlL zzVVA+-TIp15+~z{iK*DqVtrHno((m_HOBD94fSIim`hx1lf7oIusP+}Hkb+Ad+TWb zlShs{IhbZn@v*+LPdt;Uc85|2D8{f%MHg=<-)Kjy-vl-01v+ zJAy;e#;`H4j;}G*I%-@x;)6w@bgu8YFW&V~j*tPtFTQx}2|DkSaptEMuh_NyYhT>x z^99!RhwFGj;x~p(HN<9hIy4*h(C)Cb7@LwV^4ihnz+j8NDn@FG%-=}Q`h)*Y|CW$Y)!1yF9<4rYsT3jg#1C*z(`~!nYK?Z zJ+GMA%5f5OZHaNSbYA#AS2)V@VgbA5FoxPt@$LZn-45)bjXNF%%Nbo(*Fz_;;Y6XW zOc5-w5%T-?6mxql`G7tG$zX$Q=rg>aAz)CB!R$iC_fb7^5yFfh#lfW=?cNW4U~mt} z@;hkXFm9!b_7wD)1>5?GD^PbjdYGPVq>E4fz!2>@PR0hg4!N@I_v1lj=C#G>Q$ULa-u`R#!lH`vUg!XpC8g65W~HLG-8ml8hxPjGGslk zbcZ#@D7Mndk(@1$Oa9VBS0PE{vzMGs)|z{&W{^uxGfTEAK1J5rg#?Clc$V_E&=%|RS7TT!0i@DvF{0L!wS4(~e z%m^`yv4B!GIoD+NP0Hz4PF)4AQ&d?W+X#0Xknay#S&|Hi3f*z$pl z3|xA-%`!ccpYp+svXPeENhOcZS=?M5SWfdNPk?_)Rx;fLOdqV$nb0s8Me~zNjlr^j z1*%L2U_q48dYY8M>OosKg?kCGfA}5Dody4!#B$rO9-Vyk=2Y&nXQm>}di!vEirVp5H0vAs<8nH6f@PAWnYge#CA__8| z6@^JfJFOsnd6``Uv{A3I8X+-ky(C1xy@3!Xph701q=Iaj>Q+z^)vJ(1+O7M@oVDA! z&uV>*{0bB0bg$WL`{<$4*?kuQd`;4lrL$HmoPQ0W++IUGMJT-Hd%2J+bosp)@?-UT z0rI1u)rt6Ce%HI=kg8RHd>Km-d>?{{kMzhIz@4$6hx|%;5i&;~5FVSoW=Xd;l&A70 zP`VpyrTmsF@s3u!+Zt^aSbn#_$~J>{<5X(0W}88iRbW_ zYO$&1mtLbvF4Y$sFMcoA@_V^fyjSD9^hFoJS0SwXnMnmU7GG=)u+G(WUw*}l-fIFo zsPz)vw;G>^e2=f;xD|Z~Tp1~+x*Jv;y3D9m&Qznyu6EIHmEz|hbO#t9(Y2B4hGmL` zV)b+?!n1*xlQ}?;%?>Ql^j0Z$4otMpRCiJpN_6nxbH{5{!4Pn}hJbcd2%;khQh>p_ zJ4o;-abiGz0Q|bCL@?z{;g8eV5T0|8P@N}{q!+Nb(@-qc*g*o_a4G#Y{OX3VA=+~S zaDe`7H+%;nhCjwgFR5k~?8Y+iIO;@D6)Ky|!G0d3&qNEuHT3E@o}w>I98Qqa;FO9! ziHSGE<@A3w{DabT#fGP%zYD)ZWqN0K$cZIXuAqs)FEqj}yWxhY<2&*Fq4q;gFsuea z4a8(5HM@z6zBW`7EyB}_Rm4u~6}SOI-3q;=+9bHZ%ZAjQLHZab5w>WJ)}z7*)RU_L zVeM*3BrXjm{uTX0N)*#!GrNFL@+d(5^8xSS5kyMJ=x)#Li1jNigz6 z;E7hn>kT$Ffw1gGwb2Ig-UgAEM3MfgK-3YHSuKG-+bsziK`rTcy+*Ae@Sj<&(-D&_ zI#gx{ff z#T#|>7bS_lp-(5)$ng4tXc9U)RVvBCH)Jas)$-^ z5qO=bSE=FAdEzij2CZHt@w9hIf>~=4jXZr9-o}f9+E&Yp7RyD5wjWRvVo|9ydg7Hu z+H5A;lEfDhiJ@H(!WzQswJIr~QhBv>P^bixhPSu6Madxw^g-1Qi<4K?+I5;HmD;G% z@wDDW+Kn1Tn}!&zdO>AXiIS#<7wXJ@qNQC&Z51^&f|jS1K`WdJ1{R}%K7mazYXpH8 zHLVt%U$*dOfdH#0?T~_2r8g2;s1W6Cn z&XP_?FQ6~N6GaWnIyGrq_@{NRJ;g%TXLG+l16JZY9(Sa3n~{h zs@Wi#r5ZX0bfiW@tn>%8^o3ls&$)?NVRM*sbG+kF-AUI5Bj@0v+%#8^K?l`CCFg?wih?Nl0a1Ux_pUaJrS!uuNguvVYnENnfBn$sleF-` zCqlGv^NFTMP@?3|fD6T6uW!`9c<#8cZ-d<&8oBp*PPK~bEzYI5KHw)r#EJx3$t8@? z?<_*byS)eteoqlR3e7CnJ^4nyD~*hV`I>MnR!E|&C<&o37GDgr-q-MstoD(w-lsaA zzx?mLa5M6lJ4-N&7O3h=*=oFg-gBv)(q4K&Rseqr;iPx6(rxH3uyO>TX03qL0qqOk zNk%ZECS_tbz#|Pxa;wC(%5p==hNN!qaJG`ILHvFw)KXWnEqRd3jk9^kKa*e7Rk$u` zwcC^&=UbJYrNWwRFXoA!R;C@ycKOCILi|v*3_G0r4amQ7W2CH`W1Q#V>MUk31vM56 zjV(~3(THp@*b9N}Eidp?Cu;$_uuiXdto)8LNVb1PJ0w@+??W4a=Zc@F;$eo?_56Y1 zx6v;}W_!Zmg(I`W2hL}Ct^}FR^W@w-)bD)BN6YYclkD&T1dgPam9o4qdjZ{7Rr$Od z5FHeZyIP{;2+9hdkC`5VWnbwV%($y1RV+zh;nm_|4$mJB)jvWGm7adY<}nz;5XA(I zLl2Qdk3c{aU~VD_(j%p(>7lxo5P))GnbOnrGAIM_Pnqfqf!YWzgq!1K^`S7kOtP)K ztn%|vLdk3A)LF#Ya&u{J9k+?w$GwiIJ)vSD1RyMWtk4|6^m<+L0FLAowp^2Sf z7I4dX%~Tq4pYnZ!sMK4Sr8Wimte6UCEhhmd1|`UZU~xc_LWsy&x_wTI%2#$=2}(*V z1QMY?IC#5i{N}!qVQK5LNABHrlBG{N)ec|x`YQ)?!_)WPcklGDZs5xG-9CrQ6@B(_Hp@9xv9b{S#lbEI0I7wT@ZfmI9wg<{aG%bIsV1a&(t zJ0dR-P8USQ%bFNk#xHg$pwnh$4N4|bA>2wa>WEZ_ST@%#^F~k+Tj7-`A5)jJoQ06e zvg7fYn{S!<=FINhJ8!*t`?t5R+CSm_c5O>*z2MW^)IDLd+hb@D{N8VR!=bvzz5M_3 zezUeE?0wwp{kAu}x|Hzsw`Lxj+3~HJn{V5>dpEuH%H6*X(_1$P4F-?f9PUxu^gf}X zHSGPCxArmbQVrdx^*rVc(L!F|%0gu<6O0k4rK?}T4YM&IWK@3}8Jmbg%!f20T;Avg zJRH4Z$pl{-UA;vY3kOu!E6ktVL+|5B+v}eoq;LJ~+}W1*zwqWW=NADLaq;vIyS?Vu zNn7rr!LxJYL-pS|^URw>&1?xb(7Dlw*vWowl7lde8o>C>Tk7I*%#3S9k77fyAYc}p zpkY~XUi1+btX>SR!68c}j6B2?@H@*A6# zJ@SGvaP3VjHoM@v`WgfCQz`^iD*5aNFs}W=6Hf zTW>XLM`s>8z3re{YKiQ)|IyPk2i2lU)Lg?COtQt8t(OFENh0UHf>fV1T4dAG)HNDf zKz(rL^rQFf-207KM`-im{ae}BJ+ZC(4{r{2urKmsEma*&qGx`VKbKwN=4bt;Egr!n zQNjN2uo<`W>$6M$mFJ(HcqqBO!KmG|No#D_o_uJc??hj9>CvYzM|Q;6+)F3reALI1frDN2 zyBDZ&+iAB8_S2qbmUG5*F1#FcSOFK3SIDlIppx=q0htL_bPwPO%iCcudD1%@20ZQ2 zeuklZFx09{C11+|iC2)V73jq1(lDJ^ z0xVgghb1lrI$<)gAob2mrW#FzHZqd(&`IVcjZq)zgzSf0T+Z77(Ar|nnULt94C~Lt zXNE09m>s`rzkEKqs=WB4XFhQQf0=H;V$>}?yXC66$0h{L(6-F>p`}0bG}ckk^<%n0 zi$PbqYUuiHy9fBO!=E^H=J17IUnjit%s*VW^sLTc8PM^UPoAASHgVzCL)$akhWN3X zV4bhFbQL`}s3RX6*uCv~dbfl3pZdgML32ZOj-ZX};*#7LcbF^KA@6a;(>{?;P-k9u%bb{?uHdyb1uSSb20QM zUQwYS<1a)yNMISv8hRI51$x;N7O=b2KzDh2k@f}Jj|AFdvUXkRf9pEUEKrV$>;kvM z0pevDiq$94QekiDXS9=EfPlM=W$1SyYwFSwx6WQhvOW(=mv1>hXeFl}w_5M3jT<{9sdDmYEQjdgwX{tEKHOKfM#jB`{?Tx(O2=@-?2hpt9; z=Ma?|HgG4DTtIIzr-sE%z^>6o>L9U8ZFjP$ypz>m z7iKF|>AZ2ROl3n>K#+K<6h zt|E*yDnwsV%xQ7bzcrd0j_0l`0uOyARv5h%=Bv>`2vWTRhF{)L9|Ky%g-#bFn|7h+ zbRZ743>QN^%s`AyVJw4aha=j^f+{mcOGe`0;fTj_R!go2S`0yxVEXew3SN%|0d1rC zJLzQD325s2h7iJpjLG@nW;*3%tgnb#v%}xg$LPEE0(4?SPZ|^aLlBnb1w}lPNMk%K zm(E`?M`eCdWp(JGt<74Q0Rh?)0LTSGMQ9M?V!_oJPsSbopiOas(ldN2*{BLQ0#r#? zG0^bF>=?j(pi<5?n>81j(Id) zO*YFq%N&`!Jl=ox*17n7b03xwBMnS9c=va(sIt(&lp4_V&foGaF(v z9VvJJGfhjM*xg>|&1iabBP~|KC!gGXgJE-gdcW%CyGkbx9cp=DZ{?A2|wbI3^ zHY>fYI>yFKXYMPx(_CQ;I@JDR;SkF72&dHyQwssO2@AyME%dfnnC9HVB4)M~^GASv zpqDmCES+nSbA##Jxb-E!y<=<(ghfzo>~l2@UEXPIXd@k@g}yC7`J8VCj6aLFp$kgc zD_4?6~;oTH8U}DP zM514fiP%@)0J+5s1FbKX+gmK`MZSc+lT;x(#lm(Mqvt~qpDX72I!w8t#r$s7Z*n^q zb3>Me{-HiwWMKe52jMff)3UH@=Wbi1KtHQe%Lc(blFs#~a|3DamBFFiefStx$S-RJ@tg|&-Bv;pO{qbfq~t7j_&G-bjnRsb2O_&$<`P- zY~r^UCvLW?#P-l8m08f3R1UKzxOx2e)sH=Y>Zbkyr$u((+N@dbPSV3fR0|^EO&P7$ zZMxAIQvI~_v)iZo{86vf-{kG--SqJ-2Or_MN9xj5EYVdrJs0e-$L? zh6(|%ZHQ|4bV#|B?;#$)Y*gnjpQ^P=Dr>j(YgX&qZ^QS@!TS1x^xuK6^!I;-{=1;; zfB!gXKJHU?KF|$U(Tlp_D(lxIBOX3@@L9a(D_^;w?3ca*mo2@d>{4ANqu5*$+yK>7 zCb?I+!aC^J8{+^*5&&v|yg!K9As~)U#6czLVR+v?i1%#=*=Z`8Q@;UFiE4yORD-L5 zD#>m7GDE-!?Yfq3pd=_3LL*Qn1VFbTrd)3*<~Fdk6P#k>2-QkY=eN+SMuzC**U}2% zr5os0QvjyC=sG&(4GnMD43bZGs|+r(&aM<7eI$Z|0&qO_mBkl2HcVnLz=G8Ald6p! zq74Y^fzY-Lc_b>|nV^RdQEM}P%{Ej!AM}WvC#bQR{DzQ#HeLFW5kdyP$);H(*-sd? zf3D3U5Qvb#uSHLgWHjB*Xl*0Cg=dlBD4Sg-tw0C_vco?@1g*(MzC}2Cxv}I#AQASr z!q2gp`v6AIP%S%yYg#Rfp&2j3mHI6ZJcDL>rX{l2O(m`dSdd2AA>O)m!$uaG_llsi z)OPk5#!%n37DQV&nuTpZYHZjDlBk@~tJIvu6PN(a^--$!n*s^1CjX3Q+zggN}{ z&|st_>rSHW9dk1@@hI>~g(Jp|n~?fI{+zc-ckGR9nKU{?ourau-+KNd&!3s=hx&9Ty9RdD9ITOFS)oziy1VgDLOmq(Puriq zWm9_gwhs(n^>Lr1GquSs+u-iA-+lJ|FZ_I0f8(iL4PEQ5o7vb^I(YbFFS2|&MFtz- zc5sL28aa=3>cni_5wy0OuICe*pxVupC#ZfD16z|4~db)C81*I~va&Eatae6^j)PUIBCT z!NYV4KWNDriUq?#c{6`^Y|5XWw-_snkJ~?WN6zD zCVjvBlBDY%UB3+)dl%wA)yf4|O%rHU$3t|1aMBKPMK>L%oTe#+2?~Zbdf1=N?U(cB zhBRA0Qr*pryoup307ijd9e^f=5ecYdYJl#9xH5Y^uXGs|=wBwmhMkCs&k$0sR*@v= z-Ejx#*}grS?;*0U!O`LT@HaLNP5$jk^6UfmY@X;ETi=!0w>Q(dvGgy`oc?LL`3vi> zyJKDN@qHs{-p!>w;bb zDE^B!DoSKMKy=EWS8SO60h|I{mIrPRBWL6AE`+U4>}FPm!;dguA(Fwnv8O?pedV@6 zd@}HDX8BC@y*Pc&L5{1!w=#21u8!+fa%t)OU_@eOFVl$XtGWv? z!?@7eR?9k0!=*JHU~s~G=@ohgBt9=?1&*IJ+Ll&lMT^<i)8ff$X7eVnt6G zWdHO<^ZiO~J6)oyp6}x^#J9OSrBr*l73@?%RGY*IkC-fwv)z^^b7#^UZj2KWzi~tQ zkI2S!ga!S~OiGLEEHGWJutlGk$CBRMjfqdvRa$!qUy{qYFZy>{VGRgjuV`o_N)kZJqJcP zZ?VvfKI~>cT_Fr$C)ctXr%RXtL+>!|MZyp~3*&Tf#DLbp&p0q44Bc!f2R=nC2)7C# zDBiSUW;a=l&T@7dgxz7KDJ%BPAq$M5s!^4Ce+0Jh}Y$Kar<_RI2 zczf%HBSWA5cIlO^JBM~S^x~H`Uvb6eO$QI2?-Bm-f}cE0-srm7E3%Zjj4a!Mj=TSs^OOS4)@Q7S@zWIvu~EWK47U7C@;m8M`3oH>Z{J zqDn!^g9s|%<5URF1C33gAYi!1!5t0Do3fNu1xww1oY)@!IPoH#`A!YW2Zp{N)UU&IX zTK?PgvJJxzC^1lk3%}z~{j2mn?mCXMB?d(VM3!6%*GY#8klQ82)n^hB8b}I3V9IJ9 zaEMVM0GV2^g1ATtkA<~br@mgO59%zkPFC4@lZos%g-yIew1^tPE7a;eR*w-~t``@* zlW-C6J|1swJ`SYZrH=$7?{Ignb$#immp^Bu+xl91Q~+#1lfOgHI(S-+{+NlktLP0a zx*)x|-l^3>+3>|h?|g@g&|iSxInmrqPBe8VBZU6g#n;nkt?)&#*fBry4vkPr?lO)} z6cC59KE^mQk?5)7yxqhmS|DuNWRtBKgCsgV^?|lTPk&|xpypPGMa{zN$|`mFo2cr62p|};b$1W|4JYL@+^UkmS4K{diMJm5kS*}` zy#d>YvdAEG3O`Aoefnb$*ez|bD^<0z4)vA&2U^*QQ`M!iFT)KUdaLxgmrLjWp|0-l zNguKhkyH4!)HV4)czUw``bKi6r`=TRDcvni3K~3D`Xwv!%Q9^d!!lLy;`<@0R|hK? zfIw7>IxIvh#k6h^b%GqqoVgU>#n^R@8dm^ovNukJ9+f)K%5`3>SOb9@2$$6iZgin* zfH)F5D#1kC)NKjU3si5BkCUIR7sn?t^s@a^o$Z)}du?%O(aBB;_l_;X_Y`GXJsyy7Q;I_c#Ob5C*1 zKhjq$Y*A43yU@erSFK;6=v9 zk&U=8wR;bmDf$i}#{T%!71bE~UDgGIFA#x4J@P9mbt~5~GPd!(Anvp3tyFFTEBAj2 zhCe$udqtqp+m@Uf|0vNt{dDP9rEivg^)&g}{}?*|P1~OA>Dg|#HRw!73x8cWdbF@q z|K9NW2}j=Hgxl#l;^(;9WzH+18QlcxGOU+PLL)!g6HrhPWr^yF3qRnj8Fa5+= zC+cKb{Ay`V)L4yHJ|v_~R=2FtmAVe{W_!)~+uXe5wFu!WiQZgZyU@S3gS(H*%|!F9 zgJ=~0Tw|7?kXE3_|gC#(<_Fzpfuq)pG0Qh32-&DfB`qISUY?&4G9U zVR9@g2MmU)a!efLh>=yhC^j*gKLiE`0iQ1Vpt}SKf{)Y@x}>yo?~ol|{2(!&`;?#9 zjCw=Y?%vUxBWj1Jm#uoyp^n^i-%Yq{m2vmx(cax%2EEZnASZw7@RWbh|Kzuy#J$!w z{zZv@g~<0!KmOwfc*$tfb#!d**EOkRS=FTL-(0=j(V?>~{RGs<*wj>vAJyxZUOoEc zlalHn96QLf7$6ppR!gPR1efC8$3cL8TahseK?ItwlIPij<}feffx9XUOfd!`q>1H{ z79=E#fInfiMn@ z_(@M#q+QBkW>I71Ff)ku;n7>Z1i0%EWJY^zDa&&tQu^+!#CqzV8qHLanGG*tZ=UZF ze^y~Of7{1rA^xX?0cO}wMTTcF&h6(O;c^Yg=ddqI2YO-O79{@INxR`jCb3*rm88C# zR>MrOuzLnN?e0lhXof8*RE#-5>n6c5-}`R)6-o4lqaFPla7CE`3O#qm%*5cF9u|}a zT6^XWx`^zPU)FMlSYl*GSvb(#0AeGrt|m?hAaWb>1C;*(z(mT9!Jw{qHyXmh2-Ile zn<^$k#Fq{ciMCirjjJvJ$GW|-8z#E0d+N$9`ZoPXAAR(r^lQtN8*ksz-oEAbh{xueNI>Is z#1vVFajbi2uic5-g|=9*Vt$U*sf`r0R-{w}+P_#7LWyG-N*rsa=Nb@(x}gaiLdhso zJhVU@$EEWPu?mVUQhdgjaiwXWEXV6D<4&*Q2M%gU2KacTS?oyjHlx8%`jXaWlx9~F z_P#w&$2Vt!;x^+V26oUt9o^;IVS6P3uWgwZ6=S)Rfa#0T+u(;n6e>UD#B{Jw(QbsX z>r&K6FUE#8L!e$U*9u20479&XqVKFhh<+fn%~`B@y%l7a4nKe-SU3lA>p}N>_b_k* zv5m15VO$%PEN41Fe(**J5dSz4`ZioXceds3=am3)p3{<9`g-JYoz-*>U;iASli&TL zRK4+a()P!X44$2v7;N~?y%07|_L#J#c`Yq%Fqo_a>$Ws+TU{qvrA`{ahR-&eDnahh z4VLSMs^F5hg6rok&sPNtvO`!LR4<1bY6n^ay$0$=&Kt3A8k#@|gxJrROzX&s*i%O9 zd#EF4-*Sq3IWV-5cAZPtQB~Ez`_ta=N!=yu=%XfUX&!?W>G(52_0r-7W&T1ey=iVY zH_QEmE0`h5vpGo@)Tv@_H>{itS)73NoGZf=K-R`ix_Daht%OCGt;QKYV9CYd0HZpH zV?P7Drp?9tL0Ws;z(S!h(W=@hFQ~Lg9+E$>SGK-vmc4C)*6o)UT%J)CGtmMJ zhpLXCV}!xJ1B|FIMF%p#FshWpA!VJe+7E^jkYdepKj?@q^Uqq9q#k{9@6l0b@A{MT zCpV<#dhNDLt1~X^p_SCh)lGIwa2dEvE_eO7O)U9hswA#%3Za91A=q(RC z@Nt#^soeF=GLAL0HTcM1dYKzMQE`KJ>dOEu<9fghM=!VmAaJxcy2d*rvbA7u&wyhi0br6HLuuer zMp0nWPFuYzk?!BP%mop1VHhAzv2>vLx*13cx)j-P0w`YxJJUfFcsG?=wu`=|fhx+q zphu;X`vU-6;%|7BXkKmb!*-xw)~P(fA3X<$(i^b-O1~*RRQk7@8X!$$OxxFkUG6Tli7coK!7ylGiH}KNM;mffth&!tU$lc zbEi*B9Lr-oPnG5D+gXV_z5l}E{?lc@QRW_6HH;c}*ig{6zqUlg7;n!moNnidi&wh(}M5xt3l6i7LoOaW89t$Q_9A9xi*Zup5d$2|du;s_+Q+=~0OIAZnb1&CQhvwKWa1A}sUXx77P64u&{IiokT_6cAeF&tD)ZjJ z=i1wRmfWl}l>Wj{H?Lyp4qvCL&iO2)JBS?SHdKYXn%3OBrp`dp1|4Uw^f5D6NBh|T zU0E*UuIBFGKEyrEeU^KTD{_C&{eoK}Mp8%G$pB_NuV&J%WL?XCTapp{z&k^?k^h_f zQ^nUJB+)Lb7x$km6<$hTn6_ufJ$?@T+ zSU-N(ks|%J@=X00AaTdae5yJUNGe(z`5*4>fU7_!96E=Q%o@G=9XcD8=oIx1m;Jqa zU3T^6+GT%Rzg>i32Lw>`iO#VHE%#M1i-&y|=6_3P_&;l&{}61=&Ms$?vF!_)wMv)X zLx+Ddv8ib8U>wx6R)A~2juH{Ln0Ofd4FdNM2H>~{Ok1?5qFsdU^^dWL#BPkA?Pk%lD}<00!LtxKi>%!h_a5|mM`aK&t73#CD}#Xc ze{MOt)?@pcE#ra6TAaKV%Tcvi&&Npi6DG}{t9j=1BQH@+9fPdT!SY$zB<%DbCW2I^ z$R}Qe{0T^2S=LTKLg|0l_xB4!)dEvWdN1wDpzv!d#=_c+jh`r6LGPJd+ zWZE19qir0L@)ktBV;yK4LrmM)yh_`sE9SamplbBjfvN$DKj!k)F=BuYOfeg9HEAMD z0l}=}C}<)XdU`z)wY{4r@*XPOwn|&^QSp|{&NFRg{=)3qRf~u$Le_T)CFT;f$op36 zHVQt1nB{tb8v?cEC|0093N;yH@FNSP*3aSsjmQsaS`IN;*qh`& zB*w*=%5y2dj|K z;Ti`gFZsG_9p)dusBPg5;K9~7jB_^aU;GW&j`bW+FJTO+30#n1vdo)^4CeSsIO%)p zW|!(u@O!l1@H4A_PePiH%I^vAd)@E7`#gTh4nep{Vie;7^oKf}8RR(n73mK<5%0!G zf6tsQzutT66=dd84Gq87PJizP_Ip-@t%yn?ax9$QwpoaHdFs}@Bl%!7=eL7EXSMc(R&`}y19ZD*3AwS zzIZg-HYhC6IE@?1-tz!DWOcVSUQMrH72n2vA0S1?Z+N_yY#)cFT$Dr8a?=!QlP?voyAzJ5$>SE43vpO z3RMqcTy-MGUzkoGqgdayAgvW_$P;eUQ@yg*l5b?l{mEh>iLQfWyEX!l75Q2lZ3107 zKLFt&ZAw!N@>S*pRUJcuS(e>?TLFmiMd2hfceW>d4$SGL?DRI) zLVpC#_9vD4@qj8}P3QX?Wnd*)Isch>Ft-434AZty#)JBK_W~!U34M)=DnrO#>O_WM zbu498SH~reL-mxot``wk1|oi2xGunqBrc5Uw-pzfZQxgFDK50*MprSXhM4$;0YOc7 z*CCL8-7@5i-;ztiW|EGL;b=|^V`D)wYH3+g%n?|`7M!>%7r`Uo#F0~r{*Q%FL#-yF z#43f*9TGvH(S=krQi;1u6&Lz&cc_S2!A32_+k!8!jR3r)7dMZ?0kaMCIrh0A)XV*T}0MuM3O)EC+` z2AsCQ9aYR5akZ;gcrD>TLs1tmoY%R931oGlSN$N%NC z$-4xzL2a;@Wl0JQ9=z_OPaQl5$u695RRT%@(r)SMd;j7OOFvdOdbG0LtPQ9}Q&-NP z+R@!$02E#uP7h^HZjK95O?!gd%{{7E8|sUYBE2)78v|ripfOD03~Gtx`dC*dxji^* zFp|b$3`fpwv_L*D1a53+E_r7$zn6B>jX-2Is7M zShJ?8?fYuuC!Rb0__H5AeeAj8@!IE_3j)d$+x??cT=@ zW*)e)>Qn@sKF_w2s;1&3bmcwv5e`{?NQl^@mXm!0;gom|0+%yu}r zXwk9-owmJ#hRMRFaK1*R+k~AeuWe=tnO+&0&$WKW^VcHhnyaE26^P-rWQbrTobmL2 zlG%Tnp9eeEdAgPD35yskyHp9NJtr)}Ss!x=pWYA0c`SoPxH7(&`V@VyIx2^bakp@V zT6nW=%*Jm7(pr$+v}jydhHzu>Y;BcS3@|;)#1i!F2-%iztH;F#!VtshTma~BxO}FY z_A`4uowl@L1kufP%5=qE_3{{yjF2qEM6ebxd^@?S4s3QLiihwqta-LR0mT+y4j0&8>gNpSNNs5{9em4nPljj%1`#hx|SeL78zN^F6G}v4E zNOJ7-Uy#1!*nFkpE(n3P26Egf2O#i7Md{&pjTdKYiGv8LF-Fexkik} z8S_v(EvM$}#xPeIg<;x9gZ75y$<_{FC`hKoa5Q{!<*HSRMnoN;S9V>O!QzbgF|`AfENtQHbK z2iIM-e4po7hDwp%fZk^M(4lEhjV0>7<-;E)zh+kKwd(n!%k|ua%kuwFJ@>?wdJcv< zyQ=HC73;YR7IQV%mV{FwId7*kWxfFx_1~es>9hyTAVA#7qQvRMdCTij7gxym(~DBrbKeTUFz^uTg`2T@O@I#YKX#LrlzzI&?b8xYvN zF;ti;%(0CS^j)rXjP-5-(TLVMtT0KCdZ4PYq8oxx(MCIpJ(1{ps$gpw$d}FwW%;J* zJ=SZ`!vai}=%?bPd2iLZ^a`q&I;d0%N8g>ZaDm2908sDV zgD<5F4O1pvAZ@P;+1E*1>GjtaAN$c`i?5%snij35tjWqyfy$f0BEF_lL2cv(xTLhZ z^m;Z+7FQR>O(qS#q*RW%;zu!aHmZ#SZ|n%Sh1Pc+OSK_kEi7xYp>xp6l-aRFex#K?^g-?|BN`R^8Es$t&;p2po+TKeyrXn;w1! z4%=Aw{M^cP?7Xjy-l!HkFau}+uVfFVfQ(!6)A~qmS24HClHacf4$0ghOa3U`y0)0R z){=i8-MX!qyUmi%(ycSa+!;&$gLLb0IyY9SYv6SYOqaYV$6kn;08=~^wX$}OS&Ba3JW@x`oAQ+^J`Y=H7!D6xBUvN)tYba0AYJLC0h%bjT7Jl z^lzctliPMO-`H~CYIP`G3Ny0H=yonf3BjNbA+=d#7?&k~2hvc2+o6O487KjhvEhxmUE*d399;9$yj(jZx^_P~-9 zvP$Cn0w#aGcXzK=V|(~IbF;hF$%ThE9{`Hu%o&a zCW;Fq6DbYqHz%<>4F|tS6DDSIklwI;G&?v(jCyuXZm`=8vbv#Rw}7dC-IZX!Y&6~l2nC~R94W^ zrjwj>kCy#Co3Oa>(l`F@#m~G>vbL*UI&QPKcHR8hfBlHvCiNI&whm8Qpv~#>ki`%G z{Kfm*{l9n9&YBi2SH5|z`m357OW*HJYE`ew`~UQP?dMcl!KSxrI(_U;n?lw*~6 zMmiU?zw@|yM*IanS9)#Fq?R8f4InX7g(V6hGs#zag`Y{2Aw<(#SZ6j73z^&=(7O0^>?=qT@;(%jsFP zZ@5?pcfj#*qc#ExUcN(52ZGgESC0~MSkAXb(S(n75+I``D!Yp~6i%QfcGN+i$|>7T zg3`mSkPKNaW8=BHmQd*ihUqGa$l8-D(C zL$ja!CpozEi-s4-q2cJ;30*%KW;hr;=45c3llHk_Hzt+2;JMiJ4Uqb3oz*UJMoX>L ztkx}M<*=l4)-EkN`P#Oyj?b!XrWV_IF2G9xC!eYCC})vhJxR5v4|9bGj4~gl64%5E zk#1<|NRak`PE1r5!3Ize5%ylx(!+9$0M|gr8{o-|Qwcv-=!nDF4hZCrGkHH11LJ`! zR_0x*LuMvWxbiJ=I*1e9>2$79&Y9`7+6g9sIN(5wa?YjT0rxG33;I)Z48bsy<7I2T zgH5TJIETUGTH?3)<#N=HF!L+g;kDXdS4Hw%n8#=y+Tb%wpKa%7g!xK%&#$#wTKrcR zKD#31N0_xPJw*#=`5DCyr{r=n#EDlp2E`pKV)R_06L!W?9~y}w83_ZRpyP<@JN>Bd z2ztzYHOC3xk-@1Tg6J4X{X!(?u$y6U`Q{zjt6TvtF?Q7}Wjilmw^l)QTh+s_9F~ssq3p zY$A0;N$D(W1pF!x$wXUQ;^h3vL|gaa)Vhh*kgV+T=SI(DXK-g0ZNu!3--utC#2&Yh zaPLWg#h-4M%$^3>-Q3#0rTXBTcLgKi!7&dzbTi&U+=yR)%IwC>F95z^J=IFPxnZhP z9pi4|?&1EJDF%bvO8r*6Il)iGUys$*@v zeIuje+o8nW0xjMcnA!q6p4(_~gVWV;u%RnVBfld4@C^5(b#DLBU~3`vmq~ml`eIDOtYp-pJ{pO zLhL=oBF^N$)e+K%B+WeOoPPH1Z4IFfZK0M_jpZ$~u8f!f|^Yo^Y<*P^-O!jW?M8fMq#VLhnl zI=GEo!K>hl+hX8GGhtLkfR33cX1_MXz&jp_6>JjvWoxvNf@G_t!|Gx{lcKOtu&~a7 zik~sQESK3XBB98jtB?TM1jd6wtaq@AlMpBVw=|{a1 zixA@qb?`0#WbdowHWe4#YQWd9AjgY24&la{7)1F2n_&>23ebDtsY0tC^B`%4INWC9 zB_VjK5aFwzQNl-G;@AtEgD?1?&qceJRFaN!job!0Lm^vct|kutMrRCi#BAufk%7@p z(kQC{=$7pOOo_A@t#1IA%1ErxnugkL4ba*ii{;W5gsg}%nv5|*ryfCPFgoh$VcO5g zxj;Iv0ef57mQ$zQ)I`dQfza^&jP9^$U;vFXE zF;DZ%v1{(@8s9yU5`K2)Qb`b>Cjnx4;U{8HYtR~6fAT`Q=nr;<^tJn&>(2$Od}_E;wW{>)jXV_7ZHL5;!uw#9ck^ z6}h&S#>R2)1^7;qGSB6YaQ!~YeT*w?gkQTn4$6F2aiOgXl=*)8k%h< zSk49MM4j45j}1=k+4ui4_a0zwRoB|^*{7)M=oGb)G#YhHl{~7`N8>5>*kgO#yFKm= zu(1uM*&d7uH9#m1fe;)5Ap{a6jU7TsG6^LOrN_Csmn7sS;ii*zFU@oO@3oIKo*5gG z`+VQ?{2zFZPT5D=eXq6lTJH<@I>f^83f!)ZSU_D0t=cRCzXYi20CrIUDduScnw!bm zU?UhvDUyjYF)abj4F-Vq+ZNFBG}$FSk7rE4HdN_7jsnpDT@z+bY#a{9ykYN^%ZD!s z)&-Y!=6;JcSq?dajZOB}=HZ4VYgaF-8*J(eU*N4!?oP$r9Ul!}fJw4}q0 zSB?;n1Ls11+^F$N&?&gK72-h6YS7~*Gdb{CV>1Z0jR~xDYE2e_300H?GBr~^suNYt zwYG{-L#X`H5eocRd_)BD5#ziTNPmH%@25Xir|t=|rXcF43cdjm-Y+O`zd(Um71a_9|4PL=w5k&j9`R-a3xYt`JR;8gTS z)hFqWZ9DctC11I|j88xjyp90Yz<}wI!<9(Hkbn&GS&(!+)lJf;+SMVl+5ti;RjrS!gjf^OIdxy%GKro5@iV}*q`DYXm&n>b1>~!&G*6x-r|&3)XGAK@BuE=d zjc%Boo4o<4AEV%W_%1$T8S&jw2qLZ+#+WJRxM@;DBj9#9q8^7*?-92}mQpDzd_)X? z{rowZR~Ta7c%AB_hNwFza5QKo{Bd&<#afYAoMz!MQ7h#Apv>Vy55)=V=z@4Ybtd0b z8Z$JdbP!E6HjkWGN-8r|oeEk%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/index.html b/src/index.html new file mode 100644 index 0000000..96f72fe --- /dev/null +++ b/src/index.html @@ -0,0 +1,160 @@ + + + + Yuu ~ Yukkuri Games + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Yukkuri Games + +

Yuu

+
+
+ + + Yuu requires JavaScript, canvas, and WebGL support. Your + browser seems to lack canvas support. + +
+
+

There was a problem. Sorry about that.

+

+

Error Log

+
+        
+
+
+

+ There was a serious problem. You'll have to restart. Sorry + about that. +

+

+

+ If this problem continues, + check our + support page. If it doesn't help, + email us. + Please include the rest of the text in this error message and + information about your + system's GPU. +

+

+ Supported browsers include recent versions of + Mozilla Firefox + and Google Chrome + on most desktop computers, + and Chrome + for Android +

+

+ If you are running one of these browsers and still have a problem, + check our + support page. If it doesn't help, + email us. + Please include the rest of the text in this error message and + as much information as you can about your operating system, + computer, and especially GPU. +

+

Error Log

+
+        
+
+

+ Yuu is our JavaScript/WebGL game + engine. It is currently being used in + Pixel Witch Lesson #6 + and other games in development, as well as the live demo + below. (In other words, if you can see the demo you can play + our games — and if there's an error, please + let us know.) +

+

+ Games made with Yuu run in Chromium and Firefox, and can also + be automatically packaged with + node-webkit + for Windows, Mac OS X, and GNU/Linux. It exclusively targets + "modern" JavaScript implementations because there's already a + hard requirement on WebGL. +

+

+ Because it's based on WebGL it theoretically supports + any platform implementing HTML5, ES5, and WebGL. In practice, + many such implementations are buggy and idiosyncratic. Android + 4.4 support is good on several phone lines; iOS 8 (and Safari + on OS X) support is not. +

+

Getting It & Using It

+

+ Yuu provides no stability guarantees. It's an + immature library and likely to see major breaking changes + regularly. It is a relatively low-level library, and there is + little documentation. (Hopefully, these issues are going to + shake out as we make more games.) +

+

+ Because of this, it's currently only distributed with games + using it, or from our Git repository: +

+ +

+ Yuu 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. +

+

+ Yuu also contains code from other projects, all of which is + licensed under GPL-compatible terms. If you're having trouble + sleeping, it includes + complete license text. +

+
+ + diff --git a/src/main.css b/src/main.css new file mode 100644 index 0000000..fa4d395 --- /dev/null +++ b/src/main.css @@ -0,0 +1,527 @@ +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 300; + src: local('Fira Sans OT Light'), local('Fira Sans Light'), url(FiraSans-Light.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Sans'; + font-style: italic; + font-weight: 300; + src: local('Fira Sans OT Light Italic'), local('Fira Sans Light Italic'), url(FiraSans-LightItalic.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 400; + src: local('Fira Sans OT'), local('Fira Sans'), url(FiraSans-Regular.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 700; + src: local('Fira Sans OT Bold'), local('Fira Sans Bold'), url(FiraSans-Bold.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Sans'; + font-style: italic; + font-weight: 400; + src: local('Fira Sans OT Italic'), local('Fira Sans Italic'), url(FiraSans-Italic.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Sans'; + font-style: italic; + font-weight: 700; + src: local('Fira Sans OT Bold Italic'), local('Fira Sans Bold Italic'), url(FiraSans-BoldItalic.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Mono'; + font-style: normal; + font-weight: 400; + src: local('Fira Mono OT'), local('Fira Mono'), url(FiraMono-Regular.woff) format('woff'); +} + +@font-face { + font-family: 'Fira Mono'; + font-style: normal; + font-weight: 700; + src: local('Fira Mono OT Bold'), local('Fira Mono Bold'), url(FiraMono-Bold.woff) format('woff'); +} + +* { + padding: 0; + margin: 0; + font-weight: normal; + text-decoration: none; +} + +header * { + outline: none; +} + +strong { font-weight: bold; } +em { font-style: italic; } + +a:link, [onclick] { + text-decoration: underline; + cursor: pointer; +} + +html { + font-family: "Fira Sans", sans-serif; + font-size: 16px; + background-color: rgb(226, 192, 242); + background-image: linear-gradient(rgb(226, 192, 242), rgb(244, 199, 199) 100%); + background-attachment: fixed; + padding: 0 1em; + height: 100%; + background-repeat: no-repeat; +} + +body { + border-top: solid rgb(206, 132, 242) 0.75em; + border-bottom: solid rgb(244, 126, 126) 0.75em; + border-radius: 2em; + margin: 0.25em auto; + color: black; + background-color: white; + max-width: 56em; + padding: 0 1em; +} + +header { + border-top: solid rgb(206, 132, 242) 0.5em; + border-bottom: solid rgb(244, 126, 126) 0.5em; + border-radius: 2em; + height: 6em; + transition: border-color 0.5s; + white-space: nowrap; + text-align: right; + margin: 0 -1em; + margin-top: -0.75em; + background-color: white; +} + +header img { + float: left; + height: 100%; + width: auto; +} + +header h1 { + font-size: 3em; + font-weight: normal; + margin-right: 0.25em; + display: inline-block; + height: 100%; + line-height: 2em; +} + +header:hover { + border-top-color: rgb(244, 126, 126); + border-bottom-color: rgb(206, 132, 242); +} + +img.logo { + -webkit-transition: -webkit-transform 1.5s; + transition: transform 1.5s; + -webkit-transition-delay: 0.5s; + transition-delay: 0.5s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0.2, 0.5, 1.3); + transition-timing-function: cubic-bezier(0.4, 0.2, 0.5, 1.3); +} + +img.logo:hover { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); +} + +h2 { + border-top: solid rgb(206, 132, 242) 1px; + border-left: solid rgb(206, 132, 242) 1px; + border-radius: 1em 0 0 1em; + font-size: 1.25em; + font-weight: 300; + margin-left: -0.67em; + margin-right: -0.67em; + margin-top: 1.5em; + margin-bottom: 0.5em; + padding-left: 0.5em; + padding-top: 0.125em; +} + +h3 { + border-top: solid rgb(206, 132, 242) 1px; + border-left: solid rgb(206, 132, 242) 1px; + border-radius: 1.5em; + display: inline-block; + font-size: 1.125em; + font-weight: 300; + margin-bottom: 0; + margin-left: -0.445em; + padding-left: 0.67em; + padding-right: 0.67em; +} + +a:link, [onclick] { + color: rgb(206, 132, 242); + transition: color 0.3s; +} + +a:visited { + color: rgb(206, 132, 242); +} + +a:hover, [onclick]:hover { + color: rgb(244, 126, 126); +} + +main { + display: block; + padding: 1em; + max-width: 50em; + margin: auto; +} + +main > *:first-child { + margin-top: 0; +} + +p, li { + line-height: 125%; +} + +main > p { + max-width: 45em; + margin: 1em auto; +} + +main > ul { + max-width: 40em; + margin: 1em auto; +} + +main > ul > li { + margin: 0.5em auto; +} + +hr { + margin-top: 0; + margin-bottom: 1em; + border-bottom: solid rgb(206, 132, 242) 1px; + height: 2em; +} + +.highlight { + border-bottom: solid rgb(206, 132, 242) 0.125em; + border-top: solid rgb(206, 132, 242) 0.125em; + border-radius: 1em; + font-weight: 300; + padding: 1em 3em; + transition: border-radius 0.3s; + box-sizing: border-box; +} + +.highlight:hover { + border-radius: 3em; +} + +.game-preview { + padding: 0; + text-align: center; + width: 100%; + max-width: 37em; + margin: auto; + list-style-type: none; +} + +.game-preview > li { + position: relative; + border: solid rgb(206, 132, 242) 1px; + margin-bottom: 1.5em; + margin-top: 1em; + margin-left: 2.5em; + border-left-width: 0; + height: 8em; + transition: border-radius 0.3s, border-color 0.3s; + padding-left: 4em; + box-sizing: border-box; + border-radius: 0 3em 3em 0; +} + +.game-preview > li:nth-child(even) { + padding-left: 0; + padding-right: 4em; + margin-right: 2.5em; + margin-left: 0; + border-left-width: 1px; + border-right-width: 0; + border-radius: 3em 0 0 3em; +} + +.game-preview > li:hover { + border-radius: 0 0.25em 0.25em 0; + border-color: rgb(244, 126, 126); +} + +.game-preview > li img { + border: solid rgb(206, 132, 242) 1px; + position: absolute; + border-radius: 50%; + top: -1px; + left: -4em; + height: 8em; + width: 8em; + opacity: 0.75; + transition: border-radius 0.3s, border-color 0.3s, opacity 0.3s; + box-sizing: border-box; +} + +.game-preview > li:nth-child(even) img { + left: auto; + right: -4em; +} + +.game-preview > li:hover img { + border-radius: 0; + border-color: rgb(244, 126, 126); + opacity: 1.0; +} + +.game-preview .info { + position: relative; + height: 100%; +} + +.game-preview .info h4 { + color: inherit; + font-style: italic; + padding-left: 0.125em; + padding-right: 0.125em; + text-decoration: none; + text-align: center; + box-sizing: border-box; + padding-top: 0.25em; + font-size: 1.125em; +} + +.game-preview li:nth-child(odd) .info h4, +.game-preview li:nth-child(odd) .info ul { + margin-right: 6.5rem; +} + +.game-preview li:nth-child(even) .info h4, +.game-preview li:nth-child(even) .info ul { + margin-right: 0em; + margin-left: 6.5rem; +} + +h4 a:link { + text-decoration: none; +} + +.game-preview .info p { + padding: 0.25em; + text-align: center; + position: absolute; + left: 0; + right: 0; + top: 50%; + transform: translateY(-50%); + -webkit-transform: translateY(-50%); + margin-top: 0.125em; +} + +.game-preview .info ul { + bottom: 0.25em; + font-size: 0.75em; + position: absolute; + right: 0.125em; + left: 0.125em; + text-align: center; + list-style-type: none; +} + +.game-preview .info li { + white-space: nowrap; +} + +.game-preview .info li a:link { + text-decoration: none; + font-weight: inherit; +} + +.game-preview .info li:before { + content: ' ~ '; +} + +.game-preview .info li:first-child:before { + content: ''; +} + +.game-preview .info li { + display: inline; + font-weight: 300; +} + +ul.download { + border-radius: 1em; + border: solid rgb(206, 132, 242) 0.125em; + font-weight: 300; + padding: 0.5em; + margin: 1em auto; + transition: border-radius 0.3s, border-color 0.3s; + white-space: nowrap; + display: table; +} + +ul.download:hover { + border-radius: 4px; + border-color: rgb(244, 126, 126); +} + +ul.download li { + list-style-type: none; + font-size: 1.25em; + margin-bottom: 0.8em; + text-align: center; +} + +ul.download li a { + text-decoration: none; +} + +ul.download li.sh { + margin-bottom: 0; + font-size: 0.75em; + font-family: "Fira Mono", monospace; + text-align: left; +} + +ul.download li:last-child { + margin-bottom: 0; +} + +.sh:before { + content: "$ "; +} + +input { + font-family: inherit; + font-size: 1em; +} + +.copyright { + margin: auto; + text-align: justify; + width: 75%; + font-size: 0.875em; + font-weight: 400; +} + +.copyright > p { + font-size: 0.875em; + font-weight: 300; +} + +.copyright:before { + content: "Copyright ©"; +} + +#yuu-canvas { + margin: 1em auto; + width: 100%; + height: 20em; + position: static; + border: solid rgba(206, 132, 242, 0.5) 2px; + border-radius: 2em; +} + +pre { + border-left: solid rgba(206, 132, 242, 0.5) 8px; + border-radius: 8px; + font-family: "Fira Mono", monospace; + overflow: auto; + padding-left: 2em; + padding: 0.5em; + max-width: 40em; + margin: auto; + transition: background-color 0.3s, border-color 0.3s, border-radius 0.3s; +} + +pre:hover { + background-color: rgba(206, 132, 242, 0.125); + border-color: rgb(206, 132, 242); + border-radius: 16px; +} + +code { + font-family: "Fira Mono", monospace; + transition: background-color 0.3s; +} + +code:hover { + background-color: rgba(206, 132, 242, 0.125); +} + +pre code:hover { + background-color: transparent; +} + +footer { + font-weight: 300; + text-align: center; + font-size: 0.75em; +} + +footer a:link { + display: inline-block; + margin: 0 1em; + text-decoration: none; +} + +@media (max-width: 767px) { + html { font-size: 13px; } + + .optional { + display: none; + } + + ul.download li.sh:before { + content: ""; + } + + pre { + font-size: 0.875em; + } +} + +@media (max-width: 479px) { + html { font-size: 10px; padding: 0 0.5em; } + h4 { font-size: 1em; } +} + +body { + background-color: white; + overflow: auto; +} + +.yuu-toast { + background-color: transparent; + border: solid rgba(206, 132, 242, 0.5) 2px; + color: inherit; +} + +.yuu-overlay { + background-color: transparent; + border: solid rgb(244, 126, 126) 2px; + color: inherit; + position: static; + transform: none; +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..6b2cb7b --- /dev/null +++ b/src/main.js @@ -0,0 +1,83 @@ +"use strict"; + +var DISAPPEAR = { + 0: { tween: { transform: { yaw: Math.PI } }, + duration: 35 }, + 10: { tween: { quad: { alpha: 0 } }, + duration: 25 } +}; + +var JUMP = { + 0: { tween1: { scale: [0.6, 0.3, 1.0] }, duration: 20 }, + 20: [{ tween1: { scale: [0.3, 0.6, 1.0] }, duration: 18 }, + { tween1: { xy: 'target' }, duration: 20 }], + 38: { tween1: { scale: [0.5, 0.5, 1.0] }, duration: 5 }, +}; + +var FollowScene = yT(yuu.Scene, { + constructor: function () { + yuu.Scene.call(this); + var textMat = new yuu.Material("@text"); + var faceMat = new yuu.Material("@face"); + + var textQuad; + var textEntity = new yuu.E( + new yuu.Transform().setScale([1, 1, 1]), + textQuad = new yuu.QuadC(textMat)); + this.faceEntity = new yuu.E( + new yuu.Transform().setScale([0.5, 0.5, 1]), + new yuu.QuadC(faceMat)); + this.entity0.addChild(textEntity); + this.entity0.addChild(this.faceEntity); + + this.disappear = function () { + textEntity.attach(new yuu.Animation(DISAPPEAR, { + transform: textEntity.transform, + quad: textQuad + })); + }; + + this.ready = yuu.ready([textMat, faceMat], this); + }, + + inputs: { + resize: function () { + var base = new yuu.AABB(-1.5, -1.5, 1.5, 1.5); + 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); + var d = 0.75 * (p.x - this.faceEntity.transform.x); + var angle = Math.PI / 2 * d; + if (!angle) + angle = 0; + angle = yf.clamp(angle, -Math.PI / 2, Math.PI / 2); + this.faceEntity.transform.roll = angle + Math.PI / 2; + }, + + touch: function (p) { this.inputs.mousemove.call(this, p); }, + + tap: function (p) { + this.disappear(); + this.disappear = yf.I; + p = this.layer0.worldFromDevice(p); + this.faceEntity.attach(new yuu.Animation(JUMP, { + $: this.faceEntity.transform, + target: [p.x, p.y] + })); + }, + }, +}); + +function load () { + yuu.director.pushScene(new FollowScene()); +} + +window.addEventListener("load", function() { + yuu.registerInitHook(load); + yuu.init({ backgroundColor: [1, 1, 1, 0] }) + .then(function () { yuu.director.start(); }); +}); + 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..cbeb2a0 --- /dev/null +++ b/src/yuu/core.js @@ -0,0 +1,908 @@ +/* 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 + */ + + document.body.className += (navigator.standalone || gui) + ? " standalone" : " browser"; + + 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); + }); + win.on('new-win-policy', function (frame, url, policy) { + if (url.startsWith('chrome')) { + policy.forceNewPopup(); + } else { + policy.ignore(); + gui.Shell.openExternal(url); + } + }); + } + + return new Promise(function (resolve) { + // TODO: Some kind of loading progress bar. + initOptions = options || {}; + yuu.log("messages", "Initializing Yuu engine."); + var promises = []; + // initHooks can be pushed to while iterating, so iterate + // by index, not a foreach loop. + for (var i = 0; i < initHooks.length; ++i) + promises.push(initHooks[i].call(yuu, initOptions)); + 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..86b933f --- /dev/null +++ b/src/yuu/data/yuu.css @@ -0,0 +1,369 @@ +/* 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 2em 1em 2em; + 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; + margin-left: -1.3333em; + position: sticky; + top: 0; +} + +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; +} + +body.standalone .browser, body.browser .standalone { + display: none; +} diff --git a/src/yuu/director.js b/src/yuu/director.js new file mode 100644 index 0000000..e1c0b53 --- /dev/null +++ b/src/yuu/director.js @@ -0,0 +1,689 @@ +/* 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); + + 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, version=None): + 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": version or "0.0.0", + "chromium-args": "--enable-webgl --ignore-gpu-blacklist", + "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 + main(*sys.argv[1:]) 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..e195611 --- /dev/null +++ b/tools/nw-linux-wrapper @@ -0,0 +1,26 @@ +#!/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) +NWFLAGS="--enable-webgl --ignore-gpu-blacklist" +PACKAGE="$NWDIR/package.nw" + +if [ ! -x "$NWBIN" ]; then + echo "node-webkit (nw) executable could not be found." >&2 + exit 127 +fi + +"$NWBIN" $NWFLAGS "$@" "$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" $NWFLAGS "$@" "$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