embox2d-helpers.js
来源:互联网 发布:现在java主流框架 编辑:程序博客网 时间:2024/06/05 19:32
//Having to type 'Box2D.' in front of everything makes porting//existing C++ code a pain in the butt. This function can be used//to make everything in the Box2D namespace available without//needing to do that.function using(ns, pattern) { if (pattern == undefined) { // import all for (var name in ns) { this[name] = ns[name]; } } else { if (typeof(pattern) == 'string') { pattern = new RegExp(pattern); } // import only stuff matching given pattern for (var name in ns) { if (name.match(pattern)) { this[name] = ns[name]; } } }}//to replace original C++ operator =function copyVec2(vec) { return new Box2D.b2Vec2(vec.get_x(), vec.get_y());}//to replace original C++ operator * (float)function scaleVec2(vec, scale) { vec.set_x( scale * vec.get_x() ); vec.set_y( scale * vec.get_y() ); }//to replace original C++ operator *= (float)function scaledVec2(vec, scale) { return new Box2D.b2Vec2(scale * vec.get_x(), scale * vec.get_y());}// http://stackoverflow.com/questions/12792486/emscripten-bindings-how-to-create-an-accessible-c-c-array-from-javascriptfunction createChainShape(vertices, closedLoop) { var shape = new Box2D.b2ChainShape(); var buffer = Box2D.allocate(vertices.length * 8, 'float', Box2D.ALLOC_STACK); var offset = 0; for (var i=0;i<vertices.length;i++) { Box2D.setValue(buffer+(offset), vertices[i].get_x(), 'float'); // x Box2D.setValue(buffer+(offset+4), vertices[i].get_y(), 'float'); // y offset += 8; } var ptr_wrapped = Box2D.wrapPointer(buffer, Box2D.b2Vec2); if ( closedLoop ) shape.CreateLoop(ptr_wrapped, vertices.length); else shape.CreateChain(ptr_wrapped, vertices.length); return shape;}function createPolygonShape(vertices) { var shape = new Box2D.b2PolygonShape(); var buffer = Box2D.allocate(vertices.length * 8, 'float', Box2D.ALLOC_STACK); var offset = 0; for (var i=0;i<vertices.length;i++) { Box2D.setValue(buffer+(offset), vertices[i].get_x(), 'float'); // x Box2D.setValue(buffer+(offset+4), vertices[i].get_y(), 'float'); // y offset += 8; } var ptr_wrapped = Box2D.wrapPointer(buffer, Box2D.b2Vec2); shape.Set(ptr_wrapped, vertices.length); return shape;}function createRandomPolygonShape(radius) { var numVerts = 3.5 + Math.random() * 5; numVerts = numVerts | 0; var verts = []; for (var i = 0; i < numVerts; i++) { var angle = i / numVerts * 360.0 * 0.0174532925199432957; verts.push( new b2Vec2( radius * Math.sin(angle), radius * -Math.cos(angle) ) ); } return createPolygonShape(verts);}function getPointsByPolygonShape(fixture) { var shape = fixture.GetShape(); var body = fixture.GetBody(); var polyShape = Box2D.castObject( shape, Box2D.b2PolygonShape ); if (polyShape == null) { return []; } var count = polyShape.GetVertexCount(); var ret = []; for (var i = 0; i < count; i++) { var p = polyShape.GetVertex(i); var pWorld = body.GetWorldPoint(p); ret.push(new Vertex(pWorld.get_x(), pWorld.get_y())); } return ret;}function getPointsByPolygonBody(body) { var ptr = body.GetFixtureList(); var arr = []; while(ptr.e != 0) { var vertices = getPointsByPolygonShape(ptr); ptr = ptr.GetNext(); arr.push(vertices); } // var ret = mergeTwoSets(arr[0], arr[1]); // for (var i = 2; i < arr.length; i++) { // ret = mergeTwoSets(ret, arr[i]); // } var first = arr.shift(); while (arr.length > 0) { var i=0; var merged = false; for (; i < arr.length; i++) { var beMerge = copyArr(arr[i]) var set = mergeTwoSets(first, beMerge); if (set != null) { first = set; merged = true; break; } } arr.splice(i, 1); if (!merged) { break; } } return first;}function mergeTwoSets(arr1, arr2) { var a1, a2, b1, b2; a1 = b2 = a2 = b1 = -1; for (var i = 0; i < arr1.length; i++) { var a = arr1[i]; for (var j = 0; j < arr2.length; j++) { var b = arr2[j]; if (a.equals(b)) { a1 = i; a2 = i+1 >= arr1.length ? 0 : i+1; b1 = j==0 ? arr2.length-1 : j-1; b2 = j; break; } } if (a1 >= 0) { break; } } if (a1 < 0 || !arr1[a1].equals(arr2[b2]) || !arr1[a2].equals(arr2[b1])) { return null; } for (var i = 0; i < b1; i++) { arr2.push(arr2.shift()); } arr2.splice(0, 2); if (a2 == 0) { return arr1.concat(arr2); } else { var arr3 = arr1.splice(a2, arr1.length-a2); return arr1.concat(arr2).concat(arr3); }}
0 0
- embox2d-helpers.js
- Handlebars.js 块级Helpers
- Handlebars.js 块级Helpers
- Helpers方法
- rails form helpers
- MVC Ajax Helpers
- jquery.dom.helpers-api
- rails 的 Helpers
- Active Record Validations Helpers
- form_tag (ActionView::Helpers::FormTagHelper)
- Rails Form helpers
- Class and Record Helpers
- rails 的 Helpers
- EJS.Helpers进阶
- (译)Xposed Helpers
- rails helpers 方法
- Flask之Helpers
- System.Web.Helpers所在位置
- C for ios --- 选择结构Switch
- c++作业3
- Java自定义注解和运行时靠反射获取注解
- javatest
- Spring boot项目搭建案例
- embox2d-helpers.js
- 架构设计:系统存储(28)——分布式文件系统Ceph(挂载)
- C关键字const
- Delphi 利用 LiveBinding 将对象绑定到界面元素
- [容器]helm安装配置使用
- C for ios --- while break continue
- C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结
- mapreduce JVM参数配置的问题
- C for ios --- 函数