// ROTATE -> POWER -> WAITING -> SHOOT -> COOLDOWN public void ChangeCannonState(CannonGroups cannonGroups) { if (cannonGroups.cannonState == CannonState.ROTATE) cannonGroups.cannonState = CannonState.POWER; else if (cannonGroups.cannonState == CannonState.POWER) cannonGroups.cannonState = CannonState.WAITING; else if (cannonGroups.cannonState == CannonState.WAITING) cannonGroups.cannonState = CannonState.SHOOT; else if (cannonGroups.cannonState == CannonState.SHOOT) cannonGroups.cannonState = CannonState.COOLDOWN; else if (cannonGroups.cannonState == CannonState.COOLDOWN) cannonGroups.cannonState = CannonState.ROTATE; }
public GameObjectFactory ManipulateCannons(GameObjectFactory factory, CannonGroups cannonGroups) { if (cannonGroups.cannonState == CannonState.ROTATE) { //decide whether to rotate one way or back if (factory.Objects[cannonGroups.cannonKey].sprite.Rotation >= factory.Objects[cannonGroups.cannonKey].sprite.LowerRotationBounds) factory.Objects[cannonGroups.cannonKey].sprite.rotationDirection = -1; if (factory.Objects[cannonGroups.cannonKey].sprite.Rotation <= factory.Objects[cannonGroups.cannonKey].sprite.UpperRotationBounds) factory.Objects[cannonGroups.cannonKey].sprite.rotationDirection = 1; factory.Objects[cannonGroups.cannonKey].sprite.Rotation += ((MathHelper.PiOver4 / 16) * factory.Objects[cannonGroups.cannonKey].sprite.rotationDirection); } if (cannonGroups.cannonState == CannonState.POWER) { if (factory.Objects[cannonGroups.barKey].sprite.Location.X > factory.Objects[cannonGroups.tabKey].sprite.Location.X) { Direction = 1; } else if (factory.Objects[cannonGroups.barKey].sprite.Location.X + factory.Objects[cannonGroups.barKey].sprite.BoundingBoxRect.Width - factory.Objects[cannonGroups.tabKey].sprite.BoundingBoxRect.Width < factory.Objects[cannonGroups.tabKey].sprite.Location.X) { Direction = -1; } factory.Objects[cannonGroups.tabKey].sprite.Location += new Vector2(10 * Direction, 0); } if (cannonGroups.cannonState == CannonState.SHOOT) { ShootDoggy(factory, cannonGroups); ChangeCannonState(cannonGroups); } if (cannonGroups.cannonState == CannonState.COOLDOWN) { if (factory.Objects[cannonGroups.boomKey].sprite.Dead) { ChangeCannonState(cannonGroups); } } return factory; }
public GameObjectFactory ShootDoggy(GameObjectFactory factory, CannonGroups cannonGroup) { List<int> temp = new List<int>(); //figure out which cannon to shoot from //replace once just pass which cannon //endreplace //dog int dog = factory.Create( (int)RaginRovers.GameObjectTypes.DOG, factory.Objects[cannonGroup.cannonKey].sprite.Location + new Vector2(30, 0), "spritesheet", Vector2.Zero, cannonGroup.Rotation, 0, 0); factory.Objects[dog].sprite.OnCollision += new OnCollisionEventHandler(CollisionEvents.dog_OnCollision); if (factory.Objects[cannonGroup.cannonKey].sprite.Location.X > 6000) factory.Objects[dog].sprite.PlayerNumber = 2; if (factory.Objects[cannonGroup.cannonKey].sprite.Location.X < 6000) factory.Objects[dog].sprite.PlayerNumber = 1; if (cannonGroup.isFlipped) { factory.Objects[dog].sprite.flipType = Sprite.FlipType.VERTICAL; } factory.Objects[dog].sprite.PhysicsBody.LinearVelocity = new Vector2( cannonPower * (float)Math.Cos((double)cannonGroup.Rotation), cannonPower * (float)Math.Sin((double)cannonGroup.Rotation)); //chaning magnitude depending on power bar factory.Objects[dog].sprite.PhysicsBody.LinearVelocity *= cannonGroup.Power; // ((factory.Objects[cannonGroup.tabKey].sprite.Location.X - factory.Objects[cannonGroup.barKey].sprite.Location.X) / factory.Objects[cannonGroup.barKey].sprite.BoundingBoxRect.Width) + 1; factory.Objects[cannonGroup.boomKey].sprite.Dead = false; cannonGroup.boomTime = 0f; factory.Objects[dog].sprite.PhysicsBody.Mass = 30; factory.Objects[dog].sprite.PhysicsBody.Restitution = 0.4f; //factory.Objects[cannonGroup.boomKey].sprite.Rotation = factory.Objects[cannonGroup.cannonKey].sprite.Rotation; factory.Objects[cannonGroup.boomKey].sprite.Location = factory.Objects[cannonGroup.cannonKey].sprite.Location - factory.Objects[cannonGroup.boomKey].sprite.Origin + new Vector2(0, -150) + factory.Objects[dog].sprite.PhysicsBody.LinearVelocity / factory.Objects[dog].sprite.PhysicsBody.LinearVelocity.Length() * 200; return factory; }