[turbulenz] Removed, engine is no longer maintained

This commit is contained in:
badlogic 2016-08-17 10:54:55 +02:00
parent 88a3a52e94
commit 8536f210ce
17 changed files with 0 additions and 10908 deletions

View File

@ -1,28 +0,0 @@
Spine Runtimes Software License
Version 2.3
Copyright (c) 2013-2015, Esoteric Software
All rights reserved.
You are granted a perpetual, non-exclusive, non-sublicensable and
non-transferable license to use, install, execute and perform the Spine
Runtimes Software (the "Software") and derivative works solely for personal
or internal use. Without the written permission of Esoteric Software (see
Section 2 of the Spine Software License Agreement), you may not (a) modify,
translate, adapt or otherwise create derivative works, improvements of the
Software or develop new applications using the Software or (b) remove,
delete, alter or obscure any trademarks or any copyright, trademark, patent
or other intellectual property or proprietary rights notices on or in the
Software, including any copy thereof. Redistributions in binary or source
form must include this license and terms.
THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "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 ESOTERIC SOFTWARE 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.

View File

@ -1,34 +0,0 @@
# spine-turbulenz
spine-turbulenz is a basic example of how to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using [Turbulenz](http://biz.turbulenz.com/developers). spine-turbulenz is based on [spine-js](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-js).
## Licensing
This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information.
The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes.
## Spine version
spine-turbulenz works with data exported from Spine 3.1.08. Updating spine-turbulenz to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress.
spine-turbulenz supports all Spine features except for rendering meshes.
spine-turbulenz does not yet support loading the binary format.
## Setup
To run the example:
1. Copy the contents of `spine-js` to `spine-turbulenz/spine-js`.
1. Place the files on a webserver. Images can't be loaded when run from a local directory.
1. Open `spine-turbulenz/example/index.html` in a web browser.
## Demos
- [spine-turbulenz Demo](http://esotericsoftware.com/files/runtimes/turbulenz/example/)<br>
[spine-turbulenz Demo source](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-turbulenz/example/index.html)
## Notes
- Atlas images should not use premultiplied alpha or rotation.

View File

@ -1,76 +0,0 @@
/******************************************************************************
* Spine Runtimes Software License
* Version 2.3
*
* Copyright (c) 2013-2015, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable and
* non-transferable license to use, install, execute and perform the Spine
* Runtimes Software (the "Software") and derivative works solely for personal
* or internal use. Without the written permission of Esoteric Software (see
* Section 2 of the Spine Software License Agreement), you may not (a) modify,
* translate, adapt or otherwise create derivative works, improvements of the
* Software or develop new applications using the Software or (b) remove,
* delete, alter or obscure any trademarks or any copyright, trademark, patent
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "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 ESOTERIC SOFTWARE 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 SpriteBatch (draw2D) {
this.draw2D = draw2D;
this.buffer = [];
}
SpriteBatch.prototype = {
count: 0,
texture: null,
blendMode: null,
begin: function (blendMode, sortMode) {
this.blendMode = blendMode;
this.draw2D.begin(blendMode, sortMode);
},
add: function (texture, x1, y1, x2, y2, x3, y3, x4, y4, r, g, b, a, u1, v1, u2, v2) {
if (this.texture && this.texture != texture) this.flush();
this.texture = texture;
var index = this.count++ * 16;
var buffer = this.buffer;
buffer[index++] = x1;
buffer[index++] = y1;
buffer[index++] = x2;
buffer[index++] = y2;
buffer[index++] = x3;
buffer[index++] = y3;
buffer[index++] = x4;
buffer[index++] = y4;
buffer[index++] = r;
buffer[index++] = g;
buffer[index++] = b;
buffer[index++] = a;
buffer[index++] = u1;
buffer[index++] = v1;
buffer[index++] = u2;
buffer[index] = v2;
},
flush: function () {
if (!this.texture) return;
this.draw2D.drawRaw(this.texture, this.buffer, this.count, 0);
this.texture = null;
this.count = 0;
},
end: function () {
this.flush();
this.draw2D.end();
}
};

View File

@ -1,285 +0,0 @@
goblins.png
format: RGBA8888
filter: Linear,Linear
repeat: none
spear
rotate: false
xy: 2, 142
size: 22, 368
orig: 22, 368
offset: 0, 0
index: -1
goblingirl/head
rotate: false
xy: 26, 429
size: 103, 81
orig: 103, 81
offset: 0, 0
index: -1
goblin/head
rotate: false
xy: 26, 361
size: 103, 66
orig: 103, 66
offset: 0, 0
index: -1
goblin/torso
rotate: false
xy: 131, 414
size: 68, 96
orig: 68, 96
offset: 0, 0
index: -1
goblingirl/torso
rotate: false
xy: 26, 263
size: 68, 96
orig: 68, 96
offset: 0, 0
index: -1
dagger
rotate: false
xy: 26, 153
size: 26, 108
orig: 26, 108
offset: 0, 0
index: -1
goblin/right-lower-leg
rotate: false
xy: 201, 434
size: 36, 76
orig: 36, 76
offset: 0, 0
index: -1
goblingirl/right-lower-leg
rotate: false
xy: 54, 185
size: 36, 76
orig: 36, 76
offset: 0, 0
index: -1
goblin/left-upper-leg
rotate: false
xy: 96, 286
size: 33, 73
orig: 33, 73
offset: 0, 0
index: -1
goblin/pelvis
rotate: false
xy: 131, 369
size: 62, 43
orig: 62, 43
offset: 0, 0
index: -1
goblingirl/pelvis
rotate: false
xy: 131, 324
size: 62, 43
orig: 62, 43
offset: 0, 0
index: -1
goblin/right-foot
rotate: false
xy: 131, 289
size: 63, 33
orig: 63, 33
offset: 0, 0
index: -1
goblin/left-lower-leg
rotate: false
xy: 2, 70
size: 33, 70
orig: 33, 70
offset: 0, 0
index: -1
goblin/right-upper-leg
rotate: false
xy: 2, 5
size: 34, 63
orig: 34, 63
offset: 0, 0
index: -1
goblingirl/left-lower-leg
rotate: false
xy: 195, 342
size: 33, 70
orig: 33, 70
offset: 0, 0
index: -1
goblingirl/left-upper-leg
rotate: false
xy: 37, 81
size: 33, 70
orig: 33, 70
offset: 0, 0
index: -1
goblingirl/right-upper-leg
rotate: false
xy: 38, 16
size: 34, 63
orig: 34, 63
offset: 0, 0
index: -1
goblin/eyes-closed
rotate: false
xy: 38, 2
size: 34, 12
orig: 34, 12
offset: 0, 0
index: -1
goblin/undies
rotate: false
xy: 54, 154
size: 36, 29
orig: 36, 29
offset: 0, 0
index: -1
goblin/right-arm
rotate: false
xy: 72, 102
size: 23, 50
orig: 23, 50
offset: 0, 0
index: -1
goblin/left-foot
rotate: false
xy: 131, 256
size: 65, 31
orig: 65, 31
offset: 0, 0
index: -1
goblingirl/right-arm
rotate: false
xy: 196, 290
size: 28, 50
orig: 28, 50
offset: 0, 0
index: -1
goblingirl/left-shoulder
rotate: false
xy: 226, 294
size: 28, 46
orig: 28, 46
offset: 0, 0
index: -1
goblin/left-arm
rotate: false
xy: 198, 253
size: 37, 35
orig: 37, 35
offset: 0, 0
index: -1
goblingirl/left-foot
rotate: false
xy: 92, 223
size: 65, 31
orig: 65, 31
offset: 0, 0
index: -1
goblingirl/right-foot
rotate: false
xy: 92, 188
size: 63, 33
orig: 63, 33
offset: 0, 0
index: -1
goblin/undie-straps
rotate: false
xy: 92, 167
size: 55, 19
orig: 55, 19
offset: 0, 0
index: -1
goblingirl/left-arm
rotate: false
xy: 159, 219
size: 37, 35
orig: 37, 35
offset: 0, 0
index: -1
goblin/right-shoulder
rotate: false
xy: 97, 120
size: 39, 45
orig: 39, 45
offset: 0, 0
index: -1
goblingirl/right-shoulder
rotate: false
xy: 198, 206
size: 39, 45
orig: 39, 45
offset: 0, 0
index: -1
goblin/left-hand
rotate: false
xy: 157, 176
size: 36, 41
orig: 36, 41
offset: 0, 0
index: -1
goblin/neck
rotate: false
xy: 195, 163
size: 36, 41
orig: 36, 41
offset: 0, 0
index: -1
goblingirl/undie-straps
rotate: false
xy: 97, 99
size: 55, 19
orig: 55, 19
offset: 0, 0
index: -1
goblingirl/neck
rotate: false
xy: 138, 120
size: 35, 41
orig: 35, 41
offset: 0, 0
index: -1
goblingirl/left-hand
rotate: false
xy: 175, 121
size: 35, 40
orig: 35, 40
offset: 0, 0
index: -1
goblin/left-shoulder
rotate: false
xy: 212, 117
size: 29, 44
orig: 29, 44
offset: 0, 0
index: -1
goblingirl/eyes-closed
rotate: false
xy: 154, 97
size: 37, 21
orig: 37, 21
offset: 0, 0
index: -1
goblin/right-hand
rotate: false
xy: 193, 78
size: 36, 37
orig: 36, 37
offset: 0, 0
index: -1
goblingirl/right-hand
rotate: false
xy: 74, 39
size: 36, 37
orig: 36, 37
offset: 0, 0
index: -1
goblingirl/undies
rotate: false
xy: 74, 8
size: 36, 29
orig: 36, 29
offset: 0, 0
index: -1

View File

@ -1,499 +0,0 @@
{
"bones": [
{ "name": "root" },
{ "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 },
{ "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 },
{ "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 },
{ "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 },
{ "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 },
{ "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 },
{ "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 },
{ "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 },
{ "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 },
{ "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 },
{ "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 },
{ "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 },
{ "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 },
{ "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 },
{ "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 },
{ "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 },
{ "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }
],
"slots": [
{ "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" },
{ "name": "left arm", "bone": "left arm", "attachment": "left arm" },
{ "name": "left hand item", "bone": "left hand", "attachment": "spear" },
{ "name": "left hand", "bone": "left hand", "attachment": "left hand" },
{ "name": "left foot", "bone": "left foot", "attachment": "left foot" },
{ "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" },
{ "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" },
{ "name": "neck", "bone": "neck", "attachment": "neck" },
{ "name": "torso", "bone": "torso", "attachment": "torso" },
{ "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" },
{ "name": "right foot", "bone": "right foot", "attachment": "right foot" },
{ "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" },
{ "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" },
{ "name": "undies", "bone": "pelvis", "attachment": "undies" },
{ "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" },
{ "name": "head", "bone": "head", "attachment": "head" },
{ "name": "eyes", "bone": "head" },
{ "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" },
{ "name": "right arm", "bone": "right arm", "attachment": "right arm" },
{ "name": "right hand item", "bone": "right hand", "attachment": "dagger" },
{ "name": "right hand", "bone": "right hand", "attachment": "right hand" }
],
"skins": {
"default": {
"left hand item": {
"dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 },
"spear": { "x": -4.55, "y": 39.2, "rotation": 13.04, "width": 22, "height": 368 }
},
"right hand item": {
"dagger": { "x": 6.51, "y": -24.15, "rotation": -8.06, "width": 26, "height": 108 }
}
},
"goblin": {
"neck": {
"neck": { "name": "goblin/neck", "x": 10.1, "y": 0.42, "rotation": -93.69, "width": 36, "height": 41 }
},
"undies": {
"undies": { "name": "goblin/undies", "x": 6.3, "y": 0.12, "rotation": 0.91, "width": 36, "height": 29 }
},
"right hand": {
"right hand": { "name": "goblin/right-hand", "x": 7.88, "y": 2.78, "rotation": 91.96, "width": 36, "height": 37 }
},
"right arm": {
"right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 }
},
"head": {
"head": { "name": "goblin/head", "x": 25.73, "y": 2.33, "rotation": -92.29, "width": 103, "height": 66 }
},
"left shoulder": {
"left shoulder": { "name": "goblin/left-shoulder", "x": 15.56, "y": -2.26, "rotation": 62.01, "width": 29, "height": 44 }
},
"left arm": {
"left arm": {
"name": "goblin/left-arm",
"x": 16.7,
"y": -1.69,
"scaleX": 1.057,
"scaleY": 1.057,
"rotation": 33.84,
"width": 37,
"height": 35
}
},
"left hand": {
"left hand": {
"name": "goblin/left-hand",
"x": 3.47,
"y": 3.41,
"scaleX": 0.892,
"scaleY": 0.892,
"rotation": 31.14,
"width": 36,
"height": 41
}
},
"right lower leg": {
"right lower leg": { "name": "goblin/right-lower-leg", "x": 25.68, "y": -3.15, "rotation": 111.83, "width": 36, "height": 76 }
},
"right upper leg": {
"right upper leg": { "name": "goblin/right-upper-leg", "x": 20.35, "y": 1.47, "rotation": 97.49, "width": 34, "height": 63 }
},
"pelvis": {
"pelvis": { "name": "goblin/pelvis", "x": -5.61, "y": 0.76, "width": 62, "height": 43 }
},
"left lower leg": {
"left lower leg": { "name": "goblin/left-lower-leg", "x": 23.58, "y": -2.06, "rotation": 105.75, "width": 33, "height": 70 }
},
"left upper leg": {
"left upper leg": { "name": "goblin/left-upper-leg", "x": 29.68, "y": -3.87, "rotation": 89.09, "width": 33, "height": 73 }
},
"torso": {
"torso": { "name": "goblin/torso", "x": 38.09, "y": -3.87, "rotation": -94.95, "width": 68, "height": 96 }
},
"right shoulder": {
"right shoulder": { "name": "goblin/right-shoulder", "x": 15.68, "y": -1.03, "rotation": 130.65, "width": 39, "height": 45 }
},
"right foot": {
"right foot": { "name": "goblin/right-foot", "x": 23.56, "y": 9.8, "rotation": 1.52, "width": 63, "height": 33 }
},
"left foot": {
"left foot": { "name": "goblin/left-foot", "x": 24.85, "y": 8.74, "rotation": 3.32, "width": 65, "height": 31 }
},
"undie straps": {
"undie straps": { "name": "goblin/undie-straps", "x": -3.87, "y": 13.1, "scaleX": 1.089, "width": 55, "height": 19 }
},
"eyes": {
"eyes closed": { "name": "goblin/eyes-closed", "x": 32.21, "y": -21.27, "rotation": -88.92, "width": 34, "height": 12 }
}
},
"goblingirl": {
"left upper leg": {
"left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 }
},
"left lower leg": {
"left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 }
},
"left foot": {
"left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 }
},
"right upper leg": {
"right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 }
},
"right lower leg": {
"right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 }
},
"right foot": {
"right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 }
},
"torso": {
"torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 }
},
"left shoulder": {
"left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 }
},
"left arm": {
"left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 }
},
"left hand": {
"left hand": {
"name": "goblingirl/left-hand",
"x": 4.34,
"y": 2.39,
"scaleX": 0.896,
"scaleY": 0.896,
"rotation": 30.34,
"width": 35,
"height": 40
}
},
"neck": {
"neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 }
},
"head": {
"head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 }
},
"right shoulder": {
"right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 }
},
"right arm": {
"right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 }
},
"right hand": {
"right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 }
},
"pelvis": {
"pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 }
},
"undie straps": {
"undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 }
},
"undies": {
"undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 }
},
"eyes": {
"eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 }
}
}
},
"animations": {
"walk": {
"bones": {
"left upper leg": {
"rotate": [
{ "time": 0, "angle": -26.55 },
{ "time": 0.1333, "angle": -8.78 },
{ "time": 0.2333, "angle": 9.51 },
{ "time": 0.3666, "angle": 30.74 },
{ "time": 0.5, "angle": 25.33 },
{ "time": 0.6333, "angle": 26.11 },
{ "time": 0.7333, "angle": -7.7 },
{ "time": 0.8666, "angle": -21.19 },
{ "time": 1, "angle": -26.55 }
],
"translate": [
{ "time": 0, "x": -1.32, "y": 1.7 },
{ "time": 0.3666, "x": -0.06, "y": 2.42 },
{ "time": 1, "x": -1.32, "y": 1.7 }
]
},
"right upper leg": {
"rotate": [
{ "time": 0, "angle": 42.45 },
{ "time": 0.1333, "angle": 52.1 },
{ "time": 0.2333, "angle": 8.53 },
{ "time": 0.5, "angle": -16.93 },
{ "time": 0.6333, "angle": 1.89 },
{
"time": 0.7333,
"angle": 28.06,
"curve": [ 0.462, 0.11, 1, 1 ]
},
{
"time": 0.8666,
"angle": 58.68,
"curve": [ 0.5, 0.02, 1, 1 ]
},
{ "time": 1, "angle": 42.45 }
],
"translate": [
{ "time": 0, "x": 6.23, "y": 0 },
{ "time": 0.2333, "x": 2.14, "y": 2.4 },
{ "time": 0.5, "x": 2.44, "y": 4.8 },
{ "time": 1, "x": 6.23, "y": 0 }
]
},
"left lower leg": {
"rotate": [
{ "time": 0, "angle": -22.98 },
{ "time": 0.1333, "angle": -63.5 },
{ "time": 0.2333, "angle": -73.76 },
{ "time": 0.5, "angle": 5.11 },
{ "time": 0.6333, "angle": -28.29 },
{ "time": 0.7333, "angle": 4.08 },
{ "time": 0.8666, "angle": 3.53 },
{ "time": 1, "angle": -22.98 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.2333, "x": 2.55, "y": -0.47 },
{ "time": 0.5, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 1, "x": 0, "y": 0 }
]
},
"left foot": {
"rotate": [
{ "time": 0, "angle": -3.69 },
{ "time": 0.1333, "angle": -10.42 },
{ "time": 0.2333, "angle": -5.01 },
{ "time": 0.3666, "angle": 3.87 },
{ "time": 0.5, "angle": -3.87 },
{ "time": 0.6333, "angle": 2.78 },
{ "time": 0.7333, "angle": 1.68 },
{ "time": 0.8666, "angle": -8.54 },
{ "time": 1, "angle": -3.69 }
]
},
"right shoulder": {
"rotate": [
{
"time": 0,
"angle": 5.29,
"curve": [ 0.264, 0, 0.75, 1 ]
},
{ "time": 0.6333, "angle": 6.65 },
{ "time": 1, "angle": 5.29 }
]
},
"right arm": {
"rotate": [
{
"time": 0,
"angle": -4.02,
"curve": [ 0.267, 0, 0.804, 0.99 ]
},
{
"time": 0.6333,
"angle": 19.78,
"curve": [ 0.307, 0, 0.787, 0.99 ]
},
{ "time": 1, "angle": -4.02 }
]
},
"right hand": {
"rotate": [
{ "time": 0, "angle": 8.98 },
{ "time": 0.6333, "angle": 0.51 },
{ "time": 1, "angle": 8.98 }
]
},
"left shoulder": {
"rotate": [
{
"time": 0,
"angle": 6.25,
"curve": [ 0.339, 0, 0.683, 1 ]
},
{
"time": 0.5,
"angle": -11.78,
"curve": [ 0.281, 0, 0.686, 0.99 ]
},
{ "time": 1, "angle": 6.25 }
],
"translate": [
{ "time": 0, "x": 1.15, "y": 0.23 }
]
},
"left hand": {
"rotate": [
{
"time": 0,
"angle": -21.23,
"curve": [ 0.295, 0, 0.755, 0.98 ]
},
{
"time": 0.5,
"angle": -27.28,
"curve": [ 0.241, 0, 0.75, 0.97 ]
},
{ "time": 1, "angle": -21.23 }
]
},
"left arm": {
"rotate": [
{
"time": 0,
"angle": 28.37,
"curve": [ 0.339, 0, 0.683, 1 ]
},
{
"time": 0.5,
"angle": 60.09,
"curve": [ 0.281, 0, 0.686, 0.99 ]
},
{ "time": 1, "angle": 28.37 }
]
},
"torso": {
"rotate": [
{ "time": 0, "angle": -10.28 },
{
"time": 0.1333,
"angle": -15.38,
"curve": [ 0.545, 0, 0.818, 1 ]
},
{
"time": 0.3666,
"angle": -9.78,
"curve": [ 0.58, 0.17, 0.669, 0.99 ]
},
{
"time": 0.6333,
"angle": -15.75,
"curve": [ 0.235, 0.01, 0.795, 1 ]
},
{
"time": 0.8666,
"angle": -7.06,
"curve": [ 0.209, 0, 0.816, 0.98 ]
},
{ "time": 1, "angle": -10.28 }
],
"translate": [
{ "time": 0, "x": -1.29, "y": 1.68 }
]
},
"right foot": {
"rotate": [
{ "time": 0, "angle": -5.25 },
{ "time": 0.2333, "angle": -1.91 },
{ "time": 0.3666, "angle": -6.45 },
{ "time": 0.5, "angle": -5.39 },
{ "time": 0.7333, "angle": -11.68 },
{ "time": 0.8666, "angle": 0.46 },
{ "time": 1, "angle": -5.25 }
]
},
"right lower leg": {
"rotate": [
{
"time": 0,
"angle": -3.39,
"curve": [ 0.316, 0.01, 0.741, 0.98 ]
},
{
"time": 0.1333,
"angle": -45.53,
"curve": [ 0.229, 0, 0.738, 0.97 ]
},
{ "time": 0.2333, "angle": -4.83 },
{ "time": 0.5, "angle": -19.53 },
{ "time": 0.6333, "angle": -64.8 },
{
"time": 0.7333,
"angle": -82.56,
"curve": [ 0.557, 0.18, 1, 1 ]
},
{ "time": 1, "angle": -3.39 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 0.5, "x": 0, "y": 0 },
{ "time": 0.6333, "x": 2.18, "y": 0.21 },
{ "time": 1, "x": 0, "y": 0 }
]
},
"hip": {
"rotate": [
{ "time": 0, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 }
],
"translate": [
{ "time": 0, "x": 0, "y": -4.16 },
{
"time": 0.1333,
"x": 0,
"y": -7.05,
"curve": [ 0.359, 0.47, 0.646, 0.74 ]
},
{ "time": 0.3666, "x": 0, "y": 6.78 },
{ "time": 0.5, "x": 0, "y": -6.13 },
{
"time": 0.6333,
"x": 0,
"y": -7.05,
"curve": [ 0.359, 0.47, 0.646, 0.74 ]
},
{ "time": 0.8666, "x": 0, "y": 6.78 },
{ "time": 1, "x": 0, "y": -4.16 }
]
},
"neck": {
"rotate": [
{ "time": 0, "angle": 3.6 },
{ "time": 0.1333, "angle": 17.49 },
{ "time": 0.2333, "angle": 6.1 },
{ "time": 0.3666, "angle": 3.45 },
{ "time": 0.5, "angle": 5.17 },
{ "time": 0.6333, "angle": 18.36 },
{ "time": 0.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 },
{ "time": 1, "angle": 3.6 }
]
},
"head": {
"rotate": [
{
"time": 0,
"angle": 3.6,
"curve": [ 0, 0, 0.704, 1.17 ]
},
{ "time": 0.1333, "angle": -0.2 },
{ "time": 0.2333, "angle": 6.1 },
{ "time": 0.3666, "angle": 3.45 },
{
"time": 0.5,
"angle": 5.17,
"curve": [ 0, 0, 0.704, 1.61 ]
},
{ "time": 0.6666, "angle": 1.1 },
{ "time": 0.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 },
{ "time": 1, "angle": 3.6 }
]
}
},
"slots": {
"eyes": {
"attachment": [
{ "time": 0.7, "name": "eyes closed" },
{ "time": 0.8, "name": null }
]
}
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

View File

@ -1,139 +0,0 @@
hero.png
size: 512,256
format: RGBA8888
filter: Linear,Linear
repeat: none
body
rotate: false
xy: 176, 81
size: 97, 95
orig: 97, 95
offset: 0, 0
index: -1
eyes
rotate: false
xy: 181, 48
size: 82, 31
orig: 82, 31
offset: 0, 0
index: -1
fingers
rotate: false
xy: 458, 155
size: 31, 33
orig: 31, 33
offset: 0, 0
index: -1
foot1
rotate: false
xy: 236, 4
size: 50, 42
orig: 50, 42
offset: 0, 0
index: -1
foot2
rotate: false
xy: 181, 8
size: 53, 38
orig: 53, 38
offset: 0, 0
index: -1
forearm1
rotate: false
xy: 288, 5
size: 41, 49
orig: 41, 49
offset: 0, 0
index: -1
forearm2
rotate: false
xy: 425, 111
size: 31, 32
orig: 31, 32
offset: 0, 0
index: -1
hand1
rotate: false
xy: 386, 128
size: 37, 48
orig: 37, 48
offset: 0, 0
index: -1
hand2
rotate: false
xy: 425, 145
size: 31, 37
orig: 31, 37
offset: 0, 0
index: -1
head
rotate: false
xy: 2, 74
size: 172, 173
orig: 172, 173
offset: 0, 0
index: -1
mantles
rotate: false
xy: 2, 17
size: 136, 55
orig: 136, 55
offset: 0, 0
index: -1
mouth
rotate: false
xy: 2, 2
size: 61, 13
orig: 61, 13
offset: 0, 0
index: -1
shin1
rotate: false
xy: 456, 190
size: 53, 57
orig: 53, 57
offset: 0, 0
index: -1
shin2
rotate: false
xy: 275, 56
size: 51, 54
orig: 51, 54
offset: 0, 0
index: -1
sword
rotate: false
xy: 176, 178
size: 216, 69
orig: 216, 69
offset: 0, 0
index: -1
thigh1
rotate: false
xy: 394, 184
size: 60, 63
orig: 60, 63
offset: 0, 0
index: -1
thigh2
rotate: false
xy: 275, 112
size: 57, 64
orig: 57, 64
offset: 0, 0
index: -1
upperarm1
rotate: false
xy: 334, 120
size: 50, 56
orig: 50, 56
offset: 0, 0
index: -1
upperarm2
rotate: false
xy: 140, 13
size: 39, 59
orig: 39, 59
offset: 0, 0
index: -1

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

View File

@ -1,195 +0,0 @@
spineboy.png
size: 1024,256
format: RGBA8888
filter: Linear,Linear
repeat: none
eye_indifferent
rotate: false
xy: 890, 146
size: 56, 53
orig: 56, 53
offset: 0, 0
index: -1
eye_surprised
rotate: false
xy: 444, 5
size: 56, 53
orig: 56, 53
offset: 0, 0
index: -1
front_bracer
rotate: false
xy: 966, 103
size: 35, 48
orig: 35, 48
offset: 0, 0
index: -1
front_fist_closed
rotate: false
xy: 847, 84
size: 45, 49
orig: 45, 49
offset: 0, 0
index: -1
front_fist_open
rotate: false
xy: 968, 190
size: 52, 52
orig: 52, 52
offset: 0, 0
index: -1
front_foot
rotate: false
xy: 890, 201
size: 76, 41
orig: 76, 41
offset: 0, 0
index: -1
front_foot_bend1
rotate: false
xy: 444, 98
size: 77, 42
orig: 77, 42
offset: 0, 0
index: -1
front_foot_bend2
rotate: false
xy: 279, 5
size: 65, 56
orig: 65, 56
offset: 0, 0
index: -1
front_shin
rotate: false
xy: 792, 132
size: 49, 110
orig: 49, 110
offset: 0, 0
index: -1
front_thigh
rotate: false
xy: 935, 77
size: 29, 67
orig: 29, 67
offset: 0, 0
index: -1
front_upper_arm
rotate: false
xy: 410, 3
size: 32, 58
orig: 32, 58
offset: 0, 0
index: -1
goggles
rotate: false
xy: 444, 142
size: 157, 100
orig: 157, 100
offset: 0, 0
index: -1
gun
rotate: false
xy: 603, 120
size: 126, 122
orig: 126, 122
offset: 0, 0
index: -1
head
rotate: false
xy: 279, 63
size: 163, 179
orig: 163, 179
offset: 0, 0
index: -1
mouth_grind
rotate: false
xy: 948, 153
size: 56, 35
orig: 56, 35
offset: 0, 0
index: -1
mouth_oooo
rotate: false
xy: 731, 97
size: 56, 35
orig: 56, 35
offset: 0, 0
index: -1
mouth_smile
rotate: false
xy: 789, 95
size: 56, 35
orig: 56, 35
offset: 0, 0
index: -1
muzzle
rotate: false
xy: 2, 2
size: 275, 240
orig: 277, 240
offset: 0, 0
index: -1
neck
rotate: false
xy: 595, 93
size: 22, 25
orig: 22, 25
offset: 0, 0
index: -1
rear_bracer
rotate: false
xy: 966, 58
size: 34, 43
orig: 34, 43
offset: 0, 0
index: -1
rear_foot
rotate: false
xy: 444, 60
size: 68, 36
orig: 68, 36
offset: 0, 0
index: -1
rear_foot_bend1
rotate: false
xy: 523, 100
size: 70, 40
orig: 70, 40
offset: 0, 0
index: -1
rear_foot_bend2
rotate: false
xy: 346, 11
size: 62, 50
orig: 62, 50
offset: 0, 0
index: -1
rear_shin
rotate: false
xy: 843, 135
size: 45, 107
orig: 45, 107
offset: 0, 0
index: -1
rear_thigh
rotate: false
xy: 894, 82
size: 39, 62
orig: 39, 62
offset: 0, 0
index: -1
rear_upper_arm
rotate: false
xy: 502, 6
size: 28, 52
orig: 28, 52
offset: 0, 0
index: -1
torso
rotate: false
xy: 731, 134
size: 59, 108
orig: 59, 108
offset: 0, 0
index: -1

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

View File

@ -1,219 +0,0 @@
<html>
<head>
<meta charset="UTF-8">
<!-----------------------------------------------------------------------------
-- Spine Runtimes Software License
-- Version 2.3
--
-- Copyright (c) 2013-2015, Esoteric Software
-- All rights reserved.
--
-- You are granted a perpetual, non-exclusive, non-sublicensable and
-- non-transferable license to use, install, execute and perform the Spine
-- Runtimes Software (the "Software") and derivative works solely for personal
-- or internal use. Without the written permission of Esoteric Software (see
-- Section 2 of the Spine Software License Agreement), you may not (a) modify,
-- translate, adapt or otherwise create derivative works, improvements of the
-- Software or develop new applications using the Software or (b) remove,
-- delete, alter or obscure any trademarks or any copyright, trademark, patent
-- or other intellectual property or proprietary rights notices on or in the
-- Software, including any copy thereof. Redistributions in binary or source
-- form must include this license and terms.
--
-- THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "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 ESOTERIC SOFTWARE 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.
------------------------------------------------------------------------------>
<title>spine-turbulenz</title>
<script src="../spine-js/spine.js"></script>
<script src="../turbulenz/turbulenzengine.js"></script>
<script src="../turbulenz/graphicsdevice.js"></script>
<script src="../turbulenz/draw2d.js"></script>
<script src="../SpriteBatch.js"></script>
<style>body, input { font-family: tahoma; font-size: 11pt }</style>
</head>
<body>
<div id="message"></div>
<div><canvas id="canvas" width="640" height="480"/></div>
<br>
<input type="button" value="Spineboy" onclick="load('spineboy', 0.6)">
<input type="button" value="Hero" onclick="load('hero', 1)">
<input type="button" value="Goblins" onclick="load('goblins', 1)">
&nbsp; &nbsp; Click to change the animation or skin.
<script>
var canvas = document.getElementById("canvas");
var TurbulenzEngine = WebGLTurbulenzEngine.create({canvas: canvas});
var graphicsDevice = TurbulenzEngine.createGraphicsDevice({});
var draw2D = Draw2D.create({graphicsDevice: graphicsDevice});
load("spineboy", 0.6);
//load("hero", 1);
//load("goblins", 1);
var atlas;
var skeletonData;
var skeletonName;
function load (name, scale) {
skeletonName = name;
TurbulenzEngine.request("data/" + skeletonName + ".atlas", loadAtlas);
function loadAtlas (atlasText) {
var textureCount = 0;
atlas = new spine.Atlas(atlasText, {
load: function (page, path, atlas) {
textureCount++;
graphicsDevice.createTexture({
src: "data/" + path,
mipmaps: true,
onload: function (texture) {
page.rendererObject = texture;
page.width = texture.width;
page.height = texture.height;
atlas.updateUVs(page);
textureCount--;
}
});
},
unload: function (texture) {
texture.destroy();
}
});
function waitForTextures () {
if (!textureCount)
TurbulenzEngine.request("data/" + skeletonName + ".json", loadSkeletonData);
else
setTimeout(waitForTextures, 100);
}
waitForTextures();
function loadSkeletonData (skeletonText) {
var json = new spine.SkeletonJson(new spine.AtlasAttachmentLoader(atlas));
json.scale = scale;
skeletonData = json.readSkeletonData(JSON.parse(skeletonText));
start();
}
}
}
function start () {
spine.Bone.yDown = true;
var skeleton = new spine.Skeleton(skeletonData);
skeleton.x = 320;
skeleton.y = 440;
skeleton.updateWorldTransform();
var stateData = new spine.AnimationStateData(skeletonData);
var state = new spine.AnimationState(stateData);
if (skeletonName == "spineboy") {
stateData.setMixByName("walk", "jump", 0.2);
stateData.setMixByName("run", "jump", 0.2);
stateData.setMixByName("jump", "run", 0.2);
state.setAnimationByName(0, "walk", true);
canvas.onmousedown = function () {
state.setAnimationByName(0, "jump", false);
state.addAnimationByName(0, "run", true, 0);
}
} else if (skeletonName == "hero") {
stateData.defaultMix = 0.2;
stateData.setMixByName("Walk", "Attack", 0);
stateData.setMixByName("Attack", "Run", 0);
stateData.setMixByName("Run", "Attack", 0);
state.setAnimationByName(0, "Idle", true);
canvas.onmousedown = function () {
var name = state.getCurrent(0).animation.name;
if (name == "Idle") {
state.setAnimationByName(0, "Crouch", true);
} else if (name == "Crouch") {
state.setAnimationByName(0, "Walk", true);
} else {
state.setAnimationByName(0, "Attack", false);
state.addAnimationByName(0, "Run", true, 0);
}
}
} else {
skeleton.setSkinByName("goblingirl");
skeleton.setSlotsToSetupPose();
state.setAnimationByName(0, "walk", true);
canvas.onmousedown = function () {
skeleton.setSkinByName(skeleton.skin.name == "goblin" ? "goblingirl" : "goblin");
skeleton.setSlotsToSetupPose();
}
}
state.onEvent = function (trackIndex, event) {
// alert(trackIndex + " event: " + event.data.name)
}
var bgColor = [0.9, 0.9, 0.9, 1.0];
var batch = new SpriteBatch(draw2D);
var lastTime = TurbulenzEngine.time;
function update() {
if (!graphicsDevice) return;
var delta = TurbulenzEngine.time - lastTime;
lastTime = TurbulenzEngine.time;
state.update(delta);
state.apply(skeleton);
skeleton.updateWorldTransform();
graphicsDevice.clear(bgColor, 1.0);
batch.begin(draw2D.blend.alpha);
drawSkeleton(batch, skeleton);
batch.end();
graphicsDevice.endFrame();
}
TurbulenzEngine.setInterval(update, 1000 / 60);
}
var vertices = [];
function drawSkeleton (batch, skeleton) {
var drawOrder = skeleton.drawOrder;
for (var i = 0, n = drawOrder.length; i < n; i++) {
var slot = drawOrder[i];
var attachment = slot.attachment;
if (!(attachment instanceof spine.RegionAttachment)) continue;
attachment.computeVertices(skeleton.x, skeleton.y, slot.bone, vertices);
var blendMode = slot.data.blendMode == spine.BlendMode.additive ? draw2D.blend.additive : draw2D.blend.alpha;
if (batch.blendMode != blendMode) {
batch.end();
batch.begin(blendMode);
}
batch.add(
attachment.rendererObject.page.rendererObject,
vertices[0], vertices[1],
vertices[6], vertices[7],
vertices[2], vertices[3],
vertices[4], vertices[5],
skeleton.r * slot.r,
skeleton.g * slot.g,
skeleton.b * slot.b,
skeleton.a * slot.a,
attachment.uvs[0], attachment.uvs[1],
attachment.uvs[4], attachment.uvs[5]
);
}
}
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,843 +0,0 @@
// Copyright (c) 2011-2012 Turbulenz Limited
/*global VMath*/
/*global WebGLGraphicsDevice*/
/*global WebGLInputDevice*/
/*global WebGLSoundDevice*/
/*global WebGLPhysicsDevice*/
/*global WebGLNetworkDevice*/
/*global Float32Array*/
/*global console*/
/*global window*/
"use strict";
//
// WebGLTurbulenzEngine
//
function WebGLTurbulenzEngine() {}
WebGLTurbulenzEngine.prototype = {
version : '0.24.0.0',
setInterval: function (f, t)
{
var that = this;
return window.setInterval(function () {
that.updateTime();
f();
}, t);
},
clearInterval: function (i)
{
return window.clearInterval(i);
},
createGraphicsDevice: function (params)
{
if (this.graphicsDevice)
{
this.callOnError('GraphicsDevice already created');
return null;
}
else
{
var graphicsDevice = WebGLGraphicsDevice.create(this.canvas, params);
this.graphicsDevice = graphicsDevice;
return graphicsDevice;
}
},
createPhysicsDevice: function (params)
{
if (this.physicsDevice)
{
this.callOnError('PhysicsDevice already created');
return null;
}
else
{
var physicsDevice;
var plugin = this.getPluginObject();
if (plugin)
{
physicsDevice = plugin.createPhysicsDevice(params);
}
else
{
physicsDevice = WebGLPhysicsDevice.create(params);
}
this.physicsDevice = physicsDevice;
return physicsDevice;
}
},
createSoundDevice: function (params)
{
if (this.soundDevice)
{
this.callOnError('SoundDevice already created');
return null;
}
else
{
var soundDevice;
var plugin = this.getPluginObject();
if (plugin)
{
soundDevice = plugin.createSoundDevice(params);
}
else
{
soundDevice = WebGLSoundDevice.create(params);
}
this.soundDevice = soundDevice;
return soundDevice;
}
},
createInputDevice: function (params)
{
if (this.inputDevice)
{
this.callOnError('InputDevice already created');
return null;
}
else
{
var inputDevice = WebGLInputDevice.create(this.canvas, params);
this.inputDevice = inputDevice;
return inputDevice;
}
},
createNetworkDevice: function (params)
{
if (this.networkDevice)
{
throw 'NetworkDevice already created';
}
else
{
var networkDevice = WebGLNetworkDevice.create(params);
this.networkDevice = networkDevice;
return networkDevice;
}
},
createMathDevice: function (/* params */)
{
// Check if the browser supports using apply with Float32Array
try
{
var testVector = new Float32Array([1, 2, 3]);
VMath.v3Build.apply(VMath, testVector);
// Clamp FLOAT_MAX
testVector[0] = VMath.FLOAT_MAX;
VMath.FLOAT_MAX = testVector[0];
}
catch (e)
{
}
return VMath;
},
createNativeMathDevice: function (/* params */)
{
return VMath;
},
getGraphicsDevice: function ()
{
var graphicsDevice = this.graphicsDevice;
if (graphicsDevice === null)
{
this.callOnError("GraphicsDevice not created yet.");
}
return graphicsDevice;
},
getPhysicsDevice: function ()
{
return this.physicsDevice;
},
getSoundDevice: function ()
{
return this.soundDevice;
},
getInputDevice: function ()
{
return this.inputDevice;
},
getNetworkDevice: function ()
{
return this.networkDevice;
},
getMathDevice: function ()
{
return VMath;
},
getNativeMathDevice: function ()
{
return VMath;
},
flush: function ()
{
},
run: function ()
{
},
encrypt: function (msg)
{
return msg;
},
decrypt: function (msg)
{
return msg;
},
generateSignature: function (/* msg */)
{
return null;
},
verifySignature: function (/* msg, sig */)
{
return true;
},
onerror: function (msg)
{
console.error(msg);
},
onwarning: function (msg)
{
console.warn(msg);
},
getSystemInfo: function ()
{
return this.systemInfo;
},
request: function (url, callback)
{
var that = this;
var xhr;
if (window.XMLHttpRequest)
{
xhr = new window.XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new window.ActiveXObject("Microsoft.XMLHTTP");
}
else
{
that.callOnError("No XMLHTTPRequest object could be created");
return;
}
function httpRequestCallback()
{
if (xhr.readyState === 4) /* 4 == complete */
{
if (!that.isUnloading())
{
var xhrResponseText = xhr.responseText;
var xhrStatus = xhr.status;
if ("" === xhrResponseText)
{
xhrResponseText = null;
}
if (null === xhr.getResponseHeader("Content-Type") &&
"" === xhr.getAllResponseHeaders())
{
// Sometimes the browser sets status to 200 OK
// when the connection is closed before the
// message is sent (weird!). In order to address
// this we fail any completely empty responses.
// Hopefully, nobody will get a valid response
// with no headers and no body!
// Except that for cross domain requests getAllResponseHeaders ALWAYS returns an empty string
// even for valid responses...
callback(null, 0);
return;
}
// Fix for loading from file
if (xhrStatus === 0 && xhrResponseText && window.location.protocol === "file:")
{
xhrStatus = 200;
}
// Invoke the callback
if (xhrStatus !== 0)
{
// Under these conditions, we return a null
// response text.
if (404 === xhrStatus)
{
xhrResponseText = null;
}
callback(xhrResponseText, xhrStatus);
}
else
{
// Checking xhr.statusText when xhr.status is
// 0 causes a silent error
callback(xhrResponseText, 0);
}
}
// break circular reference
xhr.onreadystatechange = null;
xhr = null;
callback = null;
}
}
xhr.open('GET', url, true);
if (callback)
{
xhr.onreadystatechange = httpRequestCallback;
}
xhr.send();
},
// Internals
destroy : function ()
{
if (this.networkDevice)
{
delete this.networkDevice;
}
if (this.inputDevice)
{
this.inputDevice.destroy();
delete this.inputDevice;
}
if (this.physicsDevice)
{
delete this.physicsDevice;
}
if (this.soundDevice)
{
if (this.soundDevice.destroy)
{
this.soundDevice.destroy();
}
delete this.soundDevice;
}
if (this.graphicsDevice)
{
this.graphicsDevice.destroy();
delete this.graphicsDevice;
}
if (this.canvas)
{
delete this.canvas;
}
if (this.resizeCanvas)
{
window.removeEventListener('resize', this.resizeCanvas, false);
}
},
getPluginObject : function ()
{
if (!this.plugin &&
this.pluginId)
{
this.plugin = document.getElementById(this.pluginId);
}
return this.plugin;
},
unload : function ()
{
if (!this.unloading)
{
this.unloading = true;
if (this.onunload)
{
this.onunload();
}
if (this.destroy)
{
this.destroy();
}
}
},
isUnloading : function ()
{
return this.unloading;
},
enableProfiling : function ()
{
},
startProfiling : function ()
{
if (console && console.profile && console.profileEnd)
{
console.profile("turbulenz");
}
},
stopProfiling : function ()
{
// Chrome and Safari return an object. IE and Firefox print to the console/profile tab.
var result;
if (console && console.profile && console.profileEnd)
{
console.profileEnd("turbulenz");
if (console.profiles)
{
result = console.profiles[console.profiles.length - 1];
}
}
return result;
},
callOnError : function (msg)
{
var onerror = this.onerror;
if (onerror)
{
onerror(msg);
}
}
};
// Constructor function
WebGLTurbulenzEngine.create = function webGLTurbulenzEngineFn(params)
{
var tz = new WebGLTurbulenzEngine();
var canvas = params.canvas;
var fillParent = params.fillParent;
// To expose unload (the whole interaction needs a re-design)
window.TurbulenzEngineCanvas = tz;
tz.pluginId = params.pluginId;
tz.plugin = null;
// time property
var getTime = Date.now;
var performance = window.performance;
if (performance)
{
// It seems high resolution "now" requires a proper "this"
if (performance.now)
{
getTime = function getTimeFn()
{
return performance.now();
};
}
else if (performance.webkitNow)
{
getTime = function getTimeFn()
{
return performance.webkitNow();
};
}
}
// To be used by the GraphicsDevice for accurate fps calculations
tz.getTime = getTime;
var baseTime = getTime(); // all in milliseconds (our "time" property is in seconds)
// Safari 6.0 has broken object property defines.
var canUseDefineProperty = true;
var navStr = navigator.userAgent;
var navVersionIdx = navStr.indexOf("Version/6.0");
if (-1 !== navVersionIdx)
{
if (-1 !== navStr.substring(navVersionIdx).indexOf("Safari/"))
{
canUseDefineProperty = false;
}
}
if (canUseDefineProperty && Object.defineProperty)
{
Object.defineProperty(tz, "time", {
get : function () {
return ((getTime() - baseTime) * 0.001);
},
set : function (newValue) {
if (typeof newValue === 'number')
{
// baseTime is in milliseconds, newValue is in seconds
baseTime = (getTime() - (newValue * 1000));
}
else
{
tz.callOnError("Must set 'time' attribute to a number");
}
},
enumerable : false,
configurable : false
});
tz.updateTime = function ()
{
};
}
else
{
tz.updateTime = function ()
{
this.time = ((getTime() - baseTime) * 0.001);
};
}
// fast zero timeouts
if (window.postMessage)
{
var zeroTimeoutMessageName = "0-timeout-message";
var timeouts = [];
var timeId = 0;
var setZeroTimeout = function setZeroTimeoutFn(fn)
{
timeId += 1;
var timeout = {
id : timeId,
fn : fn
};
timeouts.push(timeout);
window.postMessage(zeroTimeoutMessageName, "*");
return timeout;
};
var clearZeroTimeout = function clearZeroTimeoutFn(timeout)
{
var id = timeout;
var numTimeouts = timeouts.length;
for (var n = 0; n < numTimeouts; n += 1)
{
if (timeouts[n].id === id)
{
timeouts.splice(n, 1);
return;
}
}
};
var handleZeroTimeoutMessages = function handleZeroTimeoutMessagesFn(event)
{
if (event.source === window &&
event.data === zeroTimeoutMessageName)
{
event.stopPropagation();
if (timeouts.length && !tz.isUnloading())
{
var timeout = timeouts.shift();
var fn = timeout.fn;
fn();
}
}
};
window.addEventListener("message", handleZeroTimeoutMessages, true);
tz.setTimeout = function (f, t)
{
if (t < 1)
{
return setZeroTimeout(f);
}
else
{
var that = this;
return window.setTimeout(function () {
that.updateTime();
if (!that.isUnloading())
{
f();
}
}, t);
}
};
tz.clearTimeout = function (i)
{
if (typeof i === 'object')
{
return clearZeroTimeout(i);
}
else
{
return window.clearTimeout(i);
}
};
}
else
{
tz.setTimeout = function (f, t)
{
var that = this;
return window.setTimeout(function () {
that.updateTime();
if (!that.isUnloading())
{
f();
}
}, t);
};
tz.clearTimeout = function (i)
{
return window.clearTimeout(i);
};
}
var requestAnimationFrame = (window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.mozRequestAnimationFrame);
if (requestAnimationFrame)
{
tz.setInterval = function (f, t)
{
var that = this;
if (Math.abs(t - (1000 / 60)) <= 1)
{
var interval = {
enabled: true
};
var wrap1 = function wrap1()
{
if (interval.enabled)
{
that.updateTime();
if (!that.isUnloading())
{
f();
}
requestAnimationFrame(wrap1, that.canvas);
}
};
requestAnimationFrame(wrap1, that.canvas);
return interval;
}
else
{
var wrap2 = function wrap2()
{
that.updateTime();
if (!that.isUnloading())
{
f();
}
};
return window.setInterval(wrap2, t);
}
};
tz.clearInterval = function (i)
{
if (typeof i === 'object')
{
i.enabled = false;
}
else
{
window.clearInterval(i);
}
};
}
tz.canvas = canvas;
tz.networkDevice = null;
tz.inputDevice = null;
tz.physicsDevice = null;
tz.soundDevice = null;
tz.graphicsDevice = null;
if (fillParent)
{
// Resize canvas to fill parent
tz.resizeCanvas = function ()
{
canvas.width = canvas.parentNode.clientWidth;
canvas.height = canvas.parentNode.clientHeight;
};
tz.resizeCanvas();
window.addEventListener('resize', tz.resizeCanvas, false);
}
var previousOnBeforeUnload = window.onbeforeunload;
window.onbeforeunload = function ()
{
tz.unload();
if (previousOnBeforeUnload)
{
previousOnBeforeUnload.call(this);
}
};
tz.time = 0;
// System info
var systemInfo = {
architecture: '',
cpuDescription: '',
cpuVendor: '',
numPhysicalCores: 1,
numLogicalCores: 1,
ramInMegabytes: 0,
frequencyInMegaHZ: 0,
osVersionMajor: 0,
osVersionMinor: 0,
osVersionBuild: 0,
osName: navigator.platform,
userLocale: (navigator.language || navigator.userLanguage).replace('-', '_')
};
var userAgent = navigator.userAgent;
var osIndex = userAgent.indexOf('Windows');
if (osIndex !== -1)
{
systemInfo.osName = 'Windows';
if (navigator.platform === 'Win64')
{
systemInfo.architecture = 'x86_64';
}
else if (navigator.platform === 'Win32')
{
systemInfo.architecture = 'x86';
}
osIndex += 7;
if (userAgent.slice(osIndex, (osIndex + 4)) === ' NT ')
{
osIndex += 4;
systemInfo.osVersionMajor = parseInt(userAgent.slice(osIndex, (osIndex + 1)), 10);
systemInfo.osVersionMinor = parseInt(userAgent.slice((osIndex + 2), (osIndex + 4)), 10);
}
}
else
{
osIndex = userAgent.indexOf('Mac OS X');
if (osIndex !== -1)
{
systemInfo.osName = 'Darwin';
if (navigator.platform.indexOf('Intel') !== -1)
{
systemInfo.architecture = 'x86';
}
osIndex += 9;
systemInfo.osVersionMajor = parseInt(userAgent.slice(osIndex, (osIndex + 2)), 10);
systemInfo.osVersionMinor = parseInt(userAgent.slice((osIndex + 3), (osIndex + 4)), 10);
systemInfo.osVersionBuild = (parseInt(userAgent.slice((osIndex + 5), (osIndex + 6)), 10) || 0);
}
else
{
osIndex = userAgent.indexOf('Linux');
if (osIndex !== -1)
{
systemInfo.osName = 'Linux';
if (navigator.platform.indexOf('64') !== -1)
{
systemInfo.architecture = 'x86_64';
}
else if (navigator.platform.indexOf('x86') !== -1)
{
systemInfo.architecture = 'x86';
}
}
}
}
tz.systemInfo = systemInfo;
var b64ConversionTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split('');
tz.base64Encode = function base64EncodeFn(bytes)
{
var output = "";
var numBytes = bytes.length;
var valueToChar = b64ConversionTable;
var n, chr1, chr2, chr3, enc1, enc2, enc3, enc4;
/*jshint bitwise: false*/
n = 0;
while (n < numBytes)
{
chr1 = bytes[n];
n += 1;
enc1 = (chr1 >> 2);
if (n < numBytes)
{
chr2 = bytes[n];
n += 1;
if (n < numBytes)
{
chr3 = bytes[n];
n += 1;
enc2 = (((chr1 & 3) << 4) | (chr2 >> 4));
enc3 = (((chr2 & 15) << 2) | (chr3 >> 6));
enc4 = (chr3 & 63);
}
else
{
enc2 = (((chr1 & 3) << 4) | (chr2 >> 4));
enc3 = ((chr2 & 15) << 2);
enc4 = 64;
}
}
else
{
enc2 = ((chr1 & 3) << 4);
enc3 = 64;
enc4 = 64;
}
output += valueToChar[enc1];
output += valueToChar[enc2];
output += valueToChar[enc3];
output += valueToChar[enc4];
}
/*jshint bitwise: true*/
return output;
};
return tz;
};
window.WebGLTurbulenzEngine = WebGLTurbulenzEngine;