Add project files.

This commit is contained in:
2025-12-16 08:51:34 -05:00
parent ed4d50a5bd
commit f7e3fe0a47
140 changed files with 2946 additions and 0 deletions

View File

@@ -0,0 +1,272 @@
using AlienAttack.MonoGame.Things.Weapons;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using System;
using System.Collections.Generic;
namespace AlienAttack.MonoGame.Things;
internal enum PlayerHorizontalMoveState
{
None,
Left,
Right
}
[Flags]
internal enum MoveFlag
{
None = 0,
Left = 1,
Right = 2,
Up = 4,
Down = 8
}
public class DrwaState
{
}
internal class Player : MoveableSprite
{
protected PlayerHorizontalMoveState MoveState = PlayerHorizontalMoveState.None;
protected MoveFlag MoveFlags;
protected ulong MoveThreshold = 0;
//protected ulong FireThreshold = 0;
protected ICollection<IWeapon> ActiveWeapons = [];
protected int CurrentExhaustFrame = 1;
protected int MaxExhaustFrames = 6;
protected int ExhaustAnimationThreshold = 30;
protected int CurrentExhaustAnimationThreshold = 10;
protected int CurrentExhaustDirection = 1;
public Player(int x, int y) : base(x, y)
{
BoundBox = new Rectangle(0, 0, 64, 64);
ActiveWeapons.Add(new Minigun());
ActiveWeapons.Add(new FastMinigun());
}
//Texture2D texture = Game
public override void Draw(SpriteDrawArgs args)
{
//DrawExhaust(args);
string frameNumber = MoveState == PlayerHorizontalMoveState.None ? "01" :
MoveThreshold < 30 ? "02" : "03";
SpriteEffects spriteEffects = MoveState == PlayerHorizontalMoveState.Right ? SpriteEffects.FlipHorizontally : SpriteEffects.None;
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\PlayerRed_Frame_{frameNumber}");
//args.SpriteBatch.Draw(texture, Position, DrawColor);
args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, spriteEffects, 1);
}
private void DrawExhaust(SpriteDrawArgs args)
{
Texture2D texture = args.Content.Load<Texture2D>(@$"Sprites\Exhaust_Frame_0{CurrentExhaustFrame}_png_processed");
args.SpriteBatch.Draw(texture, Position, null, DrawColor, 0, new Vector2(0, 0), 1, SpriteEffects.None, 1);
}
private string GetPlayerTextureName()
{
switch (MoveState)
{
case PlayerHorizontalMoveState.Left:
return "PlayerRed_Frame_02";
case PlayerHorizontalMoveState.Right:
return "PlayerRed_Frame_03";
case PlayerHorizontalMoveState.None:
default:
return "PlayerRed_Frame_01";
}
}
public override void Update(SpriteUpdateContext context)
{
//UpdateExhaustAnimationThreshold();
CheckMove(context);
CheckFire(context);
base.Update(context);
}
private void UpdateExhaustAnimationThreshold()
{
if (CurrentExhaustAnimationThreshold > 0)
{
CurrentExhaustAnimationThreshold--;
}
else
{
if (CurrentExhaustFrame == MaxExhaustFrames)
{
CurrentExhaustDirection = -1;
}
else if (CurrentExhaustFrame == 1)
{
CurrentExhaustDirection = 1;
}
CurrentExhaustFrame += CurrentExhaustDirection;
CurrentExhaustAnimationThreshold = ExhaustAnimationThreshold;
}
}
private void CheckMove(SpriteUpdateContext context)
{
UpdateMoveFlag();
if (MoveFlags.HasFlag(MoveFlag.Up))
{
//YPosition -= 4;
YVelocity = -4;
}
else if (MoveFlags.HasFlag(MoveFlag.Down))
{
//YPosition += 4;
YVelocity = 4;
}
else
{
YVelocity = 0;
}
if (MoveFlags.HasFlag(MoveFlag.Left))
{
//XPosition -= 4;
XVelocity = -4;
if (MoveState != PlayerHorizontalMoveState.Left)
{
MoveThreshold = 0;
}
else
{
MoveThreshold++;
if (MoveThreshold > 30)
{
MoveThreshold = 30;
}
}
MoveState = PlayerHorizontalMoveState.Left;
}
else if (MoveFlags.HasFlag(MoveFlag.Right))
{
//XPosition += 4;
XVelocity = 4;
if (MoveState != PlayerHorizontalMoveState.Right)
{
MoveThreshold = 0;
}
else
{
MoveThreshold++;
if (MoveThreshold > 30)
{
MoveThreshold = 30;
}
}
MoveState = PlayerHorizontalMoveState.Right;
}
else
{
XVelocity = 0;
MoveState = PlayerHorizontalMoveState.None;
MoveThreshold = 0;
}
if (XPosition < 0)
{
XPosition = 0;
}
if (XPosition + BoundBox.Width > context.ViewTransform.ScreenWidth)
{
XPosition = context.ViewTransform.ScreenWidth - BoundBox.Width;
}
if (YPosition < 0)
{
YPosition = 0;
}
if (YPosition + BoundBox.Height > context.ViewTransform.ScreenHeight)
{
YPosition = context.ViewTransform.ScreenHeight - BoundBox.Height;
}
}
private void UpdateMoveFlag()
{
MoveFlags = MoveFlag.None;
KeyboardState keyState = Keyboard.GetState();
GamePadState gamepadState = GamePad.GetState(0);
if (keyState.IsKeyDown(Keys.Up) || keyState.IsKeyDown(Keys.W) || gamepadState.ThumbSticks.Left.Y > 0)
{
MoveFlags |= MoveFlag.Up;
}
else if (keyState.IsKeyDown(Keys.Down) || keyState.IsKeyDown(Keys.S) || gamepadState.ThumbSticks.Left.Y < 0)
{
MoveFlags |= MoveFlag.Down;
}
if (keyState.IsKeyDown(Keys.Left) || keyState.IsKeyDown(Keys.A) || gamepadState.ThumbSticks.Left.X < 0)
{
MoveFlags |= MoveFlag.Left;
}
else if (keyState.IsKeyDown(Keys.Right) || keyState.IsKeyDown(Keys.D) || gamepadState.ThumbSticks.Left.X > 0)
{
MoveFlags |= MoveFlag.Right;
}
}
private void CheckFire(SpriteUpdateContext context)
{
//if (FireThreshold > 0)
//{
// FireThreshold--;
// return;
//}
foreach (IWeapon weapon in ActiveWeapons)
{
weapon.UpdateFireThreshold();
}
if (IsFireButtonPressed() == false)
return;
foreach (IWeapon weapon in ActiveWeapons)
{
weapon.TryFire(this, context);
}
//MinigunBulletSmall bullet1 = new((int)Position.X + 12, (int)Position.Y + 6, 0, -4, this);
//MinigunBulletSmall bullet2 = new((int)Position.X + BoundBox.Width - 20, (int)Position.Y + 6, 0, -4, this);
//context.SpawnSprite(bullet1);
//context.SpawnSprite(bullet2);
//FireThreshold = 15;
}
private static bool IsFireButtonPressed()
{
KeyboardState keyState = Keyboard.GetState();
MouseState mouseState = Mouse.GetState();
GamePadState gamePadState = GamePad.GetState(0);
return keyState.IsKeyDown(Keys.Space) || mouseState.LeftButton == ButtonState.Pressed || gamePadState.Buttons.A == ButtonState.Pressed;
}
}