Skip to content

Commit

Permalink
Improved swimming controls + air level is now show in hud
Browse files Browse the repository at this point in the history
  • Loading branch information
kennyvv committed Jun 9, 2021
1 parent 0b7a4da commit a080fe7
Show file tree
Hide file tree
Showing 14 changed files with 273 additions and 22 deletions.
3 changes: 3 additions & 0 deletions src/Alex.Common/Gui/Graphics/AlexGuiTextures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ public static class AlexGuiTextures
public static readonly GuiTextures HungerPlaceholder = new(AlexNamespace, nameof(HungerPlaceholder));
public static readonly GuiTextures HungerFull = new(AlexNamespace, nameof(HungerFull));
public static readonly GuiTextures HungerHalf = new(AlexNamespace, nameof(HungerHalf));

public static readonly GuiTextures AirBubble = new(AlexNamespace, nameof(AirBubble));
public static readonly GuiTextures PoppedAirBubble = new(AlexNamespace, nameof(PoppedAirBubble));

public static readonly GuiTextures BossbarBackgroundPink = new(AlexNamespace, nameof(BossbarBackgroundPink));
public static readonly GuiTextures BossbarProgressPink = new(AlexNamespace, nameof(BossbarProgressPink));
Expand Down
6 changes: 3 additions & 3 deletions src/Alex.Common/Utils/Vectors/PlayerLocation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public float Yaw
get => _yaw;
set
{
_yaw = FixValue(value);
_yaw = value;// FixValue(value);
}
}

Expand All @@ -27,7 +27,7 @@ public float Pitch
get => _pitch;
set
{
var pitch = FixValue(value);
var pitch = value;//FixValue(value);
_pitch = pitch;
}
}
Expand All @@ -37,7 +37,7 @@ public float HeadYaw
get => _headYaw;
set
{
_headYaw = FixValue(value);
_headYaw = value; //FixValue(value);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/Alex/Entities/Components/MovementComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ protected override void OnUpdate(float deltaTime)
}

private float _distanceMoved = 0f, _lastDistanceMoved = 0f;
public float TotalDistanceMoved { get; set; } = 0f;
public float DistanceMoved
{
get => _distanceMoved;
Expand All @@ -109,7 +110,7 @@ public void UpdateHeading(Vector3 heading)
{
lock (_headingLock)
{
Heading = heading.Transform(Entity.KnownPosition.GetDirectionMatrix(false, true));
Heading = heading.Transform(Entity.KnownPosition.GetDirectionMatrix(Entity.IsSwimming, true));
}
}

Expand Down Expand Up @@ -380,6 +381,7 @@ private void UpdateDistanceMoved(float deltaTime)
if (horizontalDistance > 0f)
{
DistanceMoved += horizontalDistance;
TotalDistanceMoved += horizontalDistance;
}

if (verticalDistance > 0f)
Expand Down
4 changes: 2 additions & 2 deletions src/Alex/Entities/Components/PhysicsComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ protected override void OnUpdate(float deltaTime)
e.Movement.Move(e.Velocity);


if (e.IsAffectedByGravity && !e.IsFlying && !e.KnownPosition.OnGround)
if (e.IsAffectedByGravity && !e.IsFlying && !e.KnownPosition.OnGround && !e.IsSwimming)
{
var gravity = (float)e.Gravity;

Expand Down Expand Up @@ -121,7 +121,7 @@ private Vector3 ConvertHeading(Entity entity, float multiplier)
var heading = entity.Movement.Heading;
var strafe = heading.X;
var forward = heading.Z;
var vertical = entity.IsFlying ? heading.Y : 0f;
var vertical = (entity.IsFlying || entity.IsSwimming) ? heading.Y : 0f;

var speed = MathF.Sqrt(strafe * strafe + forward * forward + vertical * vertical);
if (speed < 0.01f)
Expand Down
56 changes: 53 additions & 3 deletions src/Alex/Entities/Entity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,10 @@ protected virtual void OnInventorySlotChanged(object sender, SlotChangedEventArg
CheckHeldItem();
}

public bool CanPowerJump { get; set; } = false;
public bool CanClimb { get; set; } = false;
public bool CanSwim { get; set; } = false;

public double AttackTime => -1d;

[MoProperty("is_onfire"), MoProperty("is_on_fire")]
Expand Down Expand Up @@ -1069,6 +1073,11 @@ private void HandleEntityFlags(long rawData, long extendedData)
IsBlocking = data[71];
IsSpinAttacking = data[55];
IsSwimming = data[56];

CanSwim = data[(int) MiNET.Entities.Entity.DataFlags.CanSwim];
CanClimb = data[(int) MiNET.Entities.Entity.DataFlags.CanClimb];
CanFly = data[(int) MiNET.Entities.Entity.DataFlags.CanFly];
CanPowerJump = data[(int) MiNET.Entities.Entity.DataFlags.CanPowerJump];
//IsFlying = data[(int) MiNET.Entities.Entity.DataFlags.fl]
}

Expand Down Expand Up @@ -1440,16 +1449,24 @@ public virtual BoundingBox GetBoundingBox()

public virtual BoundingBox GetBoundingBox(Vector3 pos)
{
var length = Width;
var width = Width;
var height = Height;

if (IsSwimming)
{
height = Width;
width = Width;
length = Height;
}

double halfWidth = (width * Scale) / 2D;
double halfDepth = (width * Scale) / 2D;
double halfLength = (length * Scale) / 2D;

return new BoundingBox(
new Vector3((float) (pos.X - halfWidth), pos.Y, (float) (pos.Z - halfDepth)),
new Vector3((float) (pos.X - halfWidth), pos.Y, (float) (pos.Z - halfLength)),
new Vector3(
(float) (pos.X + halfWidth), (float) (pos.Y + (height * Scale)), (float) (pos.Z + halfDepth)));
(float) (pos.X + halfWidth), (float) (pos.Y + (height * Scale)), (float) (pos.Z + halfLength)));
}

public virtual BoundingBox GetVisibilityBoundingBox(Vector3 pos)
Expand Down Expand Up @@ -1927,6 +1944,39 @@ public bool IsItemEquipped(MoParams mo)
return item.Count > 0 && !(item is ItemAir);
}

[MoFunction("get_default_bone_pivot")]
public double GetDefaultBonePivot(MoParams mo)
{
var p1 = mo.Get(0);

ModelBone bone = null;
if (p1 is StringValue sv)
{
if (_modelRenderer.GetBone(sv.Value, out bone))
{
int axis = 0;
if (mo.Contains(1))
{
axis = mo.GetInt(1);
}

var pivot = bone.Pivot.GetValueOrDefault(Vector3.Zero);

switch (axis)
{
case 0:
return pivot.X;
case 1:
return pivot.Y;
case 2:
return pivot.Z;
}
}
}

return 0d;
}

[MoProperty("has_target")]
public bool HasTarget => TargetEntityId != -1;

Expand Down
5 changes: 3 additions & 2 deletions src/Alex/Entities/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public Player(GraphicsDevice graphics, InputManager inputManager, World world, S
IsAffectedByGravity = true;
HasPhysics = true;
NoAi = false;
CanSwim = true;
}

protected override void OnInventorySlotChanged(object sender, SlotChangedEventArgs e)
Expand Down Expand Up @@ -859,7 +860,7 @@ private bool CanPlaceBlock(BlockCoordinates coordinates, Block block)
return true;
}

public override BoundingBox GetBoundingBox(Vector3 pos)
/*public override BoundingBox GetBoundingBox(Vector3 pos)
{
double halfWidth = (0.6 * Scale) / 2D;
var height = IsSneaking ? 1.5 : Height;
Expand All @@ -868,7 +869,7 @@ public override BoundingBox GetBoundingBox(Vector3 pos)
new Vector3((float) (pos.X - halfWidth), pos.Y, (float) (pos.Z - halfWidth)),
new Vector3(
(float) (pos.X + halfWidth), (float) (pos.Y + (height * Scale)), (float) (pos.Z + halfWidth)));
}
}*/

private bool Falling { get; set; } = false;
private float FallingStart { get; set; } = 0;
Expand Down
25 changes: 21 additions & 4 deletions src/Alex/Entities/PlayerController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ private void UpdateMovementInput(GameTime gt)

bool holdingDownSprint = InputManager.IsDown(AlexInputCommand.Sprint);

bool canSwim = Player.FeetInWater && Player.HeadInWater;
bool canSwim = Player.CanSwim && Player.FeetInWater && Player.HeadInWater;

if (canSwim)
{
Expand Down Expand Up @@ -422,6 +422,9 @@ private void UpdateMovementInput(GameTime gt)
}
}
}

if (Player.IsSwimming && moveVector.LengthSquared() <= 0.01f)
Player.IsSwimming = false;

Player.Movement.UpdateHeading(moveVector);

Expand All @@ -445,8 +448,10 @@ private void UpdateMovementInput(GameTime gt)
* (float) (gt.ElapsedGameTime.TotalSeconds);

look = -look;

Player.KnownPosition.HeadYaw -= look.X;

Player.KnownPosition.HeadYaw = FixValue(Player.KnownPosition.HeadYaw - look.X);
//Player.KnownPosition.HeadYaw -= look.X;

Player.KnownPosition.Pitch -= look.Y;
//Player.KnownPosition.HeadYaw = MathUtils.NormDeg(Player.KnownPosition.HeadYaw);
//Player.KnownPosition.Pitch = MathHelper.Clamp(Player.KnownPosition.Pitch, -89.9f, 89.9f);
Expand All @@ -471,7 +476,7 @@ private void UpdateMovementInput(GameTime gt)

var look = (new Vector2((-mouseDelta.X), (mouseDelta.Y)) * (float) CursorSensitivity) * (float) (gt.ElapsedGameTime.TotalSeconds);

Player.KnownPosition.HeadYaw -= look.X;
Player.KnownPosition.HeadYaw = FixValue(Player.KnownPosition.HeadYaw - look.X);

Player.KnownPosition.SetPitchBounded(Player.KnownPosition.Pitch - look.Y);
//Player.KnownPosition.Pitch -= look.Y;
Expand All @@ -491,5 +496,17 @@ private void UpdateMovementInput(GameTime gt)

LastVelocity = Player.Velocity;
}

float FixValue(float value)
{
var val = value;

if (val < 0f)
val = 360f - (MathF.Abs(val) % 360f);
else if (val > 360f)
val = val % 360f;

return val;
}
}
}
2 changes: 1 addition & 1 deletion src/Alex/Entities/RemotePlayer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class RemotePlayer : LivingEntity

public BlockCoordinates BedPosition { get; set; } = BlockCoordinates.Zero;
public Color PotionColor { get; set; } = Color.White;

//private PooledTexture2D _texture;
public RemotePlayer(World level, string geometry = "geometry.humanoid.customSlim", Skin skin = null) : base(level)
{
Expand Down
14 changes: 13 additions & 1 deletion src/Alex/Gamestates/InGame/Hud/PlayingHud.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ public class PlayingHud : Screen, IChatRecipient
private readonly PlayerController _playerController;
private readonly HealthComponent _healthComponent;
private readonly HungerComponent _hungerComponent;
private readonly AirComponent _airComponent;
private readonly ExperienceComponent _experienceComponent;


private readonly Container _armorAndAirContainer;
private readonly Container _healthContainer;
private readonly MultiStackContainer _bottomContainer;
private readonly TipPopupComponent _tipPopupComponent;
Expand Down Expand Up @@ -84,6 +86,13 @@ public PlayingHud(Alex game, Player player, TitleComponent titleComponent) : bas
_hungerComponent = new HungerComponent(player);
_hungerComponent.Anchor = Alignment.TopRight;

_armorAndAirContainer = new Container();
_armorAndAirContainer.Anchor = Alignment.Fill;
_armorAndAirContainer.Margin = new Thickness(0, 0, 0, 1);

_airComponent = new AirComponent(player);
_airComponent.Anchor = Alignment.TopRight;

_experienceComponent = new ExperienceComponent(player);
_experienceComponent.Margin = new Thickness(0, 0, 0, 1);
_experienceComponent.Anchor = Alignment.BottomFill;
Expand All @@ -110,6 +119,9 @@ protected override void OnInit(IGuiRenderer renderer)
{
_bottomContainer.AddChild(_tipPopupComponent);

_armorAndAirContainer.AddChild(_airComponent);
_healthAndHotbar.AddChild(_armorAndAirContainer);

_healthContainer.AddChild(_healthComponent);
_healthContainer.AddChild(_hungerComponent);

Expand Down
9 changes: 6 additions & 3 deletions src/Alex/Graphics/Camera/EntityCamera.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Alex.Common.Graphics;
using Alex.Common.Utils;
using Alex.Common.Utils.Vectors;
using Alex.Entities;
using Microsoft.Xna.Framework;
Expand Down Expand Up @@ -106,11 +107,12 @@ private void UpdateThirdPerson(bool frontSideView)

//var offset = ThirdPersonOffset;
//offset = Vector3.Transform(offset, MatrixHelper.CreateRotationDegrees(Rotation));

var boundingBox = TrackingEntity.GetBoundingBox();

var renderLocation = TrackingEntity.RenderLocation;

var target = Position;
target.Y += (float)(TrackingEntity.Height * TrackingEntity.Scale);
target.Y += boundingBox.GetHeight();

float pitch = (-renderLocation.Pitch).ToRadians();
float yaw = ((renderLocation.Yaw)).ToRadians();
Expand All @@ -137,8 +139,9 @@ public override void Update(IUpdateArgs args)

if (_mode == EntityCameraMode.FirstPerson)
{
var boundingBox = TrackingEntity.GetBoundingBox();
MoveTo(
entityLocation + new Vector3(0, (float) (TrackingEntity.Height - 0.175f), 0),
entityLocation + new Vector3(0, (float) (boundingBox.GetHeight() - 0.175f), 0),
entityPhysicalLocation.GetDirection(true, true));
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,9 @@ private void DoImportant()
runtime.Environment.SetValue("variable.is_paperdoll", new DoubleValue(0d));
runtime.Environment.SetValue("variable.swim_amount", Entity.IsSwimming ? new DoubleValue(1d) : new DoubleValue(0d));
runtime.Environment.SetValue("variable.player_x_rotation", new DoubleValue(Entity.KnownPosition.Pitch));

runtime.Environment.SetValue("variable.bob_animation", new DoubleValue(1d));
runtime.Environment.SetValue("variable.hand_bob", new DoubleValue(1d));

if (Entity is RemotePlayer player)
{
bool holdingLeft = false;
Expand Down
2 changes: 1 addition & 1 deletion src/Alex/Graphics/Models/Items/ItemModelRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ public int Render(IRenderArgs args, Microsoft.Xna.Framework.Graphics.Effect effe
Effect.World = Matrix.CreateScale(scale)
* Matrix.CreateRotationY(MathUtils.ToRadians(180f))
* MatrixHelper.CreateRotationDegrees(rotation)
* Matrix.CreateTranslation(halfSize + translation)
* Matrix.CreateTranslation( halfSize + translation)
* characterMatrix;
}
else
Expand Down
Loading

0 comments on commit a080fe7

Please sign in to comment.