UNPKG

jocly

Version:

Board games 3D/2D UI and AI web library

1 lines 15.1 kB
exports.view=View={Game:{},Board:{},Move:{}},function(){var e,t,a,i,s;View.Game.xdInitExtra=function(e){},View.Game.xdPreInit=function(e){},View.Game.millsMakeDummyMesh=function(e){return"undefined"!=typeof THREE?new THREE.Mesh(new THREE.CubeGeometry(.001,.001,.001),new THREE.MeshLambertMaterial):null};var o,n={};View.Game.millsMakeTokenPiece=function(e,t,a){var i=this.mViewOptions.fullPath,s="_"+t+"_",o=n[s];Array.isArray(o)?o.push(a):o?a(new THREE.Mesh(o.geometry,o.material)):(n[s]=[a],function(t,a){function s(){function e(e){t<0&&(e.fillStyle="rgba(0,0,0,0.9)",e.fillRect(0,0,c,c))}if(0==--d){var i=document.createElement("canvas");i.width=i.height=c;var s=new THREE.Texture(i),l=document.createElement("canvas");l.width=l.height=c;var h=new THREE.Texture(l),u=i.getContext("2d");u.drawImage(n,0,0,c,c),e(u),l.getContext("2d").drawImage(o,0,0,c,c),s.needsUpdate=!0,h.needsUpdate=!0;var m=document.createElement("canvas");m.width=m.height=c;var p=new THREE.Texture(m),E=m.getContext("2d");E.drawImage(n,0,0,c,c),e(E),p.needsUpdate=!0;var f="#222222",v=20;t<0&&(f="#333333",v=10);var g=new THREE.MeshPhongMaterial({name:"piecetop",specular:f,shininess:v,map:s,bumpMap:h,bumpScale:.03}),w=new THREE.MeshPhongMaterial({name:"pieceborders",specular:f,shininess:v,map:p}),y=new THREE.MultiMaterial([w,g]);a({geometry:r,material:y})}}var o,n,r,d=3,c=256;e.getResource("smoothedfilegeo|0|"+i+"/res/xd-view/meshes/piece-v2.js",function(e,t){r=e,s()}),e.getResource("image|"+i+"/res/xd-view/meshes/piecetop-bump.jpg",function(e){o=e,s()}),e.getResource("image|"+i+"/res/xd-view/meshes/piecediff.jpg",function(e){n=e,s()})}(t,function(e){var t=n[s];n[s]={geometry:e.geometry,material:e.material},t.forEach(function(t){t(new THREE.Mesh(e.geometry,e.material))})}))},View.Game.xdInit=function(n){function r(e,t,a){function i(e,t){var a=new THREE.Shape;return a.moveTo(-e/2,-t/2),a.lineTo(e/2,-t/2),a.lineTo(e/2,t/2),a.lineTo(-e/2,t/2),a}var s=i(t+.5+.1,a+.5+.1),o=i(t+.1,a+.1);s.holes.push(o);var n={amount:.4,steps:1,bevelSize:.1,bevelThickness:.04,bevelSegments:1},r=new THREE.ExtrudeGeometry(s,n),d=new THREE.Matrix4;d.makeRotationX(-Math.PI/2),r.applyMatrix(d);var c="#000000";e.options.frameColorFill&&(c=e.options.frameColorFill),frameMat=new THREE.MeshPhongMaterial({color:c,shininess:500,specular:"#444444"});var l=new THREE.Mesh(r,frameMat);return l.position.y=-n.amount-.01,l}var d=this;this.xdPreInit();var c=this.mViewOptions.fullPath;e=this.mOptions.width,s=this.mOptions.width+2,t=this.mOptions.height,a=Math.floor(Math.min(12e3/s,12e3/t)),n.createGadget("board",{"2d":{type:"image"}}),n.createGadget("skyball",{"3d":{harbor:!1,type:"custommesh3d",rotate:135,rotateX:-60,create:function(){var e=new THREE.SphereGeometry(40,50,50);new THREE.MeshBasicMaterial({color:65280,wireframe:!1,side:THREE.DoubleSide});e.computeBoundingBox(),zMin=e.boundingBox.min.z,zMax=e.boundingBox.max.z,zRange=zMax-zMin;for(var t,a,i,s,o,n=["a","b","c","d"],r=0;r<e.vertices.length;r++){a=e.vertices[r],t=new THREE.Color(0);var d=(zMax-a.z)/zRange;t.g=t.b=t.r=d/6,e.colors[r]=t}for(var r=0;r<e.faces.length;r++){i=e.faces[r],s=i instanceof THREE.Face3?3:4;for(var l=0;l<s;l++)o=i[n[l]],i.vertexColors[l]=e.colors[o]}var h=this,u=new THREE.TextureLoader;return u.setCrossOrigin("anonymous"),u.load(c+"/res/xd-view/meshes/square.png",function(t){t.wrapS=t.wrapT=THREE.RepeatWrapping,t.repeat.set(40,40);var a=new THREE.MeshBasicMaterial({map:t,vertexColors:THREE.VertexColors,side:THREE.DoubleSide});a.map.repeat.set(20,60);var i=new THREE.Mesh(e,a);i.doubleSided=!0,h.objectReady(i)},function(e){},function(e){console.log("error loading texture")}),null},opacity:1}});for(var l=0;l<this.g.Coord.length;l++)!function(e){n.createGadget("text#"+e,{"2d":{type:"element",width:.2*a,height:.2*a,initialClasses:"notation",css:{"text-align":"center"},z:4,display:function(t,a,i){t.css({"font-size":.6*i+"pt","line-height":1*i+"px"}).text(e+1)}},"3d":{type:"custommesh3d",z:.05*-a,rotateX:-90,create:function(){var t=this;return this.getResource("font|"+c+"/res/xd-view/fonts/helvetiker_regular.typeface.json",function(a){var i=new THREE.TextGeometry(""+(e+1),{size:.2,height:.05,curveSegments:6,font:a}),s=new THREE.MeshBasicMaterial,o=new THREE.Mesh(i,s);t.objectReady(o)}),null}}}),n.createGadget("cell#"+e,{"2d":{type:"element",initialClasses:"xd-choice",width:1.1*a,height:1.1*a,z:1},"3d":{type:"meshfile",file:c+"/res/xd-view/meshes/ring-target.js",scale:[.8,.8,.8],smooth:0,flatShading:!0,z:-100,materials:{square:{transparent:!0,opacity:0},ring:{color:16763904,shininess:10}}}})}(l);for(var h=0,u=1;u>=-1;u-=2)for(var m=0;m<this.mOptions.mencount;m++)!function(e,t){n.createGadget("piece#"+t,{"2d":{type:"sprite",z:4,file:c+"/res/images/basic2.png",clipx:0,clipy:1==e?0:100,clipwidth:100,clipheight:100,width:.9*a,height:.9*a,opacity:1},classic3d:{type:"custommesh3d",create:function(e){return this._pKey="dummy",d.millsMakeDummyMesh(n)},display:function(e,t,a){var i="_"+t.playerSide+"_";if(i!=this._pKey){this._pKey=i;var s=this;o.millsMakeTokenPiece(s,t.playerSide,function(e){s.replaceMesh(e,t,a)})}},scale:[3/s,3/s,3/s],z:1}})}(u,h++);i=2*this.mOptions.menCount;var p=this.g.Coord,E=this.g.Graph;n.createGadget("boardframe",{classic3d:{type:"custommesh3d",color:11206570,scale:[1.65,1.65,1.65],opacity:1,z:-320,create:function(){var a=this;return this.getResource("smoothedfilegeo|0|"+c+"/res/xd-view/meshes/boardoriented.js",function(i,s){function o(a){return[n*(-e/2+p[a][0]+.5),n*(-t/2+p[a][1]+.5)]}var n=.81;switch(e){default:console.log("3D error: unhandled size "+e);break;case 7:n=.81;break;case 5:n=1.05;break;case 3:n=1.4}for(var d in s)if(s.hasOwnProperty(d)){var c=s[d];"mainframe"==c.name&&(c.specular={r:.05,g:.05,b:.05},c.shininess=40)}for(var l=new THREE.Mesh(i,new THREE.MultiMaterial(s)),h=new THREE.SphereGeometry(.15,32,32),u=new THREE.MeshPhongMaterial({color:0,specular:197379,shininess:500}),m=0;m<p.length;m++){var f=new THREE.Mesh(h,u);f.castShadow=!0,f.position.y=.16;var v=o(m);f.position.x=v[0],f.position.z=v[1],f.castShadow=!0,f.scale.y=.2,l.add(f)}for(var g=new THREE.MeshPhongMaterial({color:0,specular:328965,shininess:500}),w=[],y=0;y<E.length;y++)for(var T=0;T<E[y].length;T++)null!=E[y][T]&&function(e,t){var a=e<t?e+"-"+t:t+"-"+e;if(!w[a]){w[a]=!0;var i=o(e),s=o(t),n=new THREE.CatmullRomCurve3([new THREE.Vector3(i[0],0,i[1]),new THREE.Vector3(s[0],0,s[1])]),r=new THREE.TubeGeometry(n,1,.1,10,!1),d=new THREE.Mesh(r,g);d.position.y=.15,d.scale.y=.2,d.castShadow=!1,l.add(d)}}(y,E[y][T]);var M=r(a,7.83,7.83);M.position.y=-.15,l.add(M);var b=new THREE.Mesh(new THREE.BoxGeometry(7.83,.5,7.83),M.material);b.position.y=-.3,l.add(b),l.receiveShadow=!0,a.objectReady(l)}),null}}});var f=function(e){var t=new THREE.PlaneGeometry(4,3,1,1),a=new THREE.MeshPhongMaterial({color:16777215,map:e,shading:THREE.FlatShading,emissive:{r:1,g:1,b:1}}),i=new THREE.Mesh(t,a);return this.objectReady(i),null};n.createGadget("videoa",{"3d":{type:"video3d",makeMesh:function(e){return f.call(this,e)}}}),n.createGadget("videoabis",{"3d":{type:"video3d",makeMesh:function(e){return f.call(this,e)}}}),n.createGadget("videob",{"3d":{type:"video3d",makeMesh:function(e){return f.call(this,e)}}}),n.createGadget("videobbis",{"3d":{type:"video3d",makeMesh:function(e){return f.call(this,e)}}}),n.createGadget("spacefield",{"3d":{harbor:!1,type:"custommesh3d",create:function(){var e=this,t=new THREE.Object3D,a=[],i=new THREE.TextureLoader;i.setCrossOrigin("anonymous"),i.load(c+"/res/xd-view/meshes/star.png",function(i){for(var s=0;s<10;s++){var o=new THREE.PointsMaterial({size:1-s/10,map:i,blending:THREE.AdditiveBlending,depthTest:!0,transparent:!0}),n=new THREE.Geometry;o.color.setHex(16777215);var r=new THREE.Points(n,o);a.push({object:r,geometry:n}),t.add(r)}e.getResource("json2|"+c+"/res/xd-view/meshes/starsdb.json",function(i){for(var s=0;s<i.length;s++){var o=i[s],n=(o.az-90)*Math.PI/180,r=o.al*Math.PI/180,d=new THREE.Vector3;d.x=30*Math.cos(r)*Math.cos(n),d.z=30*Math.cos(r)*Math.sin(n),d.y=30*Math.sin(r);var c=Math.floor(10*s/i.length);a[c].geometry.vertices.push(d)}e.objectReady(t)})})}}}),this.xdInitExtra(n)},View.Game.xdBuildScene=function(e){o=this;e.updateGadget("videoa",{"3d":{visible:!0,playerSide:1,z:3e3,y:1==this.mViewAs?1e4:-1e4,rotate:1==this.mViewAs?-180:-0,rotateX:1==this.mViewAs?25:-25,scale:[3,3,3]}}),e.updateGadget("videoabis",{"3d":{visible:!0,playerSide:-1,z:1500,x:1==this.mViewAs?-5500:5500,y:1==this.mViewAs?8900:-8900,rotate:1==this.mViewAs?-180:-0,rotateX:1==this.mViewAs?25:-25,scale:[.75,.75,.75]}}),e.updateGadget("videob",{"3d":{visible:!0,playerSide:-1,z:3e3,y:1==this.mViewAs?-1e4:1e4,rotate:1==this.mViewAs?-0:-180,rotateX:1==this.mViewAs?-25:25,scale:[3,3,3]}}),e.updateGadget("videobbis",{"3d":{visible:!0,playerSide:1,z:1500,x:1==this.mViewAs?5500:-5500,y:1==this.mViewAs?-8900:8900,rotate:1==this.mViewAs?-0:-180,rotateX:1==this.mViewAs?-25:25,scale:[.75,.75,.75]}}),e.updateGadget("board",{"2d":{visible:!0,rotate:this.mViewAs==JocGame.PLAYER_A?0:180,x:0,y:0,width:s*a,height:t*a}}),e.updateGadget("boardframe",{"3d":{visible:!0,receiveShadow:!0}}),e.updateGadget("skyball",{"3d":{visible:!0}}),e.updateGadget("spacefield",{"3d":{visible:!0}});for(var i=0;i<this.g.Coord.length;i++){var n=this.getCCoord(i);e.updateGadget("text#"+i,{base:{visible:this.mNotation},"2d":{x:n[0]-.42*a,y:n[1]-.42*a},"3d":{x:n[0]-.47*a,y:n[1]+.47*a}}),e.updateGadget("cell#"+i,{base:{visible:!1,x:n[0],y:n[1]},"2d":{width:.95*a,height:.95*a}})}},View.Game.getVCoord=function(){var i,s;if(1==arguments.length){var o=arguments[0],n=this.g.Coord[o];i=n[0],s=n[1]}else i=arguments[0],s=arguments[1];return i=t-1-i,this.mViewAs==JocGame.PLAYER_B&&(i=t-1-i,s=e-1-s),[(s-(e-1)/2)*a,(i-(t-1)/2)*a,.04*-a]},View.Game.getCCoord=function(e){var t=this.g.Coord[e],a=t[0],i=t[1];return this.getVCoord(a,i)},View.Game.getPieceCoord=function(t){if(t.p<0){var i=(1==t.s?-5500:5500)*this.mViewAs,o=12e3*e/s,n=o/this.mOptions.mencount;return{"2d":[i,((t.d+.5)*n-o/2)*t.s*this.mViewAs,10+t.d],"3d":[i,(1==t.s?a*e/2:-a*e/2)*this.mViewAs,.04*-a+t.d*a*.17]}}var r=this.getCCoord(t.p);return{"2d":r,"3d":r}},View.Board.xdDisplay=function(e,t){for(var i=0;i<this.pieces.length;i++){var s=this.pieces[i];if(s.a){var o=t.getPieceCoord(s);e.updateGadget("piece#"+i,{base:{visible:!0},"2d":{opacity:1,x:o["2d"][0],y:o["2d"][1]},"3d":{z:o["3d"][2],scale:[45e-5*a,45e-5*a,45e-5*a],opacity:1,x:o["3d"][0],y:o["3d"][1],playerSide:s.s,materials:{base:{opacity:1}}}})}else e.updateGadget("piece#"+i,{base:{visible:!1}})}e.updateGadget("boardframe",{"3d":{materials:{playera:{color:t.mViewAs==JocGame.PLAYER_A?12298905:2236962},playerb:{color:t.mViewAs==JocGame.PLAYER_B?12298905:2236962}}}}),e.updateGadget("videoa",{"3d":{materials:{tv:{color:12298905}}}}),e.updateGadget("videob",{"3d":{materials:{tv:{color:2236962}}}})},View.Board.xdBuildHTStateMachine=function(e,t,i){function s(s,o){function n(){t.smQueueEvent(l,{pos:s,type:o})}var r,d=null;r=p.board[s],r<0&&s==v.t&&(r=f),r>=0&&(d=p.pieces[r]);var c,l,h;switch(o){case"normal":l="E_CLICKED",c=16776960,h="xd-choice-view";break;case"cancel":l="E_CANCEL",c=16711680,h="xd-cancel"}e.updateGadget("cell#"+s,{base:{visible:!0,click:n},"2d":{classes:h,opacity:i.mShowMoves||"cancel"==o?.5:0},"3d":{color:c,scale:[6e-4*a,6e-4*a,6e-4*a],opacity:"cancel"==o?.5:0,castShadow:!0,materials:{square:{},ring:{color:"cancel"==o?16729088:16777215,shininess:10,transparent:!1}}}});var u=i.g.Coord[s];u[0],u[1];d&&e.updateGadget("piece#"+r,{base:{visible:!0,click:n},"2d":{classes:"choice"}})}function o(e){}function n(t){for(var a=0;a<i.g.Coord.length;a++)e.updateGadget("cell#"+a,{base:{visible:!1,click:null},"2d":{classes:""}});for(var s=0;s<p.pieces.length;s++){p.pieces[s];e.updateGadget("piece#"+s,{base:{click:null}})}}function r(e){g=[];for(var a=0;a<E.length;a++){var i=E[a],o=!0;-2!=v.f&&v.f!=i.f&&(o=!1),-2!=v.t&&v.t!=i.t&&(o=!1),-2!=v.c&&v.c!=i.c&&(o=!1),o&&g.push(i)}if(1==g.length){var n=g[0];return void(-2==v.f&&n.f>=0?(v.f=n.f,t.smQueueEvent("E_CLICKED",{pos:n.f,type:"normal"})):-2==v.t&&n.t>=0?(v.t=n.t,t.smQueueEvent("E_CLICKED",{pos:n.t,type:"normal"})):-2==v.c&&n.c>=0?(v.c=n.c,t.smQueueEvent("E_CLICKED",{pos:n.c,type:"normal"})):t.smQueueEvent("E_DONE",{move:n}))}v.f>-2&&-2==v.t?s(v.f,"cancel"):v.t>=0&&-2==v.c&&s(v.t,"cancel");for(var a=0;a<g.length;a++){var i=g[a];v.t>=0?s(i.c,"normal"):v.f>=0||-1==i.f?s(i.t,"normal"):s(i.f,"normal")}}function d(a){var s=-1,o=-1,n=-1;v.c>=0?n=v.c:(o=v.t,v.f>=0&&(s=v.f)),p.millsAnimateMove(e,i,s,o,n,function(){t.smQueueEvent("E_ANIM_DONE",{})})}function c(e){for(var t=0;t<g.length;t++){var a=g[t];a.f==e.pos?(v.f=e.pos,f=p.board[e.pos]):a.t==e.pos?(v.f<0&&(f=p.dock[p.mWho][0]),v.t=e.pos):a.c==e.pos&&(v.c=e.pos)}}function l(e){m=e.move}function h(e){i.MakeMove(m)}function u(t){if(v.t>-2){v.t=-2;var a=p.pieces[f],s=i.getPieceCoord(a);e.updateGadget("piece#"+f,{"2d":{x:s["2d"][0],y:s["2d"][1]},"3d":{z:s["3d"][2],x:s["3d"][0],y:s["3d"][1]}})}else v.f>-2&&(f=-1,v.f=-2)}var m,p=this,E=this.mMoves,f=-1,v={f:-2,t:-2,c:-2},g=[];t.smTransition("S_INIT","E_INIT","S_SELECT",[o]),t.smEntering("S_SELECT",[r]),t.smTransition("S_SELECT","E_CLICKED","S_ANIMATING",[c,d]),t.smTransition("S_SELECT","E_CANCEL",null,[n,u,r]),t.smTransition("S_SELECT","E_DONE",null,[l,h]),t.smTransition("S_SELECT","E_ANIM_DONE",null,[]),t.smLeaving("S_SELECT",[n]),t.smTransition("S_ANIMATING","E_ANIM_DONE","S_SELECT",[]),t.smTransition(["S_SELECT"],"E_END","S_DONE",[]),t.smEntering("S_DONE",[n])},View.Board.millsAnimateMove=function(e,t,i,s,o,n){function r(){o<0?n():(d=c.board[o],t.PlaySound("capture"),e.updateGadget("piece#"+d,{"2d":{opacity:0},"3d":{z:7*a,materials:{base:{opacity:0}},materialEasing:"undefined"==typeof TWEEN?null:TWEEN.Easing.Cubic.EaseOut}},800,function(){n()}))}var d,c=this,l=!1;if(s>=0){if(i>=0){d=this.board[i],l=!0;for(var h=0;h<t.g.Graph[i].length;h++)if(t.g.Graph[i][h]==s){l=!1;break}}else d=this.dock[this.mWho][0],l=!0;var u=t.getCCoord(s),m=t.getPieceCoord(this.pieces[d]),p=m["3d"][2],E=p+a,f=.04*-a,v=p,g=v-E,w=v-f,y=4*g-2*w,T=-w*w,M=y*y- -4*T,b=(-y-Math.sqrt(M))/-2,R=(-y+Math.sqrt(M))/-2,x=b,G=-x-w;(0==x||-G/(2*x)<0||-G/(2*x)>1)&&(x=R,G=-x-w),l||t.PlaySound("move"+(1+Math.floor(4*Math.random()))),e.updateGadget("piece#"+d,{"2d":{x:u[0],y:u[1]},"3d":{x:u[0],y:u[1],positionEasingUpdate:function(e){if(l){var t=(x*e*e+G*e+v)*this.SCALE3D;this.object3d.position.y=t}}}},400,function(){e.updateGadget("piece#"+d,{"3d":{positionEasingUpdate:null}}),l&&t.PlaySound("tac"+(1+Math.floor(3*Math.random()))),r()})}else r()},View.Board.xdPlayedMove=function(e,t,a){return t.mOldBoard.millsAnimateMove(e,t,a.f,a.t,a.c,function(){t.MoveShown()}),!1}}(),View.Game.MillsGetLines=function(){return[[0,0,0,2],[1,0,1,2],[2,0,2,2],[0,0,2,0],[0,1,2,1],[0,2,2,2]]},View.Game.xdInitExtra=function(e){e.updateGadget("board",{stone:{file:this.mViewOptions.fullPath+"/res/images/3mensboard-stone.jpg"},suede:{file:this.mViewOptions.fullPath+"/res/images/3mensboard-suede.jpg"},wood:{file:this.mViewOptions.fullPath+"/res/images/3mensboard-wood.jpg"}})};