Guest User

QM TileDObjects

a guest
May 28th, 2025
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.80 KB | Source Code | 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. *
  19. * @requires QMovement, VisulMZ_5_TiledMZ
  20. *
  21. * @help
  22. * ============================================================================
  23. * ## About
  24. * ============================================================================
  25. * This is an addon to QMovement plugin. This addon adds a feature that lets
  26. * you use collision created in TileD.
  27. */
  28. //=============================================================================
  29.  
  30. //=============================================================================
  31. // QM TileD
  32.  
  33. (function() {
  34. var _PROPS = [
  35. 'note',
  36. 'isTile', 'terrain', 'color',
  37. 'isWater1', 'isWater2',
  38. 'isLadder', 'isBush', 'isCounter', 'isDamage'
  39. ]
  40.  
  41. var Alias_Game_Map_reloadTileMap = Game_Map.prototype.reloadTileMap;
  42. Game_Map.prototype.reloadTileMap = function() {
  43. Alias_Game_Map_reloadTileMap.call(this);
  44. this.setupColliderMap();
  45. };
  46.  
  47.  
  48.  
  49. Game_Map.prototype.addTileDCollisionObject = function( x, y, object, tileWidth, tileHeight, flag) {
  50.  
  51. var collider = null;
  52. var px = x;
  53. var py = y;
  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. } else if ( object.polyline ) {
  66.  
  67. /*
  68. // Polyline
  69. var polylines;
  70. if ( object.polyline.length == 2 ) {
  71. polylines = Collider.createPolygon( [
  72. [x + ( object.polyline[0].x / tileWidth ), y + ( object.polyline[0].y / tileWidth )],
  73. [x + ( object.polyline[1].x / tileHeight ), y + ( object.polyline[1].y / tileHeight )]
  74. ] );
  75. } else {
  76. polylines = Collider.createList();
  77. for ( var ii = 0; ii < ( object.polyline.length - 1 ); ii++ ) {
  78. Collider.addToList( polylines, Collider.createPolygon( [
  79. [x + ( object.polyline[ii].x / tileWidth ), y + ( object.polyline[ii].y / tileWidth )],
  80. [x + ( object.polyline[ii + 1].x / tileHeight ), y + ( object.polyline[ii + 1].y / tileHeight )]
  81. ] ) );
  82. }
  83. }
  84.  
  85. colliders.push( polylines );
  86. */
  87. } else if ( object.ellipse ) {
  88.  
  89. // Ellipse
  90. collider = new Circle_Collider(object.width, object.height, x, y);
  91.  
  92. } else {
  93.  
  94. // Rect
  95. collider = new Box_Collider(object.width, object.height, x, y);
  96.  
  97. }
  98.  
  99. if(collider != null) {
  100. if(flag =="ladder"){
  101. collider.isLadder = true;
  102. collider.isTile = true;
  103. collider.flag = (1 << 5);
  104. collider.color = '#ffffff';
  105. } else if(flag =="stairs") {
  106. collider.isStairs = true;
  107. collider.isTile = true;
  108. collider.flag = (1 << 9);
  109. collider.color = '#ffffff';
  110. } else if(flag =="slope") {
  111. collider.isSlope = true;
  112. collider.isTile = true;
  113. collider.flag = (1 << 10);
  114. collider.color = '#ffffff';
  115. }
  116. ColliderManager.addCollider(collider, -1);
  117. }
  118.  
  119. };
  120.  
  121.  
  122. Game_Map.prototype.setupColliderMap = function() {
  123. var tileWidth = $gameMap.tileWidth();
  124. var tileHeight = $gameMap.tileHeight();
  125. var tilesetColliders = [];
  126.  
  127. // Build tile colliders
  128.  
  129. if($gameMap.tiledData == undefined)
  130. return;
  131.  
  132. var tilesets = $gameMap.tiledData.tilesets;
  133.  
  134. for ( var ii = 0; ii < tilesets.length; ii++ ) {
  135. tilesetColliders[ii] = {};
  136.  
  137. var tiles = tilesets[ii].tiles;
  138. for ( var key in tiles ) {
  139. if ( tiles[key].objectgroup ) {
  140. tilesetColliders[ii][key] = tiles[key].objectgroup.objects;
  141. }
  142. }
  143. }
  144.  
  145. // Place tile colliders
  146. for ( var ii = 0; ii < $gameMap.tiledData.layers.length; ii++ ) {
  147. var layer = $gameMap.tiledData.layers[ii];
  148. for ( var yy = 0; yy < layer.height; yy++ ) {
  149. var row = yy * layer.width;
  150. for ( var xx = 0; xx < layer.width; xx++ ) {
  151. var tileId = layer.data[row + xx];
  152. if ( tileId === 0 ) {
  153. continue;
  154. }
  155. tileId++;
  156.  
  157. // Find tileset belonging to tileId
  158. var tilesetId = -1;
  159. var firstId = 0;
  160. for ( var jj = 0; jj < $gameMap.tiledData.tilesets.length; jj++ ) {
  161. firstId = $gameMap.tiledData.tilesets[jj].firstgid;
  162. var lastId = firstId + $gameMap.tiledData.tilesets[jj].tilecount;
  163. if ( tileId >= firstId && tileId <= lastId ) {
  164. tilesetId = jj;
  165. break;
  166. }
  167. }
  168. if ( tilesetId < 0 ) {
  169. continue;
  170. }
  171.  
  172. // Get objectGroup for this tileId
  173. var tileSet = tilesetColliders[tilesetId];
  174. var objectGroup = tileSet['' + ( tileId - firstId - 1 )];
  175. if ( objectGroup ) {
  176. for ( var jj = 0; jj < objectGroup.length; jj++ ) {
  177. var object = objectGroup[jj];
  178. var x = xx * scale;
  179. var y = yy * scale;
  180. this.addTileDCollisionObject( x, y, object, tileWidth, tileHeight, "");
  181. }
  182. }
  183. }
  184. }
  185. }
  186.  
  187. // Find collision mesh layers
  188. for ( var ii = 0; ii < $gameMap.tiledData.layers.length; ii++ ) {
  189. var layer = $gameMap.tiledData.layers[ii];
  190. if(layer.type == "objectgroup") {
  191. if ((layer.collision == "mesh" || layer.collision == "ladder"
  192. || layer.collision == "stairs" || layer.collision == "slope") ) {
  193. for ( var jj = 0; jj < layer.objects.length; jj++ ) {
  194. this.addTileDCollisionObject( 0, 0, layer.objects[jj], tileWidth, tileHeight, layer.collision);
  195. }
  196. }
  197. }
  198. }
  199.  
  200.  
  201. };
  202. })()
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
Tags: RPG Maker MZ
Advertisement
Add Comment
Please, Sign In to add comment