Esempio n. 1
0
        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();
            }
        }