Someone
public text v1 · immutableforeach (Sprite sprite in mSprites)
{
if (sprite.CollisionAxisAlignedRectangle == null || ball.CollisionCircle == null)
continue;
if (!sprite.Name.Equals("dead") &&
ball.CollisionCircle.CollideAgainstBounce(sprite.CollisionAxisAlignedRectangle, 0, 1, 1) &&
sprite.Z == 0)
{
float yvel = ball.YVelocity;
GemsData.soundBank.PlayCue("pop");
bool dead = false;
bool squelch = false;
if (sprite.Name.StartsWith("brush"))
{
string[] color = sprite.Name.Split('-');
BallStates state = ball_state;
switch (color[1])
{
case "green":
ChangeState(BallStates.GREEN);
break;
case "red":
ChangeState(BallStates.RED);
break;
case "brown":
ChangeState(BallStates.BROWN);
break;
case "lblue":
ChangeState(BallStates.LBLUE);
break;
case "blue":
ChangeState(BallStates.BLUE);
break;
case "purple":
ChangeState(BallStates.PURPLE);
break;
case "yellow":
ChangeState(BallStates.YELLOW);
break;
}
if (state != ball_state)
GemsData.soundBank.PlayCue("color-change");
}
else
{
if (!sprite.Name.StartsWith("wall"))
{
string[] name = sprite.Name.Split('-');
switch (name[0])
{
case "red":
if (ball_state == BallStates.RED)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "green":
if (ball_state == BallStates.GREEN)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "lblue":
if (ball_state == BallStates.LBLUE)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "brown":
if (ball_state == BallStates.BROWN)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "blue":
if (ball_state == BallStates.BLUE)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "purple":
if (ball_state == BallStates.PURPLE)
{
dead = true;
GemsData.score += brick_score;
}
break;
case "arrow":
flip = !flip;
dead = true;
color_count++;
break;
case "lock":
if (ball_state == BallStates.YELLOW)
{
if (has_key)
{
GemsData.soundBank.PlayCue("unlock");
has_key = false;
dead = true;
color_count++;
squelch = true;
inv_key.Visible = false;
GemsData.score += lock_score;
}
}
break;
case "key":
if (ball_state == BallStates.YELLOW)
{
if (!has_key)
{
GemsData.soundBank.PlayCue("keys");
has_key = true;
dead = true;
color_count++;
squelch = true;
inv_key.Visible = true;
GemsData.score += key_score;
}
}
break;
case "diamond":
if (color_count <= 0)
{
dead = true;
squelch = true;
GemsData.soundBank.PlayCue("diamond");
diamond_count--;
GemsData.score += diamond_score;
if (diamond_count == 0)
GemsData.soundBank.PlayCue("win");
}
break;
case "skull":
if (GemsData.lives == 0)
{
// Gameover stuff here
}
else
GemsData.lives--;
start = false;
GemsData.soundBank.PlayCue("death");
SpriteManager.RemoveSprite(ball);
ball = SpriteManager.AddSprite("Assets/Gfx/ball.png");
mSprites.Add(ball);
PlaceBall();
GemsData.score = (GemsData.score - 500 < 0) ? 0 : GemsData.score - 500;
get_ready.Visible = true;
goto main_loop_start;
}
if (GemsData.score >= GemsData.life_goal)
{
GemsData.life_goal += 10000;
GemsData.lives++;
GemsData.soundBank.PlayCue("1up");
}
}
if (dead)
{
color_count--;
sprite.RotationYVelocity = 5;
sprite.Name = "dead";
if (FlatRedBallServices.Random.Next() % 2 == 0)
sprite.CustomBehavior += new SpriteCustomBehavior(DestroyBlockOut);
else
sprite.CustomBehavior += new SpriteCustomBehavior(DestroyBlockIn);
if (!squelch)
GemsData.soundBank.PlayCue("brick-death");
}
}
}
}