/// <summary> /// Setup the boundaries and position of this collider given a sprite /// </summary> /// <param name="theProxy"></param> public void SetupCollisonSpriteProxy(SpriteProxy theProxy) { SpriteBatch colliderBatch = SpriteBatchManager.Active.Find(SpriteBatch.Name.SpriteCollisions); // Remove previous SpriteCollisionProxy if any if (this.collisionSprite != null) { bool oldProxyRemoved = colliderBatch.Detach(collisionSprite.SpriteName, collisionSprite.Id); Debug.Assert(oldProxyRemoved, "The old collision sprite proxy wasn't removed upon setting a new proxy!"); Debug.Assert(this.collisionSprite.SpriteName != Sprite.Name.UNINITIALIZED); SpriteCollisonProxyManager.Active.Recycle(collisionSprite.SpriteName, collisionSprite.Id); this.collisionSprite = null; } // Create a new proxy this.collisionSprite = SpriteCollisonProxyManager.Active.Create(theProxy.SpriteName, theProxy.Id); this.collisionSprite.SetId(theProxy.Id); this.collisionSprite.SetPosition(this.colliderBoundary.x, this.colliderBoundary.y); this.colliderBoundary.w = this.collisionSprite.ModelSprite.Width; this.colliderBoundary.h = this.collisionSprite.ModelSprite.Height; this.collisionSprite.SetColor(this.color); // Attach it to the batch colliderBatch.Attach(this.collisionSprite, this.collisionSprite.Id); }
// // Constructor // public Collider() { this.collisionSprite = null; this.colliderBoundary = new Azul.Rect(); this.gameObjectId = 0u; this.color = Colors.Green; }
/// <summary> /// Setup the boundaries and position of this collider given a width and height /// </summary> /// <param name="width"></param> /// <param name="height"></param> public void SetupCollisonSpriteProxy(float width, float height, uint newId) { SpriteBatch colliderBatch = SpriteBatchManager.Active.Find(SpriteBatch.Name.SpriteCollisions); // Remove previous SpriteCollisionProxy if any if (this.collisionSprite != null) { bool oldRemSuccess = colliderBatch.Detach(collisionSprite.SpriteName, collisionSprite.Id); Debug.Assert(oldRemSuccess, "Upon setting a new collider sprite proxy, the old one was not deleted!"); Debug.Assert(this.collisionSprite.SpriteName != Sprite.Name.UNINITIALIZED); SpriteCollisonProxyManager.Active.Recycle(collisionSprite.SpriteName, collisionSprite.Id); this.collisionSprite = null; } // Create a new proxy this.collisionSprite = SpriteCollisonProxyManager.Active.Create(Sprite.Name.NULL, newId); this.collisionSprite.SetId(newId); this.collisionSprite.SetPosition(this.colliderBoundary.x, this.colliderBoundary.y); this.collisionSprite.Resize(width, height); this.colliderBoundary.w = width; this.colliderBoundary.h = height; this.collisionSprite.SetColor(this.color); // Attach it to the batch colliderBatch.Attach(this.collisionSprite, this.collisionSprite.Id); }
/// <summary> /// Makes the collider null so that it doesn't /// render a SpriteCollison or check collisions /// </summary> public void MakeColliderNull() { // Remove previous SpriteCollisionProxy if any if (this.collisionSprite != null) { SpriteBatch colliderBatch = SpriteBatchManager.Active.Find(SpriteBatch.Name.SpriteCollisions); bool colSprRemoved = colliderBatch.Detach(collisionSprite.SpriteName, collisionSprite.Id); Debug.Assert(colSprRemoved, "This collision sprite proxy wasn't removed for some reason!"); Debug.Assert(this.collisionSprite.SpriteName != Sprite.Name.UNINITIALIZED); SpriteCollisonProxyManager.Active.Recycle(collisionSprite.SpriteName, collisionSprite.Id); this.collisionSprite = null; } }
/// <summary> /// Reset function that can only be called by the base GameObject! /// </summary> public void Reset() { // Remove previous SpriteCollisionProxy if any if (this.collisionSprite != null) { SpriteBatch colliderBatch = SpriteBatchManager.Active.Find(SpriteBatch.Name.SpriteCollisions); bool success = colliderBatch.Detach(collisionSprite.SpriteName, collisionSprite.Id); Debug.Assert(success, "The collision sprite proxy wasn't found during collider's reset!"); Debug.Assert(this.collisionSprite.SpriteName != Sprite.Name.UNINITIALIZED, "The collision sprite proxy already seems to be uninitialized, but it's probably not"); SpriteCollisonProxyManager.Active.Recycle(collisionSprite.SpriteName, collisionSprite.Id); this.collisionSprite = null; } this.gameObjectId = 0u; this.color = Colors.Yellow; }