private void clearCollisionData(CollidableSprite i_Target, CollidableSprite i_Sender) { i_Target.LastCollisionPixelsIndex.Clear(); i_Target.LastCollisionPixelsPositions.Clear(); i_Sender.LastCollisionPixelsIndex.Clear(); i_Sender.LastCollisionPixelsPositions.Clear(); }
public override void Init() { animTest = AnimationFactory.GenerateAnimation("Images//Ness2.png", 128, 128, 5, 0.15); sprite = new CollidableSprite(); sprite.AddAnimation(animTest); Physics.Add(gravity); Physics.Add(ground); Physics.Add(sprite); }
private int getHittenSpritesRowInPixelsArray(CollidableSprite i_HittenSprite, CollidableSprite i_Sender) { int wallColomn = (int)(i_HittenSprite as CollidableSprite).LastCollisionPixelsIndex[0].Y; if (i_Sender.Velocity.Y < 0) { wallColomn -= (int)(SpaceInvadersConfig.k_sizeOfBulletHitEffect * i_Sender.Texture.Height); } return(wallColomn); }
private void deletePixelsInVerticalDirection(CollidableSprite i_Target, CollidableSprite i_Sender) { int targetStartColomn = this.getHittenSpritesColomnInPixelsArray(i_Target, i_Sender); int targetRow = this.getHittenSpritesRowInPixelsArray(i_Target, i_Sender); int senderMinY, senderMaxY; if (i_Sender.Velocity.Y < 0) { senderMinY = 0; senderMaxY = (int)(SpaceInvadersConfig.k_sizeOfBulletHitEffect * i_Sender.Texture.Height) + 1; } else { senderMinY = (int)((1 - SpaceInvadersConfig.k_sizeOfBulletHitEffect) * i_Sender.Texture.Height); senderMaxY = i_Sender.Texture.Height; } int targetColomn = targetStartColomn; /// delete pixels for (int senderRow = senderMinY; senderRow < senderMaxY; senderRow++) { targetColomn = targetStartColomn; for (int senderColomn = 0; senderColomn < i_Sender.Texture.Width; senderColomn++) { if (i_Sender.Pixels[senderColomn + (senderRow * i_Sender.Texture.Width)].A != 0 && (targetColomn + (targetRow * i_Target.Texture.Width)) < i_Target.Pixels.Length && targetColomn + (targetRow * i_Target.Texture.Width) > 0) { i_Target.Pixels[targetColomn + (targetRow * i_Target.Texture.Width)] = new Color(0, 0, 0, 0); } targetColomn++; if (targetColomn > i_Target.Texture.Width) { break; } } targetRow++; if (targetRow > i_Target.Height) { break; } } i_Target.CurrTexture.SetData(i_Target.Pixels); this.clearCollisionData(i_Target, i_Sender); }
private int getHittenSpritesColomnInPixelsArray(CollidableSprite i_HittenSprite, CollidableSprite i_Sender) { return(MathHelper.Clamp((int)i_HittenSprite.LastCollisionPixelsIndex[0].X + (int)((i_Sender.Texture.Width / 2) - i_Sender.LastCollisionPixelsIndex[0].X) - (i_Sender.Texture.Width / 2), 0, i_HittenSprite.Texture.Width)); }