Guest User

QM TileDObjects MV

a guest
May 29th, 2025
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. //=============================================================================
  2. // QM TileDObjects
  3. //=============================================================================
  4.  
  5. if (!Imported.QMovement || !QPlus.versionCheck(Imported.QMovement, '1.2.0')) {
  6. alert('Error: QM+ColliderMap requires QMovement 1.2.0 or newer to work.');
  7. throw new Error('Error: QM+ColliderMap requires QMovement 1.2.0 or newer to work.');
  8. }
  9.  
  10. Imported.QMTileDObjects = '1.0.0';
  11.  
  12. //=============================================================================
  13. /*:
  14. * @plugindesc <QMTileDObjects>
  15. * QMovement Addon: Allows you to use Colliders from TileD
  16. * @version 1.0.0
  17. * @author Gamepeon | Version 1.0.0
  18. * @site https://quxios.github.io/
  19. * @updateurl https://quxios.github.io/data/pluginsMin.json
  20. *
  21. * @requires QMovement
  22. *
  23. * @help
  24. * ============================================================================
  25. * ## About
  26. * ============================================================================
  27. * This is an addon to QMovement plugin. This addon adds a feature that lets
  28. * you use collision created in TileD.
  29. */
  30. //=============================================================================
  31.  
  32. //=============================================================================
  33. // QM TileD
  34.  
  35. (function() {
  36. var _PROPS = [
  37. 'note',
  38. 'isTile', 'terrain', 'color',
  39. 'isWater1', 'isWater2',
  40. 'isLadder', 'isBush', 'isCounter', 'isDamage'
  41. ]
  42.  
  43. var Alias_Game_Map_reloadTileMap = Game_Map.prototype.reloadTileMap;
  44. Game_Map.prototype.reloadTileMap = function() {
  45. Alias_Game_Map_reloadTileMap.call(this);
  46. this.setupColliderMap();
  47. };
  48.  
  49.  
  50.  
  51. Game_Map.prototype.addTileDCollisionObject = function( x, y, object, tileWidth, tileHeight) {
  52.  
  53. var collider = null;
  54.  
  55. x += object.x;
  56. y += object.y;
  57. if ( object.polygon ) {
  58.  
  59. // Polygon
  60. if (object.polygon === undefined || object.polygon.length < 3)
  61. return;
  62.  
  63. collider = new Polygon_Collider(object.polygon, x, y);
  64.  
  65.  
  66.  
  67. } else if ( object.polyline ) {
  68.  
  69. /*
  70. // Polyline
  71. var polylines;
  72. if ( object.polyline.length == 2 ) {
  73. polylines = Collider.createPolygon( [
  74. [x + ( object.polyline[0].x / tileWidth ), y + ( object.polyline[0].y / tileWidth )],
  75. [x + ( object.polyline[1].x / tileHeight ), y + ( object.polyline[1].y / tileHeight )]
  76. ] );
  77. } else {
  78. polylines = Collider.createList();
  79. for ( var ii = 0; ii < ( object.polyline.length - 1 ); ii++ ) {
  80. Collider.addToList( polylines, Collider.createPolygon( [
  81. [x + ( object.polyline[ii].x / tileWidth ), y + ( object.polyline[ii].y / tileWidth )],
  82. [x + ( object.polyline[ii + 1].x / tileHeight ), y + ( object.polyline[ii + 1].y / tileHeight )]
  83. ] ) );
  84. }
  85. }
  86.  
  87. colliders.push( polylines );
  88. */
  89. } else if ( object.ellipse ) {
  90.  
  91. console.log("Object is ellipse collider at x: " + x + " y:" + y + " w:" + tileWidth + " h:" + tileHeight);
  92.  
  93. // Ellipse
  94. collider = new Circle_Collider(object.width, object.height, x, y);
  95.  
  96. } else {
  97.  
  98. console.log("Object is rect collider at x: " + x + " y:" + y + " w:" + tileWidth + " h:" + tileHeight);
  99.  
  100. // Rect
  101. collider = new Box_Collider(object.width, object.height, x, y);
  102.  
  103. }
  104.  
  105. if(collider != null)
  106. ColliderManager.addCollider(collider, -1);
  107.  
  108. };
  109.  
  110.  
  111. Game_Map.prototype.setupColliderMap = function() {
  112. var tileWidth = $gameMap.tileWidth();
  113. var tileHeight = $gameMap.tileHeight();
  114. var tilesetColliders = [];
  115.  
  116. // Build tile colliders
  117.  
  118. if($gameMap.tiledData == undefined)
  119. return;
  120.  
  121. var tilesets = $gameMap.tiledData.tilesets;
  122.  
  123. for ( var ii = 0; ii < tilesets.length; ii++ ) {
  124. tilesetColliders[ii] = {};
  125.  
  126. var tiles = tilesets[ii].tiles;
  127. for ( var key in tiles ) {
  128. if ( tiles[key].objectgroup ) {
  129. tilesetColliders[ii][key] = tiles[key].objectgroup.objects;
  130. }
  131. }
  132. }
  133.  
  134. // Place tile colliders
  135. for ( var ii = 0; ii < $gameMap.tiledData.layers.length; ii++ ) {
  136. var layer = $gameMap.tiledData.layers[ii];
  137. for ( var yy = 0; yy < layer.height; yy++ ) {
  138. var row = yy * layer.width;
  139. for ( var xx = 0; xx < layer.width; xx++ ) {
  140. var tileId = layer.data[row + xx];
  141. if ( tileId === 0 ) {
  142. continue;
  143. }
  144. tileId++;
  145.  
  146. // Find tileset belonging to tileId
  147. var tilesetId = -1;
  148. var firstId = 0;
  149. for ( var jj = 0; jj < $gameMap.tiledData.tilesets.length; jj++ ) {
  150. firstId = $gameMap.tiledData.tilesets[jj].firstgid;
  151. var lastId = firstId + $gameMap.tiledData.tilesets[jj].tilecount;
  152. if ( tileId >= firstId && tileId <= lastId ) {
  153. tilesetId = jj;
  154. break;
  155. }
  156. }
  157. if ( tilesetId < 0 ) {
  158. continue;
  159. }
  160.  
  161. // Get objectGroup for this tileId
  162. var tileSet = tilesetColliders[tilesetId];
  163. var objectGroup = tileSet['' + ( tileId - firstId - 1 )];
  164. if ( objectGroup ) {
  165. for ( var jj = 0; jj < objectGroup.length; jj++ ) {
  166. var object = objectGroup[jj];
  167. var x = xx * scale;
  168. var y = yy * scale;
  169. this.addTileDCollisionObject( x, y, object, tileWidth, tileHeight);
  170. }
  171. }
  172. }
  173. }
  174. }
  175.  
  176. // Find collision mesh layers
  177. for ( var ii = 0; ii < $gameMap.tiledData.layers.length; ii++ ) {
  178. var layer = $gameMap.tiledData.layers[ii];
  179. if ( layer.type == "objectgroup" && layer.properties && layer.properties.collision == "mesh" ) {
  180. for ( var jj = 0; jj < layer.objects.length; jj++ ) {
  181. this.addTileDCollisionObject( 0, 0, layer.objects[jj], tileWidth, tileHeight);
  182. }
  183. }
  184. }
  185.  
  186.  
  187. };
  188. })()
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
Tags: rpg maker mv
Advertisement
Add Comment
Please, Sign In to add comment