/** * @author Inateno / http://inateno.com / http://dreamirl.com */ /** * @constructor CircleCollider * @class create a circle collider * @augments Collider * @param {int} radius - circle size * @param {object} params - Optional parameters (offets) * @example // classic GameObject declaration * var myObject = new DE.GameObject( { * x: 150, y: 200, * collider: new DE.CircleCollider( 100, { offsetY: 50 } ) * } ); * @example // adding a collider later * myObject.collider = new DE.CircleCollider( 70 ); */ define( [ 'DE.Collider', 'DE.CONFIG', 'DE.CanvasBuffer', 'DE.COLORS' ], function( Collider, CONFIG, CanvasBuffer, COLORS ) { function CircleCollider( radius, params ) { params = params || {}; params.type = CONFIG.COLLISION_TYPE.CIRCLE; Collider.call( this , params ); this.radius = radius || 1; this.createDebugRenderer = function() { this.debugBuffer = new CanvasBuffer( this.radius*2, this.radius*2 ); this.debugBuffer.ctx.lineWidth = 2; this.debugBuffer.ctx.strokeStyle = COLORS.DEBUG.CIRCLE_COLLIDER; this.debugBuffer.ctx.beginPath(); this.debugBuffer.ctx.arc( this.radius, this.radius, this.radius, 0, Math.PI*2, true ); this.debugBuffer.ctx.stroke(); this.debugBuffer.ctx.closePath(); } this.debugRender = function( ctx, physicRatio, ratioz ) { if ( !this.debugBuffer ) return; ctx.drawImage( this.debugBuffer.canvas , this.localPosition.x - this.debugBuffer.canvas.width * 0.5 * physicRatio * ratioz >> 0 , this.localPosition.y - this.debugBuffer.canvas.height * 0.5 * physicRatio * ratioz >> 0 , this.debugBuffer.canvas.width * physicRatio * ratioz >> 0 , this.debugBuffer.canvas.height * physicRatio * ratioz >> 0 ); } if ( CONFIG.DEBUG_LEVEL > 1 ) this.createDebugRenderer(); } CircleCollider.prototype = new Collider(); CircleCollider.prototype.constructor = CircleCollider; CircleCollider.prototype.supr = Collider.prototype; CircleCollider.prototype.DEName = "CircleCollider"; CONFIG.debug.log( "CircleCollider loaded", 3 ); return CircleCollider; } );