private void SurvivalViewController_Paint(object sender, PaintEventArgs e) { Graphics gctx = e.Graphics; if (IsGraphicsQualitySet == false) { IsGraphicsQualitySet = true; gctx.CompositingQuality = CompositingQuality.HighSpeed; gctx.PixelOffsetMode = PixelOffsetMode.None; gctx.SmoothingMode = SmoothingMode.None; gctx.InterpolationMode = InterpolationMode.Default; } gctx.Clear(Color.White); CGRect bounds = new CGRect(0, 0, ClientSize.Width, ClientSize.Height); int orbCount = 0; List <OOEGraphicsItem> graphicsItems = new List <OOEGraphicsItem>(this.graphicsItems); foreach (OOEGraphicsItem item in graphicsItems) { if (item is PowerUp) { PowerUp targetPowerUp = item as PowerUp; if (targetPowerUp == healthPowerup) { if (player.IsInCollisionRangeOf(targetPowerUp)) { playerContext.Heal(); this.graphicsItems.Remove(targetPowerUp); healthPowerup = null; } } } if (item is EnemyOrb) { EnemyOrb enemy = item as EnemyOrb; orbCount += 1; /* * float x = player.frame.origin.x - enemy.frame.origin.x; * float y = player.frame.origin.y - enemy.frame.origin.y; * float rPlayer = player.frame.size.width / 2; * float rEnemy = player.frame.size.width / 2; */ if (player.IsInCollisionRangeOf(enemy) /*Math.Pow(x, 2) + Math.Pow(y, 2) <= Math.Pow(rPlayer+rEnemy,2)*/) { if (enemy.Style != player.Style) { // Decrease Health playerContext.Injur(); playerContext.ResetSteak(); player.DecreaseSize(); playerContext.LastEatenOrb = Game.Logic.Core.OrbStyle.none; } else { orbCount -= 1; enemy.Dispose(); this.graphicsItems.Remove(enemy); playerContext.IncreaseScore(); AddStatusText(new CGPoint(player.frame.origin.x, player.frame.origin.y - player.frame.size.height), playerContext.ChangeInScore); if (playerContext.LastEatenOrb == enemy.Style) { player.IncreaseSize(); } else { player.DecreaseSize(); playerContext.LastEatenOrb = enemy.Style; } } OnOrbCollision(); } } item.DrawIn(bounds, gctx); } player.DrawIn(bounds, gctx); if (orbCount == 0) { OnPlayerWin(); } }