BaseSprite LoadDonut(BaseSprite sprite, string texturedir, XElement part) { Donut f = new Donut(this); f.Initialize(Content); f.Rot = sprite.Rot; f.Position = sprite.Position; return(f); }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (CheckFlag(Flags.FADE_OUT)) { float a = Colour.A / 255.0f; float d = JabMath.MoveTowards(a, 0.0f, gttf(gameTime) * 2.0f, 0.001f); Colour = Color.White * d; if (d == 0) { RaiseFlag(Flags.DELETE); } return; } if (PosX > world.GetRightMaxPos() + 1000 || PosX < world.startPos.X - 1000) { Rot = 0.5f * JabMath.PI; } if (Math.Abs(Rot) > 0.45f * JabMath.PI) { deathTimer += gttf(gameTime) * 5.0f; while (deathTimer > 1.0f && numDonutsMade < 5) { deathTimer -= 1.0f; Donut d = new Donut(world); AudioQueue.PlayOnce("Sounds/pop"); d.Initialize(BaseGame.Get.Content); d.Position = Position + new Vector2(RandomFloatInRange(-0.5f, 0.5f) * Width, RandomFloatInRange(-0.5f, 0.5f) * Height); d.Chosen = true; world.AddNode(d); deathTimer -= 1.0f; ++numDonutsMade; float oldWidth = Body.Width; float oldHeight = Body.Height; Vector2 oldPos = Body.Position; float oldRot = Body.Rot; oldWidth *= 0.9f; oldHeight *= 0.9f; Vector2 linearVelocity = Body.LinearVelocity; float angularVelocity = Body.AngularVelocity; Body.RaiseFlag(Flags.DELETE); Body.CollisionGroup = Donut.DonutCollisionGroup; Body = world.World.CreateBox(new Vector2(oldWidth, oldHeight), oldPos, JabActor.BodyType.DYNAMIC); Body.Rot = oldRot; Body.LinearVelocity = linearVelocity; Body.AngularVelocity = angularVelocity; //Sprite.Width = oldWidth; //Sprite.Height = oldHeight; } if (numDonutsMade > 4) { RaiseFlag(Flags.DELETE); } //Colour = Color.White * ((5.0f - numDonutsMade) / 5.0f); } Sprite.Width = JabMath.MoveTowards(Sprite.Width, Body.Width, gttf(gameTime) * 1.0f); Sprite.Height = JabMath.MoveTowards(Sprite.Height, Body.Height, gttf(gameTime) * 1.0f); // Body.LinearDamping = 0.15f; // Body.AngularDamping = 0.3f; }