///
///
///
import Vector3 = THREE.Vector3;
class Morph extends Physijs.Mesh {
faces:number;
//TODO, probelm s tym ze ked extendujem Mesh, tak sa nedostanem k Geometry ale iba k BufferGeometry
constructor(numFaces:number, material:THREE.Material, mass:number) {
let geometry = Morph.generateGeometry(numFaces);
super(geometry, material, mass);
}
static generateGeometry(numFaces:number):THREE.Geometry {
if (numFaces == 4) {
return new THREE.TetrahedronGeometry();
} else if (numFaces == 6) {
return new THREE.BoxGeometry(1, 1, 1, 2, 2, 2);
} else if (numFaces == 12) {
return new THREE.DodecahedronGeometry(1, 0);
} else if (numFaces == 20) {
return new THREE.IcosahedronGeometry(1, 0);
}
return null;
}
private updateGeometry(numFaces:number) {
this.faces = numFaces;
this.geometry = Morph.generateGeometry(this.faces);
}
shrink(numFaces:number):void {
this.updateGeometry(this.faces - numFaces);
}
grow(numFaces:number):void {
this.updateGeometry(this.faces + numFaces);
}
wobble():void {
}
}
class Enemy extends Morph {
constructor() {
super(null, null, null);
//todo
}
}
class Player extends Morph {
constructor() {
let mat = new THREE.MeshBasicMaterial({
color: 0x00b0a0,
});
super(4, mat, 1);
}
}
class World {
constructor(player: Player, scene:THREE.Scene, camera:THREE.Camera) {
scene.add(player);
}
}
class Game {
renderer:THREE.WebGLRenderer;
scene:THREE.Scene;
camera:THREE.PerspectiveCamera;
player:Player;
world: World;
private ticks:number;
private running:boolean;
constructor() {
this.renderer = new THREE.WebGLRenderer({
antialias: true
});
this.renderer.setClearColor(0xffffff);
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(this.renderer.domElement);
this.scene = new THREE.Scene();
this.camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);
}
init():void {
//init world
this.player = new Player();
this.world = new World(this.player, this.scene, this.camera);
this.player.position.set(0,0,0);
this.camera.position.set(10,10,10);
this.camera.lookAt(this.player.position);
//init camera
}
render():void {
this.renderer.render(this.scene, this.camera);
}
tick():void {
this.ticks++;
}
run():void {
this.running = true;
while (this.running) {
this.tick();
let shouldRender = true;
if (shouldRender) {
this.render();
}
}
}
}
if (!Detector.webgl) {
Detector.addGetWebGLMessage();
}
window.onload = () => {
var game = new Game();
game.init();
//game.run();
};