/// <summary> /// Creates a playable animation for a sprite. /// </summary> /// <param name="sprite">A reference to the sprite that will use this animation.</param> /// <param name="frameWidth">The width of each animation frame.</param> /// <param name="frameHeight">The height of each animation frame.</param> /// <param name="frames">The sequence of frame numbers of the animation. A value of null will play all frames of the animation texture.</param> /// <param name="fps">The speed, in frames per second, of the animation.</param> /// <param name="isLooping">Determines whether the animation is looping or not.</param> /// <param name="frameSpacing">The amount of space, in pixels, between each of the animation frames.</param> public GenAnimation(GenSprite sprite, int frameWidth, int frameHeight, int[] frames = null, int fps = 12, bool isLooping = true, int frameSpacing = 0) { _sprite = sprite; Frames = (frames == null) ? new int[0] : frames; _frameSpacing = frameSpacing; _currentFrame = 0; _position = Vector2.Zero; _frameRect = new Rectangle(0, 0, frameWidth, frameHeight); _frameTimer = new GenTimer(0f, UpdateFrame); Fps = fps; IsLooping = isLooping; FrameCallback = null; }
public override void Create() { base.Create(); GenG.ShowDebugInfo = true; // Set the world bounds before creating any object groups. // This allows the quadtrees in each group to be sized correctly. GenG.WorldBounds = new Rectangle(-GenG.TitleSafeArea.Left, -GenG.TitleSafeArea.Top, GenG.Game.Width, GenG.Game.Height * 4); /*Map = new GenTilemap(); Map.LoadTile("1", new GenTile()).MakeTexture(Color.LightSkyBlue, 16, 16); Map.LoadTile("2", new GenTile()).MakeTexture(Color.IndianRed, 16, 16); Map.LoadMap( "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1\n" + "1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1\n" + "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" , 16, 16, null); Add(Map);*/ Cave = new GenCave(); Cave.MakeCave(160, 360); Add(Cave); BgColor = Color.CornflowerBlue; //camera2 = AddCamera(new GenCamera(0, GenG.Game.Height / 2, GenG.Game.Width, GenG.Game.Height / 2, 2f)); //camera2.BgColor = new Color(50, 50, 70); Camera.BgColor = new Color(40, 50, 70); //Camera.SetCameraView(0f, 0f, GenG.Game.Width, (int)(GenG.Game.Height * 0.5f)); /*Camera.BlendState.ColorSourceBlend = Blend.One; Camera.BlendState.ColorDestinationBlend = Blend.InverseSourceColor; Camera.BlendState.ColorBlendFunction = BlendFunction.Subtract; Camera.BlendState.AlphaSourceBlend = Blend.One; Camera.BlendState.AlphaDestinationBlend = Blend.InverseSourceColor; Camera.BlendState.AlphaBlendFunction = BlendFunction.Subtract;*/ Path = new GenPath(); Path.AddNode(new GenPathNode(100, 100)); Path.AddNode(new GenPathNode(200, 100)); Path.AddNode(new GenPathNode(200, 200)); Path.AddNode(new GenPathNode(100, 150)); Add(Path); Chain = new GenVerlet(); Chain.MakeGrid(300, 200, 5, 15, 1); Chain.DrawLines = false; Chain.SetMass(1f); Chain.SetGravity(0f, 700f); Chain.Iterations = 10; for (int i = 0; i < Chain.Members.Count; i++) { ((GenObject)Chain.Members[i]).Width = ((GenObject)Chain.Members[i]).Height = Chain.Members.Count - i; ((GenSprite)Chain.Members[i]).MakeTexture(Color.White * 0.3f, (int)((GenObject)Chain.Members[i]).Width, (int)((GenObject)Chain.Members[i]).Height); } for (int i = 0; i < Chain.Links.Count; i++) { Chain.Links[i].OffsetA.X = Chain.Links[i].OffsetA.Y = Chain.Links[i].PointA.Width / 2; Chain.Links[i].OffsetB.X = Chain.Links[i].OffsetB.Y = Chain.Links[i].PointB.Width / 2; } ((GenObject)Chain.Members[0]).Immovable = true; ((GenObject)Chain.Members[0]).Acceleration.Y = 0f; ((GenObject)Chain.Members[0]).SetPath(Path, 100, GenPath.Type.Yoyo, GenMove.Axis.Both, GenPath.Movement.Instant); Add(Chain); Boxes = new GenGroup(); Add(Boxes); for (int i = 0; i < 10; i++) { for (int j = 0; j < 15; j++) { Box = new GenSprite(i * 32 + 150, j * 16, GenG.Content.Load<Texture2D>("warthog"), 12, 13); Box.CenterOrigin(false); Box.AddAnimation("run", 16, 16, new int[] { 1 }, 0, false); Box.Play("run"); Box.DrawOffset.X = -4; Box.DrawOffset.Y = -3; Box.Mass = 0.5f; Box.Deceleration.X = 400f; Box.Acceleration.Y = 400f; Box.MaxVelocity.Y = 400f; Box.Color = GenU.RandomColor(100, 255); Boxes.Add(Box); } } Emitter = new GenEmitter(100, 100); Emitter.Width = 16; Emitter.Height = 16; Emitter.MakeParticles(GenG.Pixel, 4, 4, 400); Emitter.EmitQuantity = 5; Emitter.EmitFrequency = .05f; Emitter.InheritVelocity = true; Emitter.SetXSpeed(-300, 300); Emitter.SetYSpeed(-50, 50); Emitter.SetRotationSpeed(-360, 360); Emitter.SetLifetime(2.9f); Emitter.Colors.Add(Color.Cyan); Emitter.Colors.Add(Color.MediumVioletRed); Emitter.Colors.Add(Color.Orange); Emitter.SetAlpha(2f, 0f); Emitter.SetScale(2f, 1f); //Emitter.SetGravity(0, 700); Emitter.SetDeceleration(100, 100); Add(Emitter); Player = new GenSprite(100, 0, GenG.Content.Load<Texture2D>("player"), 16, 16); Player.AddAnimation("idle", 16, 18, new int[] { 0 }, 6, false, 1); Player.AddAnimation("run", 16, 18, new int[] { 1, 0, 2, 0 }, 6, true, 1); Player.AddAnimation("jump", 16, 18, new int[] { 1 }, 6, false, 1); Player.AddAnimation("fall", 16, 18, new int[] { 3 }, 6, false, 1); // Adjust the origin to keep the player's feet from visually penetrating a wall when rotated. Player.CenterOrigin(false); Player.SetOrigin(Player.Origin.X, Player.Origin.Y + 8); Player.DrawOffset.Y -= 2; Player.RotationSpeed = 45; Player.DrawRotated = false; Add(Player); Emitter.Parent = Player; Emitter.ParentOffset.X = -Player.Bounds.HalfWidth; Emitter.ParentOffset.Y = -Player.Bounds.Height; Emitter.Start(false); Warthog3 = new GenSprite(200, 300, GenG.Content.Load<Texture2D>("warthog"), 78, 49); Warthog3.Deceleration.X = 400; Warthog3.Deceleration.Y = 400; Warthog3.MaxVelocity.X = 250; Warthog3.MaxVelocity.Y = 400; Warthog3.Mass = 2f; //Warthog3.IsPlatform = true; Warthog3.RotationSpeed = -90; //Warthog3.SetParent(Player, GenObject.ParentType.Origin); Warthog3.ParentOffset = new Vector2(50, 50); Add(Warthog3); PlayerControl = new GenControl(Player, GenControl.ControlType.Platformer, GenControl.Movement.Accelerates, GenControl.Stopping.Decelerates); PlayerControl.SetMovementSpeed(700, 0, 150, 400, 1000, 0); PlayerControl.Gravity.Y = 700; PlayerControl.JumpSpeed = 300; PlayerControl.IdleAnimation = "idle"; PlayerControl.MoveAnimation = "run"; PlayerControl.JumpAnimation = "jump"; PlayerControl.FallAnimation = "fall"; PlayerControl.UseSpeedAnimation = true; PlayerControl.MinAnimationFps = 1f; PlayerControl.JumpCount = 2; //PlayerControl.JumpInheritVelocity = true; PlayerControl.ButtonsSpecial = GenGamePad.ButtonsSpecial.ThumbStickLeft; //PlayerControl.LandCallback = PlayerLand; PlayerControl.JumpCallback = PlayerJump; Add(PlayerControl); Warthog4 = new GenSprite(300, 350, GenG.Content.Load<Texture2D>("warthog"), 78, 49); //Warthog4.Immovable = true; //Warthog4.IsPlatform = true; //Warthog4.Mass = 10f; Warthog4.Color = Color.Red; Warthog4.SetParent(Warthog3, GenObject.ParentType.Origin); Warthog4.ParentOffset.X = 75; Warthog4.RotationSpeed = 180; Add(Warthog4); Warthog5 = new GenSprite(2000, 300, GenG.Content.Load<Texture2D>("warthog"), 78, 49); //Warthog5.Acceleration.Y = 700; Warthog5.Parent = Warthog4; Warthog5.ParentOffset.X = 150; Warthog5.Velocity.X = -1000; Add(Warthog5); //Chain.MakeLink(Warthog3, (GenObject)Chain.Members[14]); //Chain.SetRestingDistance(10f); Beep = new GenSound(GenG.LoadContent<SoundEffect>("beep"), 1f, true); Beep.Follow = Warthog5; Beep.Volume = 0.1f; Add(Beep); /*Text = new GenText("Hello, World!\n------------", 200, 200, 100, 12); Text.Scale.X = 0.5f; Text.Scale.Y = 0.5f; Text.TextAlignment = GenText.TextAlign.Center; Text.HasShadow = true; Text.ShadowColor = Color.Black; //Text.Velocity.X = 100; //Text.Velocity.Y = 50; Text.ScrollFactor.X = 0f; Add(Text);*/ ProgressBar = new GenProgressBar(100, 100); ProgressBar.LoadTexture(GenG.Pixel); ProgressBar.SetSourceRect(0, 0, 100, 10); ProgressBar.Colors.Add(Color.Red); ProgressBar.Colors.Add(Color.Orange); ProgressBar.Colors.Add(Color.Green); ProgressBar.Colors.Add(Color.CornflowerBlue); ProgressBar.Colors.Add(Color.White); //ProgressBar.BlendColors = true; //ProgressBar.MinCallback = Shake; ProgressBar.Rotation = -90; ProgressBar.SetParent(Player, GenObject.ParentType.Position); ProgressBar.ParentOffset.X = 30; Add(ProgressBar); /*Cloth = new GenVerlet(); Cloth.MakeGrid(100, 200, 8, 10, 11); Cloth.SetGravity(0f, 700f); //Cloth.SetDeceleration(100f, 0f); Cloth.LineColor = Color.Gray; Cloth.Iterations = 2;*/ /*for (int i = 0; i < 10; i++) { ((GenObject)Cloth.Members[i]).Immovable = true; ((GenObject)Cloth.Members[i]).Acceleration.Y = 0f; }*/ /*((GenObject)Cloth.Members[0]).Immovable = true; ((GenObject)Cloth.Members[0]).Acceleration.Y = 0f; ((GenObject)Cloth.Members[5]).Immovable = true; ((GenObject)Cloth.Members[5]).Acceleration.Y = 0f; ((GenObject)Cloth.Members[10]).Immovable = true; ((GenObject)Cloth.Members[10]).Acceleration.Y = 0f; Add(Cloth);*/ GenG.TimeScale = 1f; Camera.CameraFollowType = GenCamera.FollowType.LockOn; //Camera.FollowStrength = 0.05f; //Camera.MaxZoom = 10f; Camera.AddTarget(Player); //Camera.AddTarget(Warthog3); //Camera.SetCameraView(0, 0, GenG.Game.Width, GenG.Game.Height / 2); //Camera.Rotation = 180f; /*camera2.CameraFollowType = GenCamera.FollowType.LockOn; camera2.FollowStrength = 0.05f; camera2.AddTarget(Warthog5);*/ Player.Flicker(40f, 1f, Color.Red, true); Player.FadeOut(0.5f); //Timer = new GenTimer(1f, KillBox); //Add(Timer); //Timer.Start(); //Warthog5.Parent = Player; //Boxes.Kill(); //Warthog3.SetPath(Path); //Warthog3.PathSpeed = 100; }