-
Notifications
You must be signed in to change notification settings - Fork 0
/
lithium.min.js
1 lines (1 loc) · 2.32 KB
/
lithium.min.js
1
/* lithium.js - v2.0.0 */Li=function(){function e(e,t,n){n.line2(e.x,e.y,t.x,t.y)}function t(e,t,n){var r=Math.sin,i=Math.cos,s={x:e.x-t.x,y:e.y-t.y,z:e.z-t.z},o={};return o.y=s.y*i(-n.r)-s.z*r(-n.r),o.z=s.y*r(-n.r)+s.z*i(-n.r),s.y=o.y,s.z=o.z,o.x=s.z*r(-n.p)+s.x*i(-n.p),o.z=s.z*i(-n.p)-s.x*r(-n.p),s.x=o.x,s.z=o.z,o.x=s.x*i(-n.y)-s.y*r(-n.y),o.y=s.x*r(-n.y)+s.y*i(-n.y),{x:o.x,y:o.y,z:o.z}}function n(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function r(e){return 1/Math.tan(e*Math.PI/360)}function i(e,t){var t=r(t),n=t/(t-e.x);return{x:n*e.y,y:n*e.z}}function s(e,r,i){var s=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]],o=[];for(var u=0;u<8;u++){var a=s[u];o[u]=n(t({x:a[0]*(e.x/2)+r.x,y:a[1]*(e.y/2)+r.y,z:a[2]*(e.z/2)+r.z},r,i),r)}return o}function o(e){return[{a:e[0],b:e[1]},{a:e[0],b:e[2]},{a:e[0],b:e[4]},{a:e[1],b:e[3]},{a:e[1],b:e[5]},{a:e[2],b:e[3]},{a:e[2],b:e[6]},{a:e[3],b:e[7]},{a:e[4],b:e[5]},{a:e[4],b:e[6]},{a:e[5],b:e[7]},{a:e[6],b:e[7]}]}function u(e,t){for(var n=0;n<8;n++)e[n]=i(e[n],t);return e}function a(e,n){if(n.type!="camera")throw new Error("Not a camera!");var r=Math.PI*2,i={y:-n.t.y*r,p:n.t.p*r,r:n.t.r*r},s=t(e,n.c,i);return{x:s.x/n.s,y:s.y/n.s,z:s.z/n.s}}function f(e,t){if(e.type=="line")return{k:e.k,p:[{a:i(e.a,t.f),b:i(e.b,t.f)}]};if(e.type=="rect"){var n=Math.PI*2,r={y:e.t.y*n,p:e.t.p*n,r:e.t.r*n},f=s(e.s,e.c,r);for(var l=0;l<f.length;l++)f[l]=a(f[l],t);return{k:e.k,p:o(u(f,t.f))}}return{k:"#fff",p:[]}}function l(t,n){n.setColor(t.k||"#fff");for(var r=0;r<t.p.length;r++)e(t.p[r].a,t.p[r].b,n)}return function(e){this.setCA=function(e){typeof e=="string"?this._dot.setCA(document.getElementById(e)):this._dot.setCA(e)},this.setX=function(e){return this._dot.setX(e),this},this.set=function(e,t,n,r){return r!==undefined?this._world[e][t][n]=r:n!==undefined?this._world[e][t]=n:this._world[e]=t,this},this.get=function(e){return this._world[e]},this.load=function(e){this._world=JSON.parse(JSON.stringify(e));if(this._world[0].type!="camera")throw new Error("First object in world isn't a camera!");return this},this.render=function(){if(this._world[0].type!="camera")throw new Error("First object in world isn't a camera!");this._dot.clear().setColor("#fff");for(var e=1;e<this._world.length;e++)l(f(this._world[e],this._world[0]),this._dot);return this},this._dot=new Dot,e&&this.setCA(e)}}();