gameProgramming_hw4
by chaiche
HTML
<div id="info">
steer<br>
當target被追到時會自動從新的位置開始<br>
按下space change group steer<br>
按下enter 停止group steer
</div>
<div id="which_steer">
Group steer: no
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<script src="https://jyunming-chen.github.io/tutsplus/js/KeyboardState.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.5/dat.gui.min.js"></script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
#which_steer{
position: absolute;
top: 70px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
var camera, scene, renderer, controls;
var keyboard = new KeyboardState();
var cylinder;
var reset_num = 0;
//ob
var obCen = new THREE.Vector3();
var obRad = 20;
var obs = [];
// steer related
var target = new THREE.Vector3 (0,0,-100);
var maxSpeed = 40;
var maxForce = 40;
var targetMesh;
var which_steer = 0;
//var power;
var mass=1;
var clock = new THREE.Clock();
var raycaster;
var mouse = new THREE.Vector2();
var pickables = [];
var models = [];
var ob_name =0;
var model_name = 1;
var Ob = function(rad){
this.name = ob_name++;
this.obRad = rad;
this.mesh = new THREE.Mesh (new THREE.CircleGeometry (this.obRad,20));
this.mesh.rotation.x = -Math.PI/2;
}
var Model = function(){
this.name = "model : "+(model_name++);
this.geometry = new THREE.BoxGeometry(15, 2, 5);
this.material = new THREE.MeshBasicMaterial();
this.mesh = new THREE.Mesh(this.geometry, this.material);
this.pos = new THREE.Vector3();
this.vel = new THREE.Vector3(10,0,0);
this.force = new THREE.Vector3();
this.maxSpeed = 60;
this.maxForce = 60;
this.angle;
this.computeForce = function(){
var ff = target.clone().sub (this.pos).setLength (this.maxSpeed).sub (this.vel);
if (ff.length() > this.maxForce)
ff.setLength (this.maxForce);
this.force.copy (ff);
}
}
Model.prototype.setPosition = function(x,y,z){
this.pos = new THREE.Vector3(x,y,z);
}
Model.prototype.update = function(dt){
this.computeForce();
if(obs.length>0){
var tmp_ob;
var min=100000;
for(var i =0;i<obs.length;i++){ if(this.pos.distanceTo(obs[i].mesh.position)+obs[i].obRad<min){
tmp_ob = obs[i];
min = this.pos.distanceTo(obs[i].mesh.position);
}
}
var tmp = tmp_ob.mesh.position.clone().sub(this.pos);
var tmpProj = tmp.clone().projectOnVector(this.vel);
if (tmp.dot(this.vel) > 0) {
if (tmpProj.clone().sub(tmp).length() < tmp_ob.obRad + 3) {
if (tmpProj.length() < 5 *this.vel.length()) {
...