Skip to content

Instantly share code, notes, and snippets.

@sfpgmr
Last active April 11, 2017 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sfpgmr/08b63a12bf30f979304fc1091500da04 to your computer and use it in GitHub Desktop.
Save sfpgmr/08b63a12bf30f979304fc1091500da04 to your computer and use it in GitHub Desktop.
global.js
node_modules
typings
(function () {
'use strict';
const VIRTUAL_WIDTH = 480;
const VIRTUAL_HEIGHT = 640;
var pause = false;
var game = null;
// キー入力
class BasicInput{
constructor () {
this.keyCheck = { up: false, down: false, left: false, right: false, z: false ,x:false};
this.keyBuffer = [];
this.keyup_ = null;
this.keydown_ = null;
//this.gamepadCheck = { up: false, down: false, left: false, right: false, z: false ,x:false};
window.addEventListener('gamepadconnected',(e)=>{
this.gamepad = e.gamepad;
});
window.addEventListener('gamepaddisconnected',(e)=>{
delete this.gamepad;
});
if(window.navigator.getGamepads){
this.gamepad = window.navigator.getGamepads()[0];
}
}
clear()
{
for(var d in this.keyCheck){
this.keyCheck[d] = false;
}
this.keyBuffer.length = 0;
}
keydown(e) {
var e = d3.event;
var keyBuffer = this.keyBuffer;
var keyCheck = this.keyCheck;
var handle = true;
if (keyBuffer.length > 16) {
keyBuffer.shift();
}
if (e.keyCode == 80 /* P */) {
if (!pause) {
game.pause();
} else {
game.resume();
}
}
keyBuffer.push(e.keyCode);
switch (e.keyCode) {
case 74:
case 37:
case 100:
keyCheck.left = true;
handle = true;
break;
case 73:
case 38:
case 104:
keyCheck.up = true;
handle = true;
break;
case 76:
case 39:
case 102:
keyCheck.right = true;
handle = true;
break;
case 75:
case 40:
case 98:
keyCheck.down = true;
handle = true;
break;
case 90:
keyCheck.z = true;
handle = true;
break;
case 88:
keyCheck.x = true;
handle = true;
break;
}
if (handle) {
e.preventDefault();
e.returnValue = false;
return false;
}
}
keyup() {
var e = d3.event;
var keyBuffer = this.keyBuffer;
var keyCheck = this.keyCheck;
var handle = false;
switch (e.keyCode) {
case 74:
case 37:
case 100:
keyCheck.left = false;
handle = true;
break;
case 73:
case 38:
case 104:
keyCheck.up = false;
handle = true;
break;
case 76:
case 39:
case 102:
keyCheck.right = false;
handle = true;
break;
case 75:
case 40:
case 98:
keyCheck.down = false;
handle = true;
break;
case 90:
keyCheck.z = false;
handle = true;
break;
case 88:
keyCheck.x = false;
handle = true;
break;
}
if (handle) {
e.preventDefault();
e.returnValue = false;
return false;
}
}
//イベントにバインドする
bind()
{
d3.select('body').on('keydown.basicInput',this.keydown.bind(this));
d3.select('body').on('keyup.basicInput',this.keyup.bind(this));
}
// アンバインドする
unbind()
{
d3.select('body').on('keydown.basicInput',null);
d3.select('body').on('keyup.basicInput',null);
}
get up() {
return this.keyCheck.up || (this.gamepad && (this.gamepad.buttons[12].pressed || this.gamepad.axes[1] < -0.1));
}
get down() {
return this.keyCheck.down || (this.gamepad && (this.gamepad.buttons[13].pressed || this.gamepad.axes[1] > 0.1));
}
get left() {
return this.keyCheck.left || (this.gamepad && (this.gamepad.buttons[14].pressed || this.gamepad.axes[0] < -0.1));
}
get right() {
return this.keyCheck.right || (this.gamepad && (this.gamepad.buttons[15].pressed || this.gamepad.axes[0] > 0.1));
}
get z() {
let ret = this.keyCheck.z
|| (((!this.zButton || (this.zButton && !this.zButton) ) && this.gamepad && this.gamepad.buttons[0].pressed));
this.zButton = this.gamepad && this.gamepad.buttons[0].pressed;
return ret;
}
get start() {
let ret = ((!this.startButton_ || (this.startButton_ && !this.startButton_) ) && this.gamepad && this.gamepad.buttons[9].pressed);
this.startButton_ = this.gamepad && this.gamepad.buttons[9].pressed;
return ret;
}
get aButton(){
let ret = (((!this.aButton_ || (this.aButton_ && !this.aButton_) ) && this.gamepad && this.gamepad.buttons[0].pressed));
this.aButton_ = this.gamepad && this.gamepad.buttons[0].pressed;
return ret;
}
*update(taskIndex)
{
while(taskIndex >= 0){
if(window.navigator.getGamepads){
this.gamepad = window.navigator.getGamepads()[0];
}
taskIndex = yield;
}
}
}
class SFConsole {
constructor() {
this.CONSOLE_WIDTH = 0;
this.CONSOLE_HEIGHT = 0;
this.initConsole();
}
render() {
//this.controls.update();
this.renderer.render(this.scene, this.camera); // レンダリング
this.updateInput.next(1);
if(this.input.left){
this.mesh.position.x -= 0.5;
}
if(this.input.right){
this.mesh.position.x += 0.5;
}
if(this.input.up){
this.mesh.position.y += 0.5;
}
if(this.input.down){
this.mesh.position.y -= 0.5;
}
if(this.input.left && this.mesh.rotation.z < 0.4){
this.mesh.rotation.z += 0.01;
} else if(this.input.right && this.mesh.rotation.z > -0.4){
this.mesh.rotation.z -= 0.01;
} else if(this.mesh.rotation.z != 0){
if(this.mesh.rotation.z < 0){
this.mesh.rotation.z += 0.05;
if(this.mesh.rotation.z > 0){
this.mesh.rotation.z = 0;
}
}
if(this.mesh.rotation.z > 0){
this.mesh.rotation.z -= 0.05;
if(this.mesh.rotation.z < 0){
this.mesh.rotation.z = 0;
}
}
}
window.requestAnimationFrame(this.render.bind(this));
}
/// コンソール画面の初期化
initConsole() {
// レンダラーの作成
this.renderer = new THREE.WebGLRenderer({ antialias: false, sortObjects: true });
var renderer = this.renderer;
this.calcScreenSize();
renderer.setSize(this.CONSOLE_WIDTH, this.CONSOLE_HEIGHT);
renderer.setClearColor(0, 1);
//renderer.domElement.id = 'console';
//renderer.domElement.style.zIndex = 0;
document.getElementById('console').appendChild(renderer.domElement);
window.addEventListener('resize', () => {
this.calcScreenSize();
renderer.setSize(this.CONSOLE_WIDTH, this.CONSOLE_HEIGHT);
});
// シーンの作成
this.scene = new THREE.Scene();
// カメラの作成
this.camera = new THREE.PerspectiveCamera(15.0, VIRTUAL_WIDTH / VIRTUAL_HEIGHT);
this.camera.position.z = VIRTUAL_HEIGHT / 2;
this.camera.lookAt(new THREE.Vector3(0, 0, 0));
//this.controls = new THREE.OrbitControls(this.camera);
this.input = new BasicInput();
this.input.bind();
this.updateInput = this.input.update(1);
// ライトの作成
this.light = new THREE.DirectionalLight(0xffffff);
this.light.position.set(0.577, 0.577, 0.577);
this.scene.add(this.light);
this.ambient = new THREE.AmbientLight(0x808080);
this.scene.add(this.ambient);
this.renderer.clear();
// jsonファイルの読み込み
this.loader = new THREE.JSONLoader();
var json = './test.json';// jsonパスの指定
this.loader.load(json, (geometry, materials) => {
var faceMaterial = new THREE.MultiMaterial(materials);
this.mesh = new THREE.Mesh(geometry, faceMaterial);
this.mesh.rotation.set(90, 0, 0);
this.mesh.position.set(0, 0, 0.0);
this.mesh.scale.set(5, 5, 5);
this.scene.add(this.mesh); // シーンへメッシュの追加
this.render(); // レンダリング実行
});
}
calcScreenSize() {
var width = window.innerWidth;
var height = window.innerHeight;
if (width >= height) {
width = height * VIRTUAL_WIDTH / VIRTUAL_HEIGHT;
while (width > window.innerWidth) {
--height;
width = height * VIRTUAL_WIDTH / VIRTUAL_HEIGHT;
}
} else {
height = width * VIRTUAL_HEIGHT / VIRTUAL_WIDTH;
while (height > window.innerHeight) {
--width;
height = width * VIRTUAL_HEIGHT / VIRTUAL_WIDTH;
}
}
this.CONSOLE_WIDTH = width;
this.CONSOLE_HEIGHT = height;
}
}
document.addEventListener('DOMContentLoaded', function () {
let sf = new SFConsole();
});
}());
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlcyI6WyJnbG9iYWwuanMiLCJpby5qcyIsIm1haW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZJUlRVQUxfV0lEVEggPSA0ODA7XHJcbmV4cG9ydCBjb25zdCBWSVJUVUFMX0hFSUdIVCA9IDY0MDtcclxuXHJcbmV4cG9ydCBjb25zdCBWX1JJR0hUID0gVklSVFVBTF9XSURUSCAvIDIuMDtcclxuZXhwb3J0IGNvbnN0IFZfVE9QID0gVklSVFVBTF9IRUlHSFQgLyAyLjA7XHJcbmV4cG9ydCBjb25zdCBWX0xFRlQgPSAtMSAqIFZJUlRVQUxfV0lEVEggLyAyLjA7XHJcbmV4cG9ydCBjb25zdCBWX0JPVFRPTSA9IC0xICogVklSVFVBTF9IRUlHSFQgLyAyLjA7XHJcblxyXG5leHBvcnQgY29uc3QgQ0hBUl9TSVpFID0gODtcclxuZXhwb3J0IGNvbnN0IFRFWFRfV0lEVEggPSBWSVJUVUFMX1dJRFRIIC8gQ0hBUl9TSVpFO1xyXG5leHBvcnQgY29uc3QgVEVYVF9IRUlHSFQgPSBWSVJUVUFMX0hFSUdIVCAvIENIQVJfU0laRTtcclxuZXhwb3J0IGNvbnN0IFBJWEVMX1NJWkUgPSAxO1xyXG5leHBvcnQgY29uc3QgQUNUVUFMX0NIQVJfU0laRSA9IENIQVJfU0laRSAqIFBJWEVMX1NJWkU7XHJcbmV4cG9ydCBjb25zdCBTUFJJVEVfU0laRV9YID0gMTYuMDtcclxuZXhwb3J0IGNvbnN0IFNQUklURV9TSVpFX1kgPSAxNi4wO1xyXG5leHBvcnQgY29uc3QgQ0hFQ0tfQ09MTElTSU9OID0gdHJ1ZTtcclxuZXhwb3J0IGNvbnN0IERFQlVHID0gZmFsc2U7XHJcbmV4cG9ydCB2YXIgdGV4dHVyZUZpbGVzID0ge307XHJcbmV4cG9ydCB2YXIgc3RhZ2UgPSAwO1xyXG5leHBvcnQgdmFyIHRhc2tzID0gbnVsbDtcclxuZXhwb3J0IHZhciBnYW1lVGltZXIgPSBudWxsO1xyXG5leHBvcnQgdmFyIGJvbWJzID0gbnVsbDtcclxuZXhwb3J0IHZhciBhZGRTY29yZSA9IG51bGw7XHJcbmV4cG9ydCB2YXIgbXlzaGlwXyA9IG51bGw7XHJcbmV4cG9ydCB2YXIgcGF1c2UgPSBmYWxzZTtcclxuZXhwb3J0IHZhciBnYW1lID0gbnVsbDtcclxuZXhwb3J0IHZhciByZXNvdXJjZUJhc2UgPSAnJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRHYW1lKHYpe2dhbWUgPSB2O31cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhdXNlKHYpe3BhdXNlID0gdjt9XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRNeVNoaXAodil7bXlzaGlwXyA9IHY7fVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QWRkU2NvcmUodil7YWRkU2NvcmUgPSB2O31cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEJvbWJzKHYpe2JvbWJzID0gdjt9XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRHYW1lVGltZXIodil7Z2FtZVRpbWVyID0gdjt9XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRUYXNrcyh2KXt0YXNrcyA9IHY7fVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0U3RhZ2Uodil7c3RhZ2UgPSB2O31cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFJlc291cmNlQmFzZSh2KXtyZXNvdXJjZUJhc2UgPSB2O31cclxuXHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgKiBhcyBzZmcgZnJvbSAnLi9nbG9iYWwuanMnOyBcclxuXHJcbi8vIOOCreODvOWFpeWKm1xyXG5leHBvcnQgY2xhc3MgQmFzaWNJbnB1dHtcclxuY29uc3RydWN0b3IgKCkge1xyXG4gIHRoaXMua2V5Q2hlY2sgPSB7IHVwOiBmYWxzZSwgZG93bjogZmFsc2UsIGxlZnQ6IGZhbHNlLCByaWdodDogZmFsc2UsIHo6IGZhbHNlICx4OmZhbHNlfTtcclxuICB0aGlzLmtleUJ1ZmZlciA9IFtdO1xyXG4gIHRoaXMua2V5dXBfID0gbnVsbDtcclxuICB0aGlzLmtleWRvd25fID0gbnVsbDtcclxuICAvL3RoaXMuZ2FtZXBhZENoZWNrID0geyB1cDogZmFsc2UsIGRvd246IGZhbHNlLCBsZWZ0OiBmYWxzZSwgcmlnaHQ6IGZhbHNlLCB6OiBmYWxzZSAseDpmYWxzZX07XHJcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRjb25uZWN0ZWQnLChlKT0+e1xyXG4gICAgdGhpcy5nYW1lcGFkID0gZS5nYW1lcGFkO1xyXG4gIH0pO1xyXG4gXHJcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLChlKT0+e1xyXG4gICAgZGVsZXRlIHRoaXMuZ2FtZXBhZDtcclxuICB9KTsgXHJcbiBcclxuIGlmKHdpbmRvdy5uYXZpZ2F0b3IuZ2V0R2FtZXBhZHMpe1xyXG4gICB0aGlzLmdhbWVwYWQgPSB3aW5kb3cubmF2aWdhdG9yLmdldEdhbWVwYWRzKClbMF07XHJcbiB9IFxyXG59XHJcblxyXG4gIGNsZWFyKClcclxuICB7XHJcbiAgICBmb3IodmFyIGQgaW4gdGhpcy5rZXlDaGVjayl7XHJcbiAgICAgIHRoaXMua2V5Q2hlY2tbZF0gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMua2V5QnVmZmVyLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG4gIFxyXG4gIGtleWRvd24oZSkge1xyXG4gICAgdmFyIGUgPSBkMy5ldmVudDtcclxuICAgIHZhciBrZXlCdWZmZXIgPSB0aGlzLmtleUJ1ZmZlcjtcclxuICAgIHZhciBrZXlDaGVjayA9IHRoaXMua2V5Q2hlY2s7XHJcbiAgICB2YXIgaGFuZGxlID0gdHJ1ZTtcclxuICAgICBcclxuICAgIGlmIChrZXlCdWZmZXIubGVuZ3RoID4gMTYpIHtcclxuICAgICAga2V5QnVmZmVyLnNoaWZ0KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChlLmtleUNvZGUgPT0gODAgLyogUCAqLykge1xyXG4gICAgICBpZiAoIXNmZy5wYXVzZSkge1xyXG4gICAgICAgIHNmZy5nYW1lLnBhdXNlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2ZnLmdhbWUucmVzdW1lKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgICAgIFxyXG4gICAga2V5QnVmZmVyLnB1c2goZS5rZXlDb2RlKTtcclxuICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgIGNhc2UgNzQ6XHJcbiAgICAgIGNhc2UgMzc6XHJcbiAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgIGtleUNoZWNrLmxlZnQgPSB0cnVlO1xyXG4gICAgICAgIGhhbmRsZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNzM6XHJcbiAgICAgIGNhc2UgMzg6XHJcbiAgICAgIGNhc2UgMTA0OlxyXG4gICAgICAgIGtleUNoZWNrLnVwID0gdHJ1ZTtcclxuICAgICAgICBoYW5kbGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDc2OlxyXG4gICAgICBjYXNlIDM5OlxyXG4gICAgICBjYXNlIDEwMjpcclxuICAgICAgICBrZXlDaGVjay5yaWdodCA9IHRydWU7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA3NTpcclxuICAgICAgY2FzZSA0MDpcclxuICAgICAgY2FzZSA5ODpcclxuICAgICAgICBrZXlDaGVjay5kb3duID0gdHJ1ZTtcclxuICAgICAgICBoYW5kbGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDkwOlxyXG4gICAgICAgIGtleUNoZWNrLnogPSB0cnVlO1xyXG4gICAgICAgIGhhbmRsZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgODg6XHJcbiAgICAgICAga2V5Q2hlY2sueCA9IHRydWU7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAga2V5dXAoKSB7XHJcbiAgICB2YXIgZSA9IGQzLmV2ZW50O1xyXG4gICAgdmFyIGtleUJ1ZmZlciA9IHRoaXMua2V5QnVmZmVyO1xyXG4gICAgdmFyIGtleUNoZWNrID0gdGhpcy5rZXlDaGVjaztcclxuICAgIHZhciBoYW5kbGUgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XHJcbiAgICAgIGNhc2UgNzQ6XHJcbiAgICAgIGNhc2UgMzc6XHJcbiAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgIGtleUNoZWNrLmxlZnQgPSBmYWxzZTtcclxuICAgICAgICBoYW5kbGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDczOlxyXG4gICAgICBjYXNlIDM4OlxyXG4gICAgICBjYXNlIDEwNDpcclxuICAgICAgICBrZXlDaGVjay51cCA9IGZhbHNlO1xyXG4gICAgICAgIGhhbmRsZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNzY6XHJcbiAgICAgIGNhc2UgMzk6XHJcbiAgICAgIGNhc2UgMTAyOlxyXG4gICAgICAgIGtleUNoZWNrLnJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA3NTpcclxuICAgICAgY2FzZSA0MDpcclxuICAgICAgY2FzZSA5ODpcclxuICAgICAgICBrZXlDaGVjay5kb3duID0gZmFsc2U7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA5MDpcclxuICAgICAgICBrZXlDaGVjay56ID0gZmFsc2U7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSA4ODpcclxuICAgICAgICBrZXlDaGVjay54ID0gZmFsc2U7XHJcbiAgICAgICAgaGFuZGxlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy/jgqTjg5njg7Pjg4jjgavjg5DjgqTjg7Pjg4njgZnjgotcclxuICBiaW5kKClcclxuICB7XHJcbiAgICBkMy5zZWxlY3QoJ2JvZHknKS5vbigna2V5ZG93bi5iYXNpY0lucHV0Jyx0aGlzLmtleWRvd24uYmluZCh0aGlzKSk7XHJcbiAgICBkMy5zZWxlY3QoJ2JvZHknKS5vbigna2V5dXAuYmFzaWNJbnB1dCcsdGhpcy5rZXl1cC5iaW5kKHRoaXMpKTtcclxuICB9XHJcbiAgLy8g44Ki44Oz44OQ44Kk44Oz44OJ44GZ44KLXHJcbiAgdW5iaW5kKClcclxuICB7XHJcbiAgICBkMy5zZWxlY3QoJ2JvZHknKS5vbigna2V5ZG93bi5iYXNpY0lucHV0JyxudWxsKTtcclxuICAgIGQzLnNlbGVjdCgnYm9keScpLm9uKCdrZXl1cC5iYXNpY0lucHV0JyxudWxsKTtcclxuICB9XHJcbiAgXHJcbiAgZ2V0IHVwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMua2V5Q2hlY2sudXAgfHwgKHRoaXMuZ2FtZXBhZCAmJiAodGhpcy5nYW1lcGFkLmJ1dHRvbnNbMTJdLnByZXNzZWQgfHwgdGhpcy5nYW1lcGFkLmF4ZXNbMV0gPCAtMC4xKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZG93bigpIHtcclxuICAgIHJldHVybiB0aGlzLmtleUNoZWNrLmRvd24gfHwgKHRoaXMuZ2FtZXBhZCAmJiAodGhpcy5nYW1lcGFkLmJ1dHRvbnNbMTNdLnByZXNzZWQgfHwgdGhpcy5nYW1lcGFkLmF4ZXNbMV0gPiAwLjEpKTtcclxuICB9XHJcblxyXG4gIGdldCBsZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMua2V5Q2hlY2subGVmdCB8fCAodGhpcy5nYW1lcGFkICYmICh0aGlzLmdhbWVwYWQuYnV0dG9uc1sxNF0ucHJlc3NlZCB8fCB0aGlzLmdhbWVwYWQuYXhlc1swXSA8IC0wLjEpKTtcclxuICB9XHJcblxyXG4gIGdldCByaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLmtleUNoZWNrLnJpZ2h0IHx8ICh0aGlzLmdhbWVwYWQgJiYgKHRoaXMuZ2FtZXBhZC5idXR0b25zWzE1XS5wcmVzc2VkIHx8IHRoaXMuZ2FtZXBhZC5heGVzWzBdID4gMC4xKSk7XHJcbiAgfVxyXG4gIFxyXG4gIGdldCB6KCkge1xyXG4gICAgIGxldCByZXQgPSB0aGlzLmtleUNoZWNrLnogXHJcbiAgICB8fCAoKCghdGhpcy56QnV0dG9uIHx8ICh0aGlzLnpCdXR0b24gJiYgIXRoaXMuekJ1dHRvbikgKSAmJiB0aGlzLmdhbWVwYWQgJiYgdGhpcy5nYW1lcGFkLmJ1dHRvbnNbMF0ucHJlc3NlZCkpIDtcclxuICAgIHRoaXMuekJ1dHRvbiA9IHRoaXMuZ2FtZXBhZCAmJiB0aGlzLmdhbWVwYWQuYnV0dG9uc1swXS5wcmVzc2VkO1xyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcbiAgXHJcbiAgZ2V0IHN0YXJ0KCkge1xyXG4gICAgbGV0IHJldCA9ICgoIXRoaXMuc3RhcnRCdXR0b25fIHx8ICh0aGlzLnN0YXJ0QnV0dG9uXyAmJiAhdGhpcy5zdGFydEJ1dHRvbl8pICkgJiYgdGhpcy5nYW1lcGFkICYmIHRoaXMuZ2FtZXBhZC5idXR0b25zWzldLnByZXNzZWQpIDtcclxuICAgIHRoaXMuc3RhcnRCdXR0b25fID0gdGhpcy5nYW1lcGFkICYmIHRoaXMuZ2FtZXBhZC5idXR0b25zWzldLnByZXNzZWQ7XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuICBcclxuICBnZXQgYUJ1dHRvbigpe1xyXG4gICAgIGxldCByZXQgPSAoKCghdGhpcy5hQnV0dG9uXyB8fCAodGhpcy5hQnV0dG9uXyAmJiAhdGhpcy5hQnV0dG9uXykgKSAmJiB0aGlzLmdhbWVwYWQgJiYgdGhpcy5nYW1lcGFkLmJ1dHRvbnNbMF0ucHJlc3NlZCkpIDtcclxuICAgIHRoaXMuYUJ1dHRvbl8gPSB0aGlzLmdhbWVwYWQgJiYgdGhpcy5nYW1lcGFkLmJ1dHRvbnNbMF0ucHJlc3NlZDtcclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG4gIFxyXG4gICp1cGRhdGUodGFza0luZGV4KVxyXG4gIHtcclxuICAgIHdoaWxlKHRhc2tJbmRleCA+PSAwKXtcclxuICAgICAgaWYod2luZG93Lm5hdmlnYXRvci5nZXRHYW1lcGFkcyl7XHJcbiAgICAgICAgdGhpcy5nYW1lcGFkID0gd2luZG93Lm5hdmlnYXRvci5nZXRHYW1lcGFkcygpWzBdO1xyXG4gICAgICB9IFxyXG4gICAgICB0YXNrSW5kZXggPSB5aWVsZDsgICAgIFxyXG4gICAgfVxyXG4gIH1cclxufSIsIlwidXNlIHN0cmljdFwiO1xyXG5pbXBvcnQgKiBhcyBzZmcgZnJvbSAnLi9nbG9iYWwuanMnO1xyXG5pbXBvcnQgKiBhcyBpbyBmcm9tICcuL2lvLmpzJztcclxuXHJcbnZhciBtZXNoLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgY29udHJvbHM7XHJcbnZhciB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoLFxyXG4gIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuXHJcblxyXG5jbGFzcyBTRkNvbnNvbGUge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5DT05TT0xFX1dJRFRIID0gMDtcclxuICAgIHRoaXMuQ09OU09MRV9IRUlHSFQgPSAwO1xyXG4gICAgdGhpcy5pbml0Q29uc29sZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgLy90aGlzLmNvbnRyb2xzLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEpOyAvLyDjg6zjg7Pjg4Djg6rjg7PjgrBcclxuICAgIHRoaXMudXBkYXRlSW5wdXQubmV4dCgxKTtcclxuICAgIGlmKHRoaXMuaW5wdXQubGVmdCl7XHJcbiAgICAgIHRoaXMubWVzaC5wb3NpdGlvbi54IC09IDAuNTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmlucHV0LnJpZ2h0KXtcclxuICAgICAgdGhpcy5tZXNoLnBvc2l0aW9uLnggKz0gMC41O1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuaW5wdXQudXApe1xyXG4gICAgICB0aGlzLm1lc2gucG9zaXRpb24ueSArPSAwLjU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5pbnB1dC5kb3duKXtcclxuICAgICAgdGhpcy5tZXNoLnBvc2l0aW9uLnkgLT0gMC41O1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuaW5wdXQubGVmdCAmJiB0aGlzLm1lc2gucm90YXRpb24ueiA8IDAuNCl7XHJcbiAgICAgIHRoaXMubWVzaC5yb3RhdGlvbi56ICs9IDAuMDE7IFxyXG4gICAgfSBlbHNlIGlmKHRoaXMuaW5wdXQucmlnaHQgJiYgdGhpcy5tZXNoLnJvdGF0aW9uLnogPiAtMC40KXtcclxuICAgICAgdGhpcy5tZXNoLnJvdGF0aW9uLnogLT0gMC4wMTtcclxuICAgIH0gZWxzZSBpZih0aGlzLm1lc2gucm90YXRpb24ueiAhPSAwKXtcclxuICAgICAgaWYodGhpcy5tZXNoLnJvdGF0aW9uLnogPCAwKXtcclxuICAgICAgICB0aGlzLm1lc2gucm90YXRpb24ueiArPSAwLjA1O1xyXG4gICAgICAgIGlmKHRoaXMubWVzaC5yb3RhdGlvbi56ID4gMCl7XHJcbiAgICAgICAgICB0aGlzLm1lc2gucm90YXRpb24ueiA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMubWVzaC5yb3RhdGlvbi56ID4gMCl7XHJcbiAgICAgICAgdGhpcy5tZXNoLnJvdGF0aW9uLnogLT0gMC4wNTtcclxuICAgICAgICBpZih0aGlzLm1lc2gucm90YXRpb24ueiA8IDApe1xyXG4gICAgICAgICAgdGhpcy5tZXNoLnJvdGF0aW9uLnogPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG4gIC8vLyDjgrPjg7Pjgr3jg7zjg6vnlLvpnaLjga7liJ3mnJ/ljJZcclxuICBpbml0Q29uc29sZSgpIHtcclxuICAgIC8vIOODrOODs+ODgOODqeODvOOBruS9nOaIkFxyXG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHsgYW50aWFsaWFzOiBmYWxzZSwgc29ydE9iamVjdHM6IHRydWUgfSk7XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgdGhpcy5jYWxjU2NyZWVuU2l6ZSgpO1xyXG4gICAgcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLkNPTlNPTEVfV0lEVEgsIHRoaXMuQ09OU09MRV9IRUlHSFQpO1xyXG4gICAgcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigwLCAxKTtcclxuICAgIC8vcmVuZGVyZXIuZG9tRWxlbWVudC5pZCA9ICdjb25zb2xlJztcclxuICAgIC8vcmVuZGVyZXIuZG9tRWxlbWVudC5zdHlsZS56SW5kZXggPSAwO1xyXG5cclxuXHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKHJlbmRlcmVyLmRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FsY1NjcmVlblNpemUoKTtcclxuICAgICAgcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLkNPTlNPTEVfV0lEVEgsIHRoaXMuQ09OU09MRV9IRUlHSFQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g44K344O844Oz44Gu5L2c5oiQXHJcbiAgICB0aGlzLnNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XHJcblxyXG4gICAgLy8g44Kr44Oh44Op44Gu5L2c5oiQXHJcbiAgICB0aGlzLmNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgxNS4wLCBzZmcuVklSVFVBTF9XSURUSCAvIHNmZy5WSVJUVUFMX0hFSUdIVCk7XHJcbiAgICB0aGlzLmNhbWVyYS5wb3NpdGlvbi56ID0gc2ZnLlZJUlRVQUxfSEVJR0hUIC8gMjtcclxuICAgIHRoaXMuY2FtZXJhLmxvb2tBdChuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKSk7XHJcblxyXG4gICAgLy90aGlzLmNvbnRyb2xzID0gbmV3IFRIUkVFLk9yYml0Q29udHJvbHModGhpcy5jYW1lcmEpO1xyXG4gICAgdGhpcy5pbnB1dCA9IG5ldyBpby5CYXNpY0lucHV0KCk7XHJcbiAgICB0aGlzLmlucHV0LmJpbmQoKTtcclxuICAgIHRoaXMudXBkYXRlSW5wdXQgPSB0aGlzLmlucHV0LnVwZGF0ZSgxKTtcclxuXHJcbiAgICAvLyDjg6njgqTjg4jjga7kvZzmiJBcclxuICAgIHRoaXMubGlnaHQgPSBuZXcgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCgweGZmZmZmZik7XHJcbiAgICB0aGlzLmxpZ2h0LnBvc2l0aW9uLnNldCgwLjU3NywgMC41NzcsIDAuNTc3KTtcclxuICAgIHRoaXMuc2NlbmUuYWRkKHRoaXMubGlnaHQpO1xyXG5cclxuICAgIHRoaXMuYW1iaWVudCA9IG5ldyBUSFJFRS5BbWJpZW50TGlnaHQoMHg4MDgwODApO1xyXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5hbWJpZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXIuY2xlYXIoKTtcclxuXHJcbiAgICAvLyBqc29u44OV44Kh44Kk44Or44Gu6Kqt44G/6L6844G/XHJcbiAgICB0aGlzLmxvYWRlciA9IG5ldyBUSFJFRS5KU09OTG9hZGVyKCk7XHJcbiAgICB2YXIganNvbiA9ICcuL3Rlc3QuanNvbic7Ly8ganNvbuODkeOCueOBruaMh+WumlxyXG4gICAgdGhpcy5sb2FkZXIubG9hZChqc29uLCAoZ2VvbWV0cnksIG1hdGVyaWFscykgPT4ge1xyXG4gICAgICB2YXIgZmFjZU1hdGVyaWFsID0gbmV3IFRIUkVFLk11bHRpTWF0ZXJpYWwobWF0ZXJpYWxzKTtcclxuXHJcbiAgICAgIHRoaXMubWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCBmYWNlTWF0ZXJpYWwpO1xyXG4gICAgICB0aGlzLm1lc2gucm90YXRpb24uc2V0KDkwLCAwLCAwKTtcclxuICAgICAgdGhpcy5tZXNoLnBvc2l0aW9uLnNldCgwLCAwLCAwLjApO1xyXG4gICAgICB0aGlzLm1lc2guc2NhbGUuc2V0KDUsIDUsIDUpO1xyXG4gICAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLm1lc2gpOyAvLyDjgrfjg7zjg7Pjgbjjg6Hjg4Pjgrfjg6Xjga7ov73liqBcclxuICAgICAgdGhpcy5yZW5kZXIoKTsgLy8g44Os44Oz44OA44Oq44Oz44Kw5a6f6KGMXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbGNTY3JlZW5TaXplKCkge1xyXG4gICAgdmFyIHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgaWYgKHdpZHRoID49IGhlaWdodCkge1xyXG4gICAgICB3aWR0aCA9IGhlaWdodCAqIHNmZy5WSVJUVUFMX1dJRFRIIC8gc2ZnLlZJUlRVQUxfSEVJR0hUO1xyXG4gICAgICB3aGlsZSAod2lkdGggPiB3aW5kb3cuaW5uZXJXaWR0aCkge1xyXG4gICAgICAgIC0taGVpZ2h0O1xyXG4gICAgICAgIHdpZHRoID0gaGVpZ2h0ICogc2ZnLlZJUlRVQUxfV0lEVEggLyBzZmcuVklSVFVBTF9IRUlHSFQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGhlaWdodCA9IHdpZHRoICogc2ZnLlZJUlRVQUxfSEVJR0hUIC8gc2ZnLlZJUlRVQUxfV0lEVEg7XHJcbiAgICAgIHdoaWxlIChoZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHtcclxuICAgICAgICAtLXdpZHRoO1xyXG4gICAgICAgIGhlaWdodCA9IHdpZHRoICogc2ZnLlZJUlRVQUxfSEVJR0hUIC8gc2ZnLlZJUlRVQUxfV0lEVEg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuQ09OU09MRV9XSURUSCA9IHdpZHRoO1xyXG4gICAgdGhpcy5DT05TT0xFX0hFSUdIVCA9IGhlaWdodDtcclxuICB9XHJcbn1cclxuXHJcbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgbGV0IHNmID0gbmV3IFNGQ29uc29sZSgpO1xyXG59KTtcclxuXHJcbiJdLCJuYW1lcyI6WyJzZmcucGF1c2UiLCJzZmcuZ2FtZSIsInNmZy5WSVJUVUFMX1dJRFRIIiwic2ZnLlZJUlRVQUxfSEVJR0hUIiwiaW8uQmFzaWNJbnB1dCJdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEFBQU8sTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDOztBQUVsQyxBQUFPLEFBQW9DO0FBQzNDLEFBQU8sQUFBbUM7QUFDMUMsQUFBTyxBQUF3QztBQUMvQyxBQUFPLEFBQTJDOztBQUVsRCxBQUFPLEFBQW9CO0FBQzNCLEFBQU8sQUFBNkM7QUFDcEQsQUFBTyxBQUErQztBQUN0RCxBQUFPLEFBQXFCO0FBQzVCLEFBQU8sQUFBZ0Q7QUFDdkQsQUFBTyxBQUEyQjtBQUNsQyxBQUFPLEFBQTJCO0FBQ2xDLEFBQU8sQUFBNkI7QUFDcEMsQUFBTyxBQUFvQjtBQUMzQixBQUFPLEFBQXNCO0FBQzdCLEFBQU8sQUFBYztBQUNyQixBQUFPLEFBQWlCO0FBQ3hCLEFBQU8sQUFBcUI7QUFDNUIsQUFBTyxBQUFpQjtBQUN4QixBQUFPLEFBQW9CO0FBQzNCLEFBQU8sQUFBbUI7QUFDMUIsQUFBTyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsQUFBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQUFDdkIsQUFBTyxBQUFz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O01BQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztLQUM3Qjs7SUFFRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO01BQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7S0FDN0I7O0lBRUQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO01BQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztNQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0tBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ2xDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO09BQ0Y7TUFDRCxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUM3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
export const VIRTUAL_WIDTH = 240;
export const VIRTUAL_HEIGHT = 320;
export const V_RIGHT = VIRTUAL_WIDTH / 2.0;
export const V_TOP = VIRTUAL_HEIGHT / 2.0;
export const V_LEFT = -1 * VIRTUAL_WIDTH / 2.0;
export const V_BOTTOM = -1 * VIRTUAL_HEIGHT / 2.0;
export const CHAR_SIZE = 8;
export const TEXT_WIDTH = VIRTUAL_WIDTH / CHAR_SIZE;
export const TEXT_HEIGHT = VIRTUAL_HEIGHT / CHAR_SIZE;
export const PIXEL_SIZE = 1;
export const ACTUAL_CHAR_SIZE = CHAR_SIZE * PIXEL_SIZE;
export const SPRITE_SIZE_X = 16.0;
export const SPRITE_SIZE_Y = 16.0;
export const CHECK_COLLISION = true;
export const DEBUG = false;
export const VIRTUAL_WIDTH = 480;
export const VIRTUAL_HEIGHT = 640;
export const V_RIGHT = VIRTUAL_WIDTH / 2.0;
export const V_TOP = VIRTUAL_HEIGHT / 2.0;
export const V_LEFT = -1 * VIRTUAL_WIDTH / 2.0;
export const V_BOTTOM = -1 * VIRTUAL_HEIGHT / 2.0;
export const CHAR_SIZE = 8;
export const TEXT_WIDTH = VIRTUAL_WIDTH / CHAR_SIZE;
export const TEXT_HEIGHT = VIRTUAL_HEIGHT / CHAR_SIZE;
export const PIXEL_SIZE = 1;
export const ACTUAL_CHAR_SIZE = CHAR_SIZE * PIXEL_SIZE;
export const SPRITE_SIZE_X = 16.0;
export const SPRITE_SIZE_Y = 16.0;
export const CHECK_COLLISION = true;
export const DEBUG = false;
export var textureFiles = {};
export var stage = 0;
export var tasks = null;
export var gameTimer = null;
export var bombs = null;
export var addScore = null;
export var myship_ = null;
export var pause = false;
export var game = null;
export var resourceBase = '';
export function setGame(v){game = v;}
export function setPause(v){pause = v;}
export function setMyShip(v){myship_ = v;}
export function setAddScore(v){addScore = v;}
export function setBombs(v){bombs = v;}
export function setGameTimer(v){gameTimer = v;}
export function setTasks(v){tasks = v;}
export function setStage(v){stage = v;}
export function setResourceBase(v){resourceBase = v;}
!function(){
'use strict';
const fs = require('fs');
const gulp = require('gulp');
const watch = require('gulp-watch');
const browserSync =require('browser-sync');
const rollup = require('rollup').rollup;
const commonjs = require('rollup-plugin-commonjs');
const nodeResolve = require('rollup-plugin-node-resolve');
// JSのビルド
gulp.task('js',function(){
rollup({
entry: './main.js',
plugins: [
nodeResolve({ jsnext: true }),
commonjs()
],
external:[
'sharp','electron','events','tween.js'
]
}).then((bundle)=>{
bundle.write({
format: 'iife',
dest: './bundle.js',
sourceMap: 'inline'
});
});
});
gulp.task('browser-sync', function() {
browserSync({
server: {
baseDir: "./"
,index : "index.html"
},
files:['./bundle.js','./index.html']
});
});
gulp.task('bs-reload', function () {
browserSync.reload();
});
gulp.task('default',['js','browser-sync'],function(){
watch('./main.js',()=>gulp.start(['js']));
// watch(['./index.html','./bundle.js'],()=>gulp.start(['bs-reload']));
});
}();
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Blenderのオブジェクトをthree.jsにインポートする</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/three.js/84/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.7.4/d3.min.js"></script>
<!-- <script type="text/javascript" src="https://threejs.org/examples/js/controls/OrbitControls.js"></script> -->
<script type="text/javascript" src="./bundle.js"></script>
<style>
body {
margin:0;
padding:0;
width:100%;
}
#console {
padding: 0;
margin-left:auto;
margin-right:auto;
text-align: center;
}
</style>
</head>
<body>
<div id="console"></div>
</body>
</html>
"use strict";
import * as sfg from './global.js';
// キー入力
export class BasicInput{
constructor () {
this.keyCheck = { up: false, down: false, left: false, right: false, z: false ,x:false};
this.keyBuffer = [];
this.keyup_ = null;
this.keydown_ = null;
//this.gamepadCheck = { up: false, down: false, left: false, right: false, z: false ,x:false};
window.addEventListener('gamepadconnected',(e)=>{
this.gamepad = e.gamepad;
});
window.addEventListener('gamepaddisconnected',(e)=>{
delete this.gamepad;
});
if(window.navigator.getGamepads){
this.gamepad = window.navigator.getGamepads()[0];
}
}
clear()
{
for(var d in this.keyCheck){
this.keyCheck[d] = false;
}
this.keyBuffer.length = 0;
}
keydown(e) {
var e = d3.event;
var keyBuffer = this.keyBuffer;
var keyCheck = this.keyCheck;
var handle = true;
if (keyBuffer.length > 16) {
keyBuffer.shift();
}
if (e.keyCode == 80 /* P */) {
if (!sfg.pause) {
sfg.game.pause();
} else {
sfg.game.resume();
}
}
keyBuffer.push(e.keyCode);
switch (e.keyCode) {
case 74:
case 37:
case 100:
keyCheck.left = true;
handle = true;
break;
case 73:
case 38:
case 104:
keyCheck.up = true;
handle = true;
break;
case 76:
case 39:
case 102:
keyCheck.right = true;
handle = true;
break;
case 75:
case 40:
case 98:
keyCheck.down = true;
handle = true;
break;
case 90:
keyCheck.z = true;
handle = true;
break;
case 88:
keyCheck.x = true;
handle = true;
break;
}
if (handle) {
e.preventDefault();
e.returnValue = false;
return false;
}
}
keyup() {
var e = d3.event;
var keyBuffer = this.keyBuffer;
var keyCheck = this.keyCheck;
var handle = false;
switch (e.keyCode) {
case 74:
case 37:
case 100:
keyCheck.left = false;
handle = true;
break;
case 73:
case 38:
case 104:
keyCheck.up = false;
handle = true;
break;
case 76:
case 39:
case 102:
keyCheck.right = false;
handle = true;
break;
case 75:
case 40:
case 98:
keyCheck.down = false;
handle = true;
break;
case 90:
keyCheck.z = false;
handle = true;
break;
case 88:
keyCheck.x = false;
handle = true;
break;
}
if (handle) {
e.preventDefault();
e.returnValue = false;
return false;
}
}
//イベントにバインドする
bind()
{
d3.select('body').on('keydown.basicInput',this.keydown.bind(this));
d3.select('body').on('keyup.basicInput',this.keyup.bind(this));
}
// アンバインドする
unbind()
{
d3.select('body').on('keydown.basicInput',null);
d3.select('body').on('keyup.basicInput',null);
}
get up() {
return this.keyCheck.up || (this.gamepad && (this.gamepad.buttons[12].pressed || this.gamepad.axes[1] < -0.1));
}
get down() {
return this.keyCheck.down || (this.gamepad && (this.gamepad.buttons[13].pressed || this.gamepad.axes[1] > 0.1));
}
get left() {
return this.keyCheck.left || (this.gamepad && (this.gamepad.buttons[14].pressed || this.gamepad.axes[0] < -0.1));
}
get right() {
return this.keyCheck.right || (this.gamepad && (this.gamepad.buttons[15].pressed || this.gamepad.axes[0] > 0.1));
}
get z() {
let ret = this.keyCheck.z
|| (((!this.zButton || (this.zButton && !this.zButton) ) && this.gamepad && this.gamepad.buttons[0].pressed)) ;
this.zButton = this.gamepad && this.gamepad.buttons[0].pressed;
return ret;
}
get start() {
let ret = ((!this.startButton_ || (this.startButton_ && !this.startButton_) ) && this.gamepad && this.gamepad.buttons[9].pressed) ;
this.startButton_ = this.gamepad && this.gamepad.buttons[9].pressed;
return ret;
}
get aButton(){
let ret = (((!this.aButton_ || (this.aButton_ && !this.aButton_) ) && this.gamepad && this.gamepad.buttons[0].pressed)) ;
this.aButton_ = this.gamepad && this.gamepad.buttons[0].pressed;
return ret;
}
*update(taskIndex)
{
while(taskIndex >= 0){
if(window.navigator.getGamepads){
this.gamepad = window.navigator.getGamepads()[0];
}
taskIndex = yield;
}
}
}
"use strict";
import * as sfg from './global.js';
import * as io from './io.js';
var mesh, renderer, scene, camera, controls;
var width = window.innerWidth,
height = window.innerHeight;
class SFConsole {
constructor() {
this.CONSOLE_WIDTH = 0;
this.CONSOLE_HEIGHT = 0;
this.initConsole();
}
render() {
//this.controls.update();
this.renderer.render(this.scene, this.camera); // レンダリング
this.updateInput.next(1);
if(this.input.left){
this.mesh.position.x -= 0.5;
}
if(this.input.right){
this.mesh.position.x += 0.5;
}
if(this.input.up){
this.mesh.position.y += 0.5;
}
if(this.input.down){
this.mesh.position.y -= 0.5;
}
if(this.input.left && this.mesh.rotation.z < 0.4){
this.mesh.rotation.z += 0.01;
} else if(this.input.right && this.mesh.rotation.z > -0.4){
this.mesh.rotation.z -= 0.01;
} else if(this.mesh.rotation.z != 0){
if(this.mesh.rotation.z < 0){
this.mesh.rotation.z += 0.05;
if(this.mesh.rotation.z > 0){
this.mesh.rotation.z = 0;
}
}
if(this.mesh.rotation.z > 0){
this.mesh.rotation.z -= 0.05;
if(this.mesh.rotation.z < 0){
this.mesh.rotation.z = 0;
}
}
}
window.requestAnimationFrame(this.render.bind(this));
}
/// コンソール画面の初期化
initConsole() {
// レンダラーの作成
this.renderer = new THREE.WebGLRenderer({ antialias: false, sortObjects: true });
var renderer = this.renderer;
this.calcScreenSize();
renderer.setSize(this.CONSOLE_WIDTH, this.CONSOLE_HEIGHT);
renderer.setClearColor(0, 1);
//renderer.domElement.id = 'console';
//renderer.domElement.style.zIndex = 0;
document.getElementById('console').appendChild(renderer.domElement);
window.addEventListener('resize', () => {
this.calcScreenSize();
renderer.setSize(this.CONSOLE_WIDTH, this.CONSOLE_HEIGHT);
});
// シーンの作成
this.scene = new THREE.Scene();
// カメラの作成
this.camera = new THREE.PerspectiveCamera(15.0, sfg.VIRTUAL_WIDTH / sfg.VIRTUAL_HEIGHT);
this.camera.position.z = sfg.VIRTUAL_HEIGHT / 2;
this.camera.lookAt(new THREE.Vector3(0, 0, 0));
//this.controls = new THREE.OrbitControls(this.camera);
this.input = new io.BasicInput();
this.input.bind();
this.updateInput = this.input.update(1);
// ライトの作成
this.light = new THREE.DirectionalLight(0xffffff);
this.light.position.set(0.577, 0.577, 0.577);
this.scene.add(this.light);
this.ambient = new THREE.AmbientLight(0x808080);
this.scene.add(this.ambient);
this.renderer.clear();
// jsonファイルの読み込み
this.loader = new THREE.JSONLoader();
var json = './test.json';// jsonパスの指定
this.loader.load(json, (geometry, materials) => {
var faceMaterial = new THREE.MultiMaterial(materials);
this.mesh = new THREE.Mesh(geometry, faceMaterial);
this.mesh.rotation.set(90, 0, 0);
this.mesh.position.set(0, 0, 0.0);
this.mesh.scale.set(5, 5, 5);
this.scene.add(this.mesh); // シーンへメッシュの追加
this.render(); // レンダリング実行
});
}
calcScreenSize() {
var width = window.innerWidth;
var height = window.innerHeight;
if (width >= height) {
width = height * sfg.VIRTUAL_WIDTH / sfg.VIRTUAL_HEIGHT;
while (width > window.innerWidth) {
--height;
width = height * sfg.VIRTUAL_WIDTH / sfg.VIRTUAL_HEIGHT;
}
} else {
height = width * sfg.VIRTUAL_HEIGHT / sfg.VIRTUAL_WIDTH;
while (height > window.innerHeight) {
--width;
height = width * sfg.VIRTUAL_HEIGHT / sfg.VIRTUAL_WIDTH;
}
}
this.CONSOLE_WIDTH = width;
this.CONSOLE_HEIGHT = height;
}
}
document.addEventListener('DOMContentLoaded', function () {
let sf = new SFConsole();
});
{
"name": "2ds2test0001",
"version": "1.0.0",
"description": "",
"main": "index.html",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gist.github.com/08b63a12bf30f979304fc1091500da04.git"
},
"author": "S.F.",
"license": "MIT",
"bugs": {
"url": "https://gist.github.com/08b63a12bf30f979304fc1091500da04"
},
"homepage": "https://gist.github.com/08b63a12bf30f979304fc1091500da04",
"devDependencies": {
"browser-sync": "^2.18.8",
"gulp": "^3.9.1",
"gulp-watch": "^4.3.11",
"rollup": "^0.41.6",
"rollup-plugin-commonjs": "^8.0.2",
"rollup-plugin-node-resolve": "^3.0.0"
}
}
{
"materials":[{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":103,
"DbgColor":15658734,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.225,0.24375,0.2625],
"depthTest":true,
"colorDiffuse":[0.432,0.468,0.504],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":7,
"DbgName":"Shape.008"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":103,
"DbgColor":61166,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.3375,0.35625,0.375],
"depthTest":true,
"colorDiffuse":[0.648,0.684,0.72],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":5,
"DbgName":"Shape.007"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":103,
"DbgColor":15658734,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.225,0.24375,0.2625],
"depthTest":true,
"colorDiffuse":[0.432,0.468,0.504],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":0,
"DbgName":"Shape.003"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":103,
"DbgColor":238,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.225,0.24375,0.2625],
"depthTest":true,
"colorDiffuse":[0.432,0.468,0.504],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":3,
"DbgName":"Shape.002"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":103,
"DbgColor":60928,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.3375,0.35625,0.375],
"depthTest":true,
"colorDiffuse":[0.648,0.684,0.72],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":2,
"DbgName":"Shape"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":50,
"DbgColor":15658496,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.5,0.5,0.5],
"depthTest":true,
"colorDiffuse":[0.64,0.0109646,0.0404263],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":4,
"DbgName":"Material.001"
},{
"shading":"phong",
"doubleSided":false,
"colorEmissive":[0,0,0],
"specularCoef":77,
"DbgColor":15597806,
"transparent":false,
"blending":"NormalBlending",
"colorSpecular":[0.09,0.2025,0.36],
"depthTest":true,
"colorDiffuse":[0.136,0.306,0.544],
"opacity":1,
"wireframe":false,
"depthWrite":true,
"visible":true,
"DbgIndex":6,
"DbgName":"Shape.001"
}],
"uvs":[],
"vertices":[0.02,0.0700001,0.5,0.00800003,0.38,0.68,-0.00799997,0.38,0.68,-0.02,0.0700001,0.5,0.00800003,0.38,0.68,-0.00799997,0.38,0.68,0.02,0.0700001,0.5,0.022,0.07,0.36,0.016,-0.00999999,0.26,0.01,0.39,0.64,-0.02,0.0700001,0.5,-0.022,0.07,0.36,-0.016,-0.00999999,0.26,-0.00999997,0.39,0.64,0.546096,4.19011e-08,0.688658,0.00297965,-2.20259e-08,0.379282,0.00297966,0.0171875,0.439439,0.511721,0.0080209,0.697252,0.511721,6.14343e-08,0.78319,0.546096,6.34468e-08,0.792929,0.00297968,2.94708e-08,0.628502,0.00297966,-0.0171876,0.439439,0.511721,-0.00802081,0.697252,0.075,0.09,0.155,0.159,0.054,0.155,0.117,0.012,-0.04,0.075,0.03,-0.04,0.195,-0.03,0.155,0.135,-0.03,-0.04,0.159,-0.114,0.155,0.117,-0.072,-0.04,0.075,-0.15,0.155,0.075,-0.09,-0.04,0.075,0.12,0.41,0.18,0.0750001,0.41,0.225,-0.0299999,0.41,0.18,-0.135,0.41,0.075,-0.18,0.41,0.0750001,0.12,0.62,0.18,0.0750001,0.62,0.225,-0.0299999,0.62,0.18,-0.135,0.62,0.0750001,-0.18,0.62,-0.075,0.03,-0.04,-0.117,0.012,-0.04,-0.159,0.054,0.155,-0.075,0.09,0.155,-0.135,-0.03,-0.04,-0.195,-0.03,0.155,-0.117,-0.072,-0.04,-0.159,-0.114,0.155,-0.075,-0.09,-0.04,-0.075,-0.15,0.155,-0.18,0.0750001,0.41,-0.075,0.12,0.41,-0.225,-0.0299999,0.41,-0.18,-0.135,0.41,-0.075,-0.18,0.41,-0.18,0.0750001,0.62,-0.075,0.12,0.62,-0.225,-0.0299999,0.62,-0.18,-0.135,0.62,-0.075,-0.18,0.62,-0.0150001,0.0149998,-0.745,0.0149999,0.0149998,-0.745,0.0599999,-0.0300002,-0.745,0.045,0.0149999,-0.505,0.09,-0.0300001,-0.505,0.12,-0.0300001,-0.265,0.075,0.0149999,-0.265,0.03,0.12,-0.265,0.0749999,-0.0600002,-0.745,0.09,-0.0600001,-0.505,0.12,-0.0600001,-0.265,0.03,-0.12,-0.505,-0.03,-0.12,-0.505,0.06,-0.12,-0.265,-0.06,-0.12,-0.265,0.035,0.12,-0.1,0.075,0.03,-0.04,0.135,-0.03,-0.04,0.117,-0.072,-0.04,0.075,-0.09,-0.04,-0.075,-0.09,-0.04,-0.03,0.12,-0.265,-0.035,0.12,-0.1,-0.0600001,-0.0300002,-0.745,-0.045,0.0149999,-0.505,-0.09,-0.0300001,-0.505,-0.075,0.0149999,-0.265,-0.12,-0.0300001,-0.265,-0.0750001,-0.0600002,-0.745,-0.09,-0.0600001,-0.505,-0.12,-0.0600001,-0.265,-0.075,0.03,-0.04,-0.135,-0.03,-0.04,-0.117,-0.072,-0.04,-0.117,0.012,-0.04,0.117,0.012,-0.04,-0.075,0.12,0.62,-0.18,0.0750001,0.62,-0.135,0.0300001,0.71,-0.0749999,0.0560001,0.71,-0.225,-0.0299999,0.62,-0.161,-0.0299999,0.71,-0.135,-0.0899999,0.71,-0.18,-0.135,0.62,-0.075,-0.18,0.62,-0.0749999,-0.116,0.71,0.135,0.0300001,0.71,0.18,0.0750001,0.62,0.0750001,0.12,0.62,0.0750001,0.0560001,0.71,0.161,-0.0299999,0.71,0.225,-0.0299999,0.62,0.135,-0.0899999,0.71,0.18,-0.135,0.62,0.0750001,-0.116,0.71,0.0750001,-0.18,0.62,0.953184,3.69514e-08,0.374206,0.00520084,-7.46299e-08,-0.165794,0.00520084,0.0299999,-0.060794,0.893184,0.014,0.389206,0.893184,7.10457e-08,0.539206,0.953184,7.45585e-08,0.556206,0.00520087,1.52551e-08,0.269206,0.00520084,-0.0300001,-0.060794,0.893184,-0.014,0.389206,-0.015,0.0899999,-0.505,0.015,0.0899999,-0.505,0.0149999,0.0149998,-0.745,-0.0150001,0.0149998,-0.745,0.045,0.0149999,-0.505,-0.03,0.12,-0.265,0.03,0.12,-0.265,-0.045,0.0149999,-0.505,5.15794e-08,0.0700001,0.59,-0.0199999,0.0700001,0.5,-0.00799991,0.38,0.68,6.18953e-08,0.38,0.708,0.00800009,0.38,0.68,0.0200001,0.0700001,0.5,-0.00799991,0.38,0.68,6.17205e-08,0.38,0.706,6.29444e-08,0.41,0.72,0.00800009,0.38,0.68,3.09477e-08,0.04,0.354,-0.0199999,0.0700001,0.5,5.12297e-08,0.0600001,0.586,5.15794e-08,0.0700001,0.59,-0.0219999,0.07,0.36,2.62268e-08,1.31134e-08,0.3,-0.016,-0.00999999,0.26,-0.00999992,0.39,0.64,5.42021e-08,0.4,0.62,1.9233e-08,-3.41714e-09,0.22,0.0200001,0.0700001,0.5,0.0220001,0.07,0.36,0.016,-0.00999999,0.26,0.0100001,0.39,0.64,-0.546096,4.19011e-08,0.688658,-0.00297959,-2.20259e-08,0.379282,-0.00297958,0.0171875,0.439439,-0.511721,0.0080209,0.697252,-0.511721,6.14343e-08,0.78319,-0.546096,6.34468e-08,0.792929,-0.00297957,2.94708e-08,0.628502,-0.00297958,-0.0171876,0.439439,-0.511721,-0.00802081,0.697252,-0.075,0.09,0.155,-0.159,0.054,0.155,-0.117,0.012,-0.04,-0.075,0.03,-0.04,-0.195,-0.03,0.155,-0.135,-0.03,-0.04,-0.159,-0.114,0.155,-0.117,-0.072,-0.04,-0.075,-0.15,0.155,-0.075,-0.09,-0.04,-0.075,0.12,0.41,-0.18,0.0750001,0.41,-0.225,-0.0299999,0.41,-0.18,-0.135,0.41,-0.075,-0.18,0.41,-0.075,0.12,0.62,-0.18,0.0750001,0.62,-0.225,-0.0299999,0.62,-0.18,-0.135,0.62,-0.075,-0.18,0.62,1.35505e-08,-0.12,0.155,3.58433e-08,-0.15,0.41,5.42021e-08,-0.15,0.62,3.58433e-08,0.0870001,0.41,1.35505e-08,0.057,0.155,5.42021e-08,0.0870001,0.62,0.075,0.03,-0.04,0.117,0.012,-0.04,0.159,0.054,0.155,0.075,0.09,0.155,0.135,-0.03,-0.04,0.195,-0.03,0.155,0.117,-0.072,-0.04,0.159,-0.114,0.155,0.075,-0.09,-0.04,0.075,-0.15,0.155,0.18,0.0750001,0.41,0.075,0.12,0.41,0.225,-0.0299999,0.41,0.18,-0.135,0.41,0.075,-0.18,0.41,0.18,0.0750001,0.62,0.0750001,0.12,0.62,0.225,-0.0299999,0.62,0.18,-0.135,0.62,0.0750001,-0.18,0.62,-7.95547e-08,-0.0600002,-0.91,0.0149999,0.0149998,-0.745,-0.0150001,0.0149998,-0.745,-0.0600001,-0.0300002,-0.745,-0.045,0.0149999,-0.505,-0.09,-0.0300001,-0.505,-0.12,-0.0300001,-0.265,-0.075,0.0149999,-0.265,-0.03,0.12,-0.265,-0.0750001,-0.0600002,-0.745,-0.09,-0.0600001,-0.505,-0.12,-0.0600001,-0.265,-6.513e-08,-0.0900002,-0.745,-0.03,-0.12,-0.505,0.03,-0.12,-0.505,-0.06,-0.12,-0.265,0.06,-0.12,-0.265,-0.035,0.12,-0.1,-0.075,0.03,-0.04,-0.135,-0.03,-0.04,-0.117,-0.072,-0.04,-0.075,-0.09,-0.04,0.075,-0.09,-0.04,0.03,0.12,-0.265,0.035,0.12,-0.1,1.35505e-08,-0.12,0.155,1.35505e-08,0.057,0.155,0.0599999,-0.0300002,-0.745,0.045,0.0149999,-0.505,0.09,-0.0300001,-0.505,0.075,0.0149999,-0.265,0.12,-0.0300001,-0.265,0.0749999,-0.0600002,-0.745,0.09,-0.0600001,-0.505,0.12,-0.0600001,-0.265,0.075,0.03,-0.04,0.135,-0.03,-0.04,0.117,-0.072,-0.04,0.117,0.012,-0.04,-0.117,0.012,-0.04,0.0750001,0.12,0.62,0.18,0.0750001,0.62,0.135,0.0300001,0.71,0.0750001,0.0560001,0.71,0.225,-0.0299999,0.62,0.161,-0.0299999,0.71,0.135,-0.0899999,0.71,0.18,-0.135,0.62,0.0750001,-0.18,0.62,0.0750001,-0.116,0.71,5.42021e-08,-0.15,0.62,6.20702e-08,-0.0859999,0.71,6.20702e-08,0.0230001,0.71,5.42021e-08,0.0870001,0.62,-0.135,0.0300001,0.71,-0.18,0.0750001,0.62,-0.075,0.12,0.62,-0.0749999,0.0560001,0.71,-0.161,-0.0299999,0.71,-0.225,-0.0299999,0.62,-0.135,-0.0899999,0.71,-0.18,-0.135,0.62,-0.0749999,-0.116,0.71,-0.075,-0.18,0.62,-8.74228e-09,0.12,-0.1,-2.3167e-08,0.12,-0.265,-2.3167e-08,0.12,-0.265,-2.3167e-08,0.12,-0.265,-8.74228e-09,0.12,-0.1,-8.74228e-09,0.12,-0.1,-0.953183,3.69514e-08,0.374206,-0.00520086,-7.46299e-08,-0.165794,-0.00520085,0.0299999,-0.060794,-0.893184,0.014,0.389206,-0.893184,7.10457e-08,0.539206,-0.953183,7.45585e-08,0.556206,-0.00520083,1.52551e-08,0.269206,-0.00520085,-0.0300001,-0.060794,-0.893184,-0.014,0.389206,0.015,0.0899999,-0.505,-0.015,0.0899999,-0.505,-0.0150001,0.0149998,-0.745,0.0149999,0.0149998,-0.745,-0.045,0.0149999,-0.505,0.03,0.12,-0.265,-0.03,0.12,-0.265,0.045,0.0149999,-0.505],
"metadata":{
"generator":"io_three",
"vertices":302,
"faces":316,
"normals":224,
"materials":7,
"version":3,
"uvs":0,
"type":"Geometry"
},
"faces":[35,136,0,1,139,0,0,0,0,0,35,139,2,3,136,0,1,1,1,1,34,146,6,148,1,2,2,2,34,6,149,148,1,3,3,3,34,146,7,6,1,4,4,4,35,151,8,7,146,1,5,5,5,5,34,9,154,144,1,6,6,6,34,4,9,144,1,7,7,7,34,144,143,4,1,8,8,8,35,4,6,7,9,1,9,9,9,9,34,8,155,154,1,10,10,10,34,154,9,7,1,11,11,11,34,154,7,8,1,12,12,12,34,148,10,146,1,13,13,13,34,148,149,10,1,14,14,14,34,10,11,146,1,15,15,15,35,146,11,12,151,1,16,16,16,16,34,144,154,13,1,17,17,17,34,144,13,5,1,18,18,18,34,144,143,5,1,19,19,19,35,13,11,10,5,1,20,20,20,20,34,155,12,11,1,21,21,21,34,11,13,154,1,22,22,22,34,11,154,155,1,23,23,23,35,14,15,16,17,2,24,24,24,24,35,18,19,14,17,2,25,25,25,25,35,20,16,15,21,2,26,26,26,26,35,22,21,15,14,2,27,27,27,27,35,19,18,22,14,2,28,28,28,28,35,18,17,16,20,2,29,29,29,29,35,20,21,22,18,2,30,30,30,30,35,23,24,25,26,3,31,31,31,31,35,24,27,28,25,3,32,32,32,32,35,27,29,30,28,3,33,33,33,33,35,29,31,32,30,3,34,34,34,34,35,33,34,24,23,3,35,35,35,35,35,34,35,27,24,3,36,36,36,36,35,35,36,29,27,3,37,37,37,37,35,36,37,31,29,3,38,38,38,38,35,38,39,34,33,3,39,39,39,39,35,39,40,35,34,3,40,40,40,40,35,40,41,36,35,3,41,41,41,41,35,41,42,37,36,3,42,42,42,42,34,32,31,189,3,43,43,43,35,189,31,37,190,3,44,44,44,44,35,190,37,42,191,3,45,45,45,45,35,192,33,23,193,3,46,46,46,46,35,194,38,33,192,3,47,47,47,47,34,26,193,23,3,48,48,48,35,43,44,45,46,3,49,49,49,49,35,44,47,48,45,3,50,50,50,50,35,47,49,50,48,3,51,51,51,51,35,49,51,52,50,3,52,52,52,52,35,46,45,53,54,3,53,53,53,53,35,45,48,55,53,3,54,54,54,54,35,48,50,56,55,3,55,55,55,55,35,50,52,57,56,3,56,56,56,56,35,54,53,58,59,3,57,57,57,57,35,53,55,60,58,3,58,58,58,58,35,55,56,61,60,3,59,59,59,59,35,56,57,62,61,3,60,60,60,60,34,189,52,51,3,61,61,61,35,190,57,52,189,3,62,62,62,62,35,191,62,57,190,3,63,63,63,63,35,193,46,54,192,3,64,64,64,64,35,192,54,59,194,3,65,65,65,65,34,46,193,43,3,66,66,66,34,215,63,64,4,67,67,67,34,65,215,64,4,68,68,68,34,65,64,66,4,69,69,69,34,66,67,65,4,70,70,70,35,68,67,66,69,4,71,71,71,71,34,69,66,70,4,72,72,72,34,71,65,67,4,73,73,73,34,67,72,71,4,74,74,74,35,67,68,73,72,4,75,75,75,75,34,215,65,71,4,76,76,76,34,71,227,215,4,77,77,77,34,72,227,71,4,78,78,78,34,74,227,72,4,79,79,79,34,74,75,227,4,80,80,80,35,74,72,73,76,4,81,81,81,81,35,77,75,74,76,4,82,82,82,82,35,78,79,69,70,4,83,83,83,83,34,80,73,68,4,84,84,84,34,80,81,73,4,85,85,85,34,81,76,73,4,86,86,86,34,81,82,76,4,87,87,87,35,76,82,83,77,4,88,88,88,88,34,240,83,82,4,89,89,89,34,284,279,283,4,90,90,90,34,78,284,283,4,90,90,90,34,283,85,241,4,91,91,91,34,78,283,241,4,92,92,92,34,79,78,241,4,93,93,93,34,63,215,86,4,94,94,94,34,87,63,86,4,95,95,95,34,86,88,87,4,96,96,96,35,89,87,88,90,4,97,97,97,97,34,84,87,89,4,98,98,98,34,88,86,91,4,99,99,99,34,91,92,88,4,100,100,100,35,92,93,90,88,4,101,101,101,101,34,91,86,215,4,102,102,102,34,215,227,91,4,103,103,103,34,91,227,92,4,104,104,104,34,92,227,75,4,105,105,105,35,77,93,92,75,4,106,106,106,106,35,84,89,94,85,4,107,107,107,107,34,90,93,95,4,108,108,108,34,93,96,95,4,109,109,109,34,93,77,96,4,110,110,110,34,77,83,96,4,111,111,111,34,241,85,94,4,112,112,112,34,89,97,94,4,113,113,113,34,95,89,90,4,114,114,114,34,95,97,89,4,115,115,115,34,80,68,69,4,116,116,116,34,69,79,98,4,117,117,117,34,98,80,69,4,118,118,118,35,101,100,103,104,4,119,119,119,119,35,105,104,103,106,4,120,120,120,120,35,105,106,107,108,4,121,121,121,121,35,108,107,265,266,4,122,122,122,122,35,102,99,100,101,4,123,123,123,123,35,267,268,99,102,4,124,124,124,124,35,109,110,111,112,4,125,125,125,125,35,112,111,268,267,4,126,126,126,126,35,113,114,110,109,4,127,127,127,127,35,115,116,114,113,4,128,128,128,128,35,117,118,116,115,4,129,129,129,129,35,266,265,118,117,4,130,130,130,130,34,108,266,267,4,131,131,131,34,267,102,101,4,132,132,132,34,101,104,105,4,133,133,133,34,105,108,267,4,134,134,134,34,267,101,105,4,135,135,135,34,266,117,115,4,136,136,136,34,115,113,109,4,136,136,136,34,109,112,267,4,132,132,132,34,267,266,115,4,137,137,137,34,115,109,267,4,132,132,132,35,281,84,85,283,4,138,138,138,138,35,70,282,284,78,4,139,139,139,139,35,119,120,121,122,5,140,140,140,140,35,123,124,119,122,5,141,141,141,141,35,125,121,120,126,5,142,142,142,142,35,127,126,120,119,5,143,143,143,143,35,124,123,127,119,5,144,144,144,144,35,123,122,121,125,5,145,145,145,145,35,125,126,127,123,5,146,146,146,146,35,128,129,130,131,6,147,147,147,147,34,129,132,130,6,148,148,148,35,129,128,133,134,6,149,149,149,149,34,132,129,134,6,150,150,150,34,131,135,128,6,151,151,151,34,133,128,135,6,152,152,152,35,136,139,138,137,0,153,153,153,153,35,139,136,141,140,0,154,154,154,154,34,146,148,147,1,155,155,155,34,147,148,149,1,156,156,156,34,146,147,150,1,157,157,157,35,151,146,150,152,1,158,158,158,158,34,153,144,154,1,159,159,159,34,142,144,153,1,160,160,160,34,144,142,143,1,161,161,161,35,142,153,150,147,1,162,162,162,162,34,154,155,152,1,163,163,163,34,152,150,153,1,164,164,164,34,152,153,154,1,165,165,165,34,148,146,156,1,166,166,166,34,148,156,149,1,167,167,167,34,156,146,157,1,168,168,168,35,146,151,158,157,1,169,169,169,169,34,144,159,154,1,170,170,170,34,144,145,159,1,171,171,171,34,144,145,143,1,172,172,172,35,159,145,156,157,1,173,173,173,173,34,157,158,155,1,174,174,174,34,155,154,159,1,175,175,175,34,155,159,157,1,176,176,176,35,160,163,162,161,2,177,177,177,177,35,164,163,160,165,2,178,178,178,178,35,166,167,161,162,2,179,179,179,179,35,168,160,161,167,2,180,180,180,180,35,165,160,168,164,2,181,181,181,181,35,164,166,162,163,2,182,182,182,182,35,166,164,168,167,2,183,183,183,183,35,169,172,171,170,3,49,49,49,49,35,170,171,174,173,3,50,50,50,50,35,173,174,176,175,3,51,51,51,51,35,175,176,178,177,3,52,52,52,52,35,179,169,170,180,3,53,53,53,53,35,180,170,173,181,3,54,54,54,54,35,181,173,175,182,3,55,55,55,55,35,182,175,177,183,3,56,56,56,56,35,184,179,180,185,3,57,57,57,57,35,185,180,181,186,3,58,58,58,58,35,186,181,182,187,3,59,59,59,59,35,187,182,183,188,3,60,60,60,60,34,178,189,177,3,61,61,61,35,189,190,183,177,3,62,62,62,62,35,190,191,188,183,3,63,63,63,63,35,192,193,169,179,3,64,64,64,64,35,194,192,179,184,3,65,65,65,65,34,172,169,193,3,184,184,184,35,195,198,197,196,3,31,31,31,31,35,196,197,200,199,3,32,32,32,32,35,199,200,202,201,3,33,33,33,33,35,201,202,204,203,3,34,34,34,34,35,198,206,205,197,3,35,35,35,35,35,197,205,207,200,3,36,36,36,36,35,200,207,208,202,3,37,37,37,37,35,202,208,209,204,3,38,38,38,38,35,206,211,210,205,3,39,39,39,39,35,205,210,212,207,3,40,40,40,40,35,207,212,213,208,3,41,41,41,41,35,208,213,214,209,3,42,42,42,42,34,189,203,204,3,185,185,185,35,190,189,204,209,3,44,44,44,44,35,191,190,209,214,3,45,45,45,45,35,193,192,206,198,3,46,46,46,46,35,192,194,211,206,3,47,47,47,47,34,198,195,193,3,186,186,186,34,215,217,216,4,67,67,67,34,218,217,215,4,187,187,187,34,218,219,217,4,188,188,188,34,219,218,220,4,189,189,189,35,221,222,219,220,4,97,97,97,97,34,222,223,219,4,190,190,190,34,224,220,218,4,191,191,191,34,220,224,225,4,192,192,192,35,220,225,226,221,4,101,101,101,101,34,215,224,218,4,193,193,193,34,224,215,227,4,194,194,194,34,225,224,227,4,195,195,195,34,228,225,227,4,196,196,196,34,228,227,229,4,80,80,80,35,228,230,226,225,4,106,106,106,106,35,231,230,228,229,4,82,82,82,82,35,232,223,222,233,4,107,107,107,107,34,234,221,226,4,108,108,108,34,234,226,235,4,197,197,197,34,235,226,230,4,110,110,110,34,235,230,236,4,111,111,111,35,230,231,237,236,4,88,88,88,88,35,280,279,283,281,4,90,90,90,90,34,240,236,237,4,89,89,89,34,283,279,284,4,90,90,90,34,239,283,284,4,90,90,90,34,284,232,241,4,91,91,91,34,241,239,284,4,92,92,92,34,233,241,232,4,198,198,198,34,216,242,215,4,199,199,199,34,243,242,216,4,69,69,69,34,242,243,244,4,200,200,200,35,245,246,244,243,4,71,71,71,71,34,238,245,243,4,201,201,201,34,244,247,242,4,73,73,73,34,247,244,248,4,74,74,74,35,248,244,246,249,4,75,75,75,75,34,247,215,242,4,202,202,202,34,215,247,227,4,77,77,77,34,247,248,227,4,203,203,203,34,248,229,227,4,204,204,204,35,231,229,248,249,4,81,81,81,81,35,238,239,250,245,4,83,83,83,83,34,246,251,249,4,84,84,84,34,249,251,252,4,205,205,205,34,249,252,231,4,206,206,206,34,231,252,237,4,207,207,207,34,241,250,239,4,208,208,208,34,245,250,253,4,117,117,117,34,251,246,245,4,116,116,116,34,251,245,253,4,209,209,209,34,234,222,221,4,114,114,114,34,222,254,233,4,113,113,113,34,254,222,234,4,210,210,210,35,257,260,259,256,4,127,127,127,127,35,261,262,259,260,4,128,128,128,128,35,261,264,263,262,4,129,129,129,129,35,264,266,265,263,4,130,130,130,130,35,258,257,256,255,4,125,125,125,125,35,267,258,255,268,4,126,126,126,126,35,269,272,271,270,4,123,123,123,123,35,272,267,268,271,4,124,124,124,124,35,273,269,270,274,4,119,119,119,119,35,275,273,274,276,4,120,120,120,120,35,277,275,276,278,4,121,121,121,121,35,266,277,278,265,4,122,122,122,122,34,267,266,264,4,211,211,211,34,264,261,260,4,212,212,212,34,260,257,258,4,212,212,212,34,258,267,264,4,211,211,211,34,264,260,258,4,212,212,212,34,275,277,266,4,213,213,213,34,266,267,272,4,212,212,212,34,272,269,273,4,212,212,212,34,273,275,266,4,214,214,214,34,266,272,273,4,132,132,132,35,282,284,279,280,4,90,90,90,90,35,281,283,239,238,4,139,139,139,139,35,223,232,284,282,4,138,138,138,138,35,285,288,287,286,5,215,215,215,215,35,289,288,285,290,5,216,216,216,216,35,291,292,286,287,5,217,217,217,217,35,293,285,286,292,5,218,218,218,218,35,290,285,293,289,5,219,219,219,219,35,289,291,287,288,5,220,220,220,220,35,291,289,293,292,5,221,221,221,221,35,294,297,296,295,6,147,147,147,147,34,295,296,298,6,151,151,151,35,295,300,299,294,6,149,149,149,149,34,298,300,295,6,222,222,222,34,297,294,301,6,223,223,223,34,299,301,294,6,150,150,150],
"normals":[0.968879,-0.0917493,0.229903,-0.968879,-0.0917497,0.229904,0.655279,-0.752596,0.0648791,0.972533,-0.0864462,0.216118,0.805253,-0.592819,0.0115037,0.690077,-0.583673,0.427924,0.766654,0.638874,-0.0638875,0.985255,0.147788,0.0862094,0.946904,-0.135965,0.291354,0.999506,0.0210066,0.0233782,0.911051,0.291536,-0.291536,0.904888,0.299006,-0.30294,0.917098,0.282647,-0.281144,-0.655277,-0.752597,0.0648793,-0.972533,-0.0864464,0.216119,-0.805253,-0.59282,0.0115038,-0.690076,-0.583674,0.427925,-0.766652,0.638876,-0.0638875,-0.985254,0.147789,0.0862099,0.946903,0.135965,-0.291356,-0.999506,0.0210066,0.0233784,-0.910354,0.294782,-0.290447,-0.904888,0.299007,-0.302941,-0.913804,0.287196,-0.287196,0.154475,0.950069,-0.271121,0.115091,0.992473,0.0418511,-1,0,8.78185e-08,0.154475,-0.950069,-0.271121,0.115091,-0.992473,0.0418515,-0.0280251,0.995434,0.0912479,-0.0280251,-0.995434,0.0912483,0.379052,0.884454,-0.27214,0.884454,0.379052,-0.27214,0.884454,-0.379052,-0.27214,0.379052,-0.884454,-0.27214,0.391636,0.913818,-0.107508,0.913818,0.391636,-0.107508,0.913818,-0.391636,-0.107508,0.391636,-0.913818,-0.107508,0.393919,0.919145,-2.42636e-07,0.919145,0.393919,-2.1352e-07,0.919145,-0.393919,-4.85272e-08,0.393919,-0.919145,1.55287e-07,-0.357104,-0.89276,-0.274695,-0.369195,-0.922987,-0.108586,-0.371391,-0.928477,2.26472e-07,-0.400424,0.910054,-0.107065,-0.402739,0.915315,-1.69138e-07,-0.387658,0.88104,-0.271089,-0.379052,0.884454,-0.27214,-0.884454,0.379052,-0.27214,-0.884454,-0.379052,-0.27214,-0.379052,-0.884454,-0.27214,-0.391636,0.913818,-0.107508,-0.913818,0.391636,-0.107508,-0.913818,-0.391636,-0.107508,-0.391636,-0.913818,-0.107508,-0.393919,0.919145,-1.55287e-07,-0.919145,0.393919,4.85272e-08,-0.919145,-0.393919,2.1352e-07,-0.393919,-0.919145,2.32931e-07,0.357104,-0.89276,-0.274695,0.369195,-0.922987,-0.108586,0.371391,-0.928477,1.7157e-07,0.400424,0.910054,-0.107065,0.402739,0.915315,-2.23262e-07,0.387658,0.88104,-0.27109,0,0.910366,-0.413803,0.659736,0.659736,-0.359856,0.704361,0.704361,-0.0880453,0.704361,0.704361,-0.0880453,0.704361,0.704361,-0.0880453,0.913138,0.391345,-0.114142,0.888889,0.444444,-0.111111,0.998053,0,-0.0623784,0.992278,0,-0.124035,0.828568,0.414284,-0.376622,0.366209,-0.915523,-0.166459,0.371291,-0.928227,-0.0232055,0.696311,-0.696311,-0.174077,0,-0.992278,-0.124034,0.704361,-0.704361,-0.088045,0,-1,2.17309e-07,0.919368,0.392479,-0.0268823,0.997785,0,-0.0665192,0.91911,-0.393904,-0.00875344,0.706824,-0.706824,-0.0282729,0.392106,-0.914913,0.0958482,7.59797e-09,-0.991228,0.132164,-1.51055e-08,-0.988372,-0.152057,0,0,0,-0,0.970811,0.239847,5.10572e-08,0.970811,0.239847,0.816723,0.524032,0.241566,-0.659736,0.659736,-0.359856,-0.704361,0.704361,-0.0880451,-0.704361,0.704361,-0.0880451,-0.704361,0.704361,-0.0880452,-0.913138,0.391345,-0.114142,-0.888889,0.444445,-0.111111,-0.998053,-0,-0.0623782,-0.992278,0,-0.124035,-0.828568,0.414284,-0.376622,-0.366209,-0.915523,-0.166459,-0.371291,-0.928227,-0.0232054,-0.696311,-0.696311,-0.174077,-0.704361,-0.704361,-0.0880449,-0.919368,0.392479,-0.0268821,-0.997785,0,-0.066519,-0.91911,-0.393904,-0.00875326,-0.706824,-0.706824,-0.0282727,-0.392106,-0.914913,0.0958482,-0.816723,0.524032,0.241566,-0.393182,0.917424,-0.0611618,-0.706322,0.706322,-0.0470883,-0.90669,0.388581,-0.164068,0.706322,0.706322,-0.0470884,0.393182,0.917424,-0.0611619,0.90669,0.388581,-0.164068,-0.768386,0.330639,0.54796,-0.768386,-0.330638,0.54796,-0.330639,-0.768386,0.547961,0.309931,-0.774826,0.550988,-0.330639,0.768386,0.54796,0.337536,0.767128,0.545513,0.330639,0.768386,0.54796,-0.337536,0.767128,0.545513,0.768386,0.330639,0.54796,0.768386,-0.330639,0.54796,0.330639,-0.768386,0.547961,-0.30993,-0.774826,0.550988,7.94729e-07,0,1,-0,0,1,-1.14624e-06,4.96705e-07,1,1.50604e-07,3.47549e-07,1,2.57551e-08,4.96705e-07,1,0,0,1,0,-0,1,0,1,-1.8062e-07,-4.14069e-14,1,-1.8062e-07,0.154475,0.950069,-0.271121,0.115091,0.992473,0.0418511,-1,2.18004e-14,8.77798e-08,0.154475,-0.950069,-0.271121,0.115091,-0.992473,0.0418515,-0.0280251,0.995434,0.0912479,-0.0280251,-0.995434,0.0912483,0,0.95448,-0.298275,0.922286,0.368914,-0.115286,0,0.992278,-0.124035,0.923453,0.369381,-0.103889,-0.922286,0.368914,-0.115286,-0.923453,0.369381,-0.103888,-0.968879,-0.0917493,0.229903,0.968879,-0.0917497,0.229904,-0.655278,-0.752596,0.0648792,-0.972533,-0.0864462,0.216118,-0.805253,-0.592819,0.0115038,-0.690077,-0.583673,0.427925,-0.766654,0.638874,-0.0638873,-0.985255,0.147788,0.0862096,-0.946904,-0.135965,0.291354,-0.999506,0.0210066,0.0233783,-0.911051,0.291536,-0.291536,-0.920575,0.276172,-0.276172,-0.904673,0.300534,-0.302068,0.655277,-0.752597,0.0648791,0.972533,-0.0864463,0.216119,0.805253,-0.59282,0.0115037,0.690076,-0.583674,0.427925,0.766652,0.638876,-0.0638877,0.985254,0.147789,0.0862097,-0.946903,0.135965,-0.291355,0.999506,0.0210066,0.0233782,0.910354,0.294782,-0.290447,0.904534,0.301512,-0.301512,0.914943,0.284649,-0.286102,-0.154475,0.950069,-0.271121,-0.115091,0.992473,0.0418511,1,0,-8.78185e-08,-0.154475,-0.950069,-0.271121,-0.115091,-0.992473,0.0418515,0.0280252,0.995434,0.0912479,0.0280252,-0.995434,0.0912483,0.387658,0.88104,-0.27109,-0.357104,-0.89276,-0.274695,-0.387658,0.88104,-0.271089,-0.659736,0.659736,-0.359856,-0.704361,0.704361,-0.0880451,-0.704361,0.704361,-0.0880451,-0.913138,0.391345,-0.114142,-0.888889,0.444445,-0.111111,-0.998053,0,-0.0623782,-0.828568,0.414284,-0.376622,-0.366209,-0.915523,-0.166459,-0.371291,-0.928227,-0.0232054,-0.696311,-0.696311,-0.174077,-0.91911,-0.393904,-0.00875326,-0.816723,0.524032,0.241566,0.659736,0.659736,-0.359856,0.704361,0.704361,-0.0880453,0.913138,0.391345,-0.114142,0.828568,0.414284,-0.376622,0.371291,-0.928227,-0.0232055,0.696311,-0.696311,-0.174077,0.91911,-0.393904,-0.00875343,0.706824,-0.706824,-0.0282729,0.392106,-0.914913,0.0958482,0.816723,0.524032,0.241566,0.90669,0.388581,-0.164068,-0.90669,0.388581,-0.164068,0,-0,1,0,0,1,4.13259e-07,9.53675e-07,1,4.06858e-07,1.16972e-06,1,-0.154475,0.950069,-0.271121,-0.115091,0.992473,0.0418511,1,-2.18004e-14,-8.77798e-08,-0.154475,-0.950069,-0.271121,-0.115091,-0.992473,0.0418515,0.0280252,0.995434,0.0912479,0.0280251,-0.995434,0.0912483,-0.923453,0.369381,-0.103888,0.922286,0.368914,-0.115286]
}
{
"dependencies": {},
"globalDependencies": {
"three": "registry:dt/three#0.84.0+20170323144537"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment