Got proper mouse movements for all characters!

This commit is contained in:
JoshuaNavarro 2019-07-20 12:36:31 -07:00
parent c3b439766e
commit b81037bcb5
4 changed files with 236 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

View File

@ -44,5 +44,15 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame
{ {
} }
/// <summary>
/// Checks to see if the given position is inside the viewport.
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public bool positionInsideViewport(Vector2 position)
{
return this.getXNARect().Contains((int)position.X, (int)position.Y);
}
} }
} }

View File

@ -14,7 +14,7 @@ using StardustCore.UIUtilities.MenuComponents;
namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
{ {
/// <summary> /// <summary>
/// TODO: Finish adding in a button prompts and click prompt and draw them to the screen. /// TODO: Giev prompt to start the game by pressing enter/start/space.
/// </summary> /// </summary>
public class CharacterSelectScreen : IClickableMenuExtended public class CharacterSelectScreen : IClickableMenuExtended
{ {
@ -36,6 +36,10 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
public Dictionary<string, Button> buttons; public Dictionary<string, Button> buttons;
public const float controllerMouseSensitivity = 3f;
private Vector2 oldMousePos;
public CharacterSelectScreen(int x, int y, int width, int height) : base(x, y, width, height, false) public CharacterSelectScreen(int x, int y, int width, int height) : base(x, y, width, height, false)
{ {
this.background = SeasideScramble.self.textureUtils.getExtendedTexture("SSCMaps", "TitleScreenBackground"); this.background = SeasideScramble.self.textureUtils.getExtendedTexture("SSCMaps", "TitleScreenBackground");
@ -96,6 +100,47 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
this.animatedSprites.Add("P3Color", new StardustCore.Animations.AnimatedSprite("P3Color", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Three].X, this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "BlankTexture"), new Animation(0, 0, 32, 32)), Color.White)); this.animatedSprites.Add("P3Color", new StardustCore.Animations.AnimatedSprite("P3Color", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Three].X, this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "BlankTexture"), new Animation(0, 0, 32, 32)), Color.White));
this.animatedSprites.Add("P4Color", new StardustCore.Animations.AnimatedSprite("P4Color", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Four].X, this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "BlankTexture"), new Animation(0, 0, 32, 32)), Color.White)); this.animatedSprites.Add("P4Color", new StardustCore.Animations.AnimatedSprite("P4Color", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Four].X, this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "BlankTexture"), new Animation(0, 0, 32, 32)), Color.White));
this.animatedSprites.Add("P1Mouse", new StardustCore.Animations.AnimatedSprite("P1Mouse", new Vector2(Game1.getMousePosition().X, Game1.getMousePosition().Y), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "Cursors"), new Animation(0, 0, 16, 16), new Dictionary<string, List<Animation>>()
{
{"Default",new List<Animation>()
{
new Animation(0,0,16,16)
} }
}, "Default"), Color.White));
this.animatedSprites["P1Mouse"].position = new Vector2(Game1.getMouseX(), Game1.getMouseY());
this.animatedSprites.Add("P2Mouse", new StardustCore.Animations.AnimatedSprite("P2Mouse", this.playerDisplayLocations[SSCEnums.PlayerID.Two], new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "Cursors"), new Animation(0, 0, 16, 16), new Dictionary<string, List<Animation>>()
{
{"Default",new List<Animation>()
{
new Animation(0,0,16,16)
} }
}, "Default"), Color.White));
this.animatedSprites.Add("P3Mouse", new StardustCore.Animations.AnimatedSprite("P3Mouse", this.playerDisplayLocations[SSCEnums.PlayerID.Three], new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "Cursors"), new Animation(0, 0, 16, 16), new Dictionary<string, List<Animation>>()
{
{"Default",new List<Animation>()
{
new Animation(0,0,16,16)
} }
}, "Default"), Color.White));
this.animatedSprites.Add("P4Mouse", new StardustCore.Animations.AnimatedSprite("P4Mouse", this.playerDisplayLocations[SSCEnums.PlayerID.Four], new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "Cursors"), new Animation(0, 0, 16, 16), new Dictionary<string, List<Animation>>()
{
{"Default",new List<Animation>()
{
new Animation(0,0,16,16)
} }
}, "Default"), Color.White));
this.buttons = new Dictionary<string, Button>(); this.buttons = new Dictionary<string, Button>();
this.buttons.Add("P1PrevButton", new Button("P1PrevButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.One].X - 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "lastPageButton"), new Rectangle(0, 0, 32, 32), 2f)); this.buttons.Add("P1PrevButton", new Button("P1PrevButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.One].X - 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "lastPageButton"), new Rectangle(0, 0, 32, 32), 2f));
this.buttons.Add("P1NextButton", new Button("P1NextButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.One].X + 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Rectangle(0, 0, 32, 32), 2f)); this.buttons.Add("P1NextButton", new Button("P1NextButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.One].X + 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.One].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Rectangle(0, 0, 32, 32), 2f));
@ -107,6 +152,9 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
this.buttons.Add("P4NextButton", new Button("P4NextButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.Four].X + 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.Four].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Rectangle(0, 0, 32, 32), 2f)); this.buttons.Add("P4NextButton", new Button("P4NextButton", new Rectangle((int)this.playerDisplayLocations[SSCEnums.PlayerID.Four].X + 64, (int)this.playerDisplayLocations[SSCEnums.PlayerID.Four].Y + 250, 64, 64), SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Rectangle(0, 0, 32, 32), 2f));
//this.animatedSprites.Add("P1PrevColor", new StardustCore.Animations.AnimatedSprite("P1PrevColor", this.playerDisplayLocations[SSCEnums.PlayerID.One] + new Vector2(0, 200), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "lastPageButton"), new Animation(0, 0, 32, 32)), Color.White)); //this.animatedSprites.Add("P1PrevColor", new StardustCore.Animations.AnimatedSprite("P1PrevColor", this.playerDisplayLocations[SSCEnums.PlayerID.One] + new Vector2(0, 200), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "lastPageButton"), new Animation(0, 0, 32, 32)), Color.White));
//this.animatedSprites.Add("P1NextColor", new StardustCore.Animations.AnimatedSprite("P1NextColor", this.playerDisplayLocations[SSCEnums.PlayerID.One] + new Vector2(64, 200), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Animation(0, 0, 32, 32)), Color.White)); //this.animatedSprites.Add("P1NextColor", new StardustCore.Animations.AnimatedSprite("P1NextColor", this.playerDisplayLocations[SSCEnums.PlayerID.One] + new Vector2(64, 200), new AnimationManager(SeasideScramble.self.textureUtils.getExtendedTexture("SSCUI", "nextPageButton"), new Animation(0, 0, 32, 32)), Color.White));
this.oldMousePos =new Vector2( Game1.getMousePosition().X,Game1.getMousePosition().Y);
} }
public CharacterSelectScreen(xTile.Dimensions.Rectangle viewport) : this(0, 0, viewport.Width, viewport.Height) public CharacterSelectScreen(xTile.Dimensions.Rectangle viewport) : this(0, 0, viewport.Width, viewport.Height)
@ -115,6 +163,16 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
} }
/// <summary>
/// Gets the delta change in mouse movement.
/// </summary>
/// <returns></returns>
private Vector2 getMouseDelta()
{
Vector2 ret= -1*(this.oldMousePos - new Vector2(Game1.getMousePosition().X, Game1.getMousePosition().Y));
return ret;
}
public override void gameWindowSizeChanged(Rectangle oldBounds, Rectangle newBounds) public override void gameWindowSizeChanged(Rectangle oldBounds, Rectangle newBounds)
{ {
this.xPositionOnScreen = 0; this.xPositionOnScreen = 0;
@ -130,9 +188,6 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
this.playerDisplayLocations[SSCEnums.PlayerID.Two] = new Vector2(SeasideScramble.self.camera.viewport.Width * .4f, SeasideScramble.self.camera.viewport.Height * .5f); this.playerDisplayLocations[SSCEnums.PlayerID.Two] = new Vector2(SeasideScramble.self.camera.viewport.Width * .4f, SeasideScramble.self.camera.viewport.Height * .5f);
this.playerDisplayLocations[SSCEnums.PlayerID.Three] = new Vector2(SeasideScramble.self.camera.viewport.Width * .6f, SeasideScramble.self.camera.viewport.Height * .5f); this.playerDisplayLocations[SSCEnums.PlayerID.Three] = new Vector2(SeasideScramble.self.camera.viewport.Width * .6f, SeasideScramble.self.camera.viewport.Height * .5f);
this.playerDisplayLocations[SSCEnums.PlayerID.Four] = new Vector2(SeasideScramble.self.camera.viewport.Width * .8f, SeasideScramble.self.camera.viewport.Height * .5f); this.playerDisplayLocations[SSCEnums.PlayerID.Four] = new Vector2(SeasideScramble.self.camera.viewport.Width * .8f, SeasideScramble.self.camera.viewport.Height * .5f);
} }
public override void update(GameTime time) public override void update(GameTime time)
@ -163,6 +218,12 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
this.checkForControllerColorSwap(p3, SSCEnums.PlayerID.Three); this.checkForControllerColorSwap(p3, SSCEnums.PlayerID.Three);
this.checkForControllerColorSwap(p4, SSCEnums.PlayerID.Four); this.checkForControllerColorSwap(p4, SSCEnums.PlayerID.Four);
this.updateControllerMouseMovement(time, SSCEnums.PlayerID.One, p1);
this.animatedSprites["P1Mouse"].position += this.getMouseDelta(); //Get the delta change in mouse.
this.updateControllerMouseMovement(time, SSCEnums.PlayerID.Two, p2);
this.updateControllerMouseMovement(time, SSCEnums.PlayerID.Three, p3);
this.updateControllerMouseMovement(time, SSCEnums.PlayerID.Four, p4);
this.inputDelays[SSCEnums.PlayerID.One]--; this.inputDelays[SSCEnums.PlayerID.One]--;
this.inputDelays[SSCEnums.PlayerID.Two]--; this.inputDelays[SSCEnums.PlayerID.Two]--;
this.inputDelays[SSCEnums.PlayerID.Three]--; this.inputDelays[SSCEnums.PlayerID.Three]--;
@ -176,6 +237,63 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
SeasideScramble.self.camera.snapToPosition(new Vector2(0, 0)); SeasideScramble.self.camera.snapToPosition(new Vector2(0, 0));
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.One) != null)
{
this.animatedSprites["P1Mouse"].color = SeasideScramble.self.getPlayer(SSCEnums.PlayerID.One).playerColor;
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Two) != null)
{
this.animatedSprites["P2Mouse"].color = SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Two).playerColor;
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Three) != null)
{
this.animatedSprites["P3Mouse"].color = SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Three).playerColor;
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Four) != null)
{
this.animatedSprites["P4Mouse"].color = SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Four).playerColor;
}
this.oldMousePos = new Vector2(Game1.getMousePosition().X, Game1.getMousePosition().Y);
}
private void updateControllerMouseMovement(GameTime time, SSCEnums.PlayerID player,GamePadState state)
{
if(player== SSCEnums.PlayerID.One)
{
this.animatedSprites["P1Mouse"].position += new Vector2(state.ThumbSticks.Right.X,state.ThumbSticks.Right.Y*-1)* controllerMouseSensitivity;
if (SeasideScramble.self.camera.positionInsideViewport(this.animatedSprites["P1Mouse"].position) == false)
{
this.animatedSprites["P1Mouse"].position = this.playerDisplayLocations[player];
}
}
if (player == SSCEnums.PlayerID.Two)
{
this.animatedSprites["P2Mouse"].position += new Vector2(state.ThumbSticks.Right.X, state.ThumbSticks.Right.Y * -1)* controllerMouseSensitivity;
if (SeasideScramble.self.camera.positionInsideViewport(this.animatedSprites["P2Mouse"].position) == false)
{
this.animatedSprites["P2Mouse"].position = this.playerDisplayLocations[player];
}
}
if (player == SSCEnums.PlayerID.Three)
{
this.animatedSprites["P3Mouse"].position += new Vector2(state.ThumbSticks.Right.X, state.ThumbSticks.Right.Y * -1) * controllerMouseSensitivity;
if (SeasideScramble.self.camera.positionInsideViewport(this.animatedSprites["P3Mouse"].position) == false)
{
this.animatedSprites["P3Mouse"].position = this.playerDisplayLocations[player];
}
}
if (player == SSCEnums.PlayerID.Four)
{
this.animatedSprites["P4Mouse"].position += new Vector2(state.ThumbSticks.Right.X, state.ThumbSticks.Right.Y * -1) * controllerMouseSensitivity;
if (SeasideScramble.self.camera.positionInsideViewport(this.animatedSprites["P4Mouse"].position) == false)
{
this.animatedSprites["P4Mouse"].position = this.playerDisplayLocations[player];
}
}
} }
/// <summary> /// <summary>
@ -339,6 +457,53 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
} }
} }
public void receiveGamepadLeftClick(SSCEnums.PlayerID player,int x, int y, bool playSound = true)
{
if (player == SSCEnums.PlayerID.One)
{
if (this.buttons["P1NextButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, 1);
}
if (this.buttons["P1PrevButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, -1);
}
}
if (player == SSCEnums.PlayerID.Two)
{
if (this.buttons["P2NextButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, 1);
}
if (this.buttons["P2PrevButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, -1);
}
}
if (player == SSCEnums.PlayerID.Three)
{
if (this.buttons["P3NextButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, 1);
}
if (this.buttons["P3PrevButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, -1);
}
}
if (player == SSCEnums.PlayerID.Four)
{
if (this.buttons["P4NextButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, 1);
}
if (this.buttons["P4PrevButton"].containsPoint(x, y))
{
this.iteratePlayerColorIndex(player, -1);
}
}
}
public override void receiveKeyPress(Keys key) public override void receiveKeyPress(Keys key)
{ {
@ -442,6 +607,33 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
this.animatedSprites["P4Color"].draw(b, 2f, 0f); this.animatedSprites["P4Color"].draw(b, 2f, 0f);
} }
Vector2 p1Loc = Game1.dialogueFont.MeasureString("Player 1");
b.DrawString(Game1.dialogueFont, "Player 1", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.One].X - (p1Loc.X / 4), this.playerDisplayLocations[SSCEnums.PlayerID.One].Y - 64), Color.White);
Vector2 p2Loc = Game1.dialogueFont.MeasureString("Player 2");
b.DrawString(Game1.dialogueFont, "Player 2", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Two].X - (p2Loc.X / 4), this.playerDisplayLocations[SSCEnums.PlayerID.Two].Y - 64), Color.White);
Vector2 p3Loc = Game1.dialogueFont.MeasureString("Player 3");
b.DrawString(Game1.dialogueFont, "Player 3", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Three].X - (p3Loc.X / 4), this.playerDisplayLocations[SSCEnums.PlayerID.Three].Y - 64), Color.White);
Vector2 p4Loc = Game1.dialogueFont.MeasureString("Player 4");
b.DrawString(Game1.dialogueFont, "Player 4", new Vector2(this.playerDisplayLocations[SSCEnums.PlayerID.Four].X - (p4Loc.X / 4), this.playerDisplayLocations[SSCEnums.PlayerID.Four].Y - 64), Color.White);
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.One) != null)
{
this.drawPlayerMouse(b, SSCEnums.PlayerID.One);
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Two) != null)
{
this.drawPlayerMouse(b, SSCEnums.PlayerID.Two);
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Three) != null)
{
this.drawPlayerMouse(b, SSCEnums.PlayerID.Three);
}
if (SeasideScramble.self.getPlayer(SSCEnums.PlayerID.Four) != null)
{
this.drawPlayerMouse(b, SSCEnums.PlayerID.Four);
}
} }
/// <summary> /// <summary>
@ -453,5 +645,32 @@ namespace Revitalize.Framework.Minigame.SeasideScrambleMinigame.SSCMenus
base.exitMenu(playSound); base.exitMenu(playSound);
} }
public void drawPlayerMouse(SpriteBatch b, SSCEnums.PlayerID player)
{
/*
if (Game1.options.hardwareCursor)
return;
b.Draw(Game1.mouseCursors, new Vector2((float)Game1.getMouseX(), (float)Game1.getMouseY()), new Rectangle?(Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, !Game1.options.snappyMenus || !Game1.options.gamepadControls ? 0 : 44, 16, 16)), Color.White * Game1.mouseCursorTransparency, 0.0f, Vector2.Zero, (float)(4.0 + (double)Game1.dialogueButtonScale / 150.0), SpriteEffects.None, 1f);
*/
if(player== SSCEnums.PlayerID.One)
{
this.animatedSprites["P1Mouse"].draw(b,4f,0f);
}
if (player == SSCEnums.PlayerID.Two)
{
this.animatedSprites["P2Mouse"].draw(b, 4f, 0f);
}
if (player == SSCEnums.PlayerID.Three)
{
this.animatedSprites["P3Mouse"].draw(b, 4f, 0f);
}
if (player == SSCEnums.PlayerID.Four)
{
this.animatedSprites["P4Mouse"].draw(b, 4f, 0f);
}
}
} }
} }

View File

@ -139,6 +139,9 @@
<Content Include="Content\Minigames\SeasideScramble\Graphics\UI\BlankTexture.png"> <Content Include="Content\Minigames\SeasideScramble\Graphics\UI\BlankTexture.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Minigames\SeasideScramble\Graphics\UI\Cursors.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Content\Minigames\SeasideScramble\Graphics\UI\lastPageButton.png"> <Content Include="Content\Minigames\SeasideScramble\Graphics\UI\lastPageButton.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>