Fixes all the rotation bugs. (#3365)

This commit is contained in:
Pieter-Jan Briers
2021-02-22 00:46:27 +01:00
committed by GitHub
parent 6d48154617
commit 63947a6d35
26 changed files with 9344 additions and 8545 deletions

View File

@@ -64,7 +64,8 @@ namespace Content.Server.Actions
var audio = EntitySystem.Get<AudioSystem>();
var system = EntitySystem.Get<MeleeWeaponSystem>();
var angle = new Angle(args.Target.Transform.MapPosition.Position - args.Performer.Transform.MapPosition.Position);
var diff = args.Target.Transform.MapPosition.Position - args.Performer.Transform.MapPosition.Position;
var angle = Angle.FromWorldVec(diff);
actions.Cooldown(ActionType.Disarm, Cooldowns.SecondsFromNow(_cooldown));

View File

@@ -86,7 +86,7 @@ namespace Content.Server.GameObjects.Components.Chemistry
{
target.PopupMessage(Loc.GetString("You feel a tiny prick!"));
var meleeSys = EntitySystem.Get<MeleeWeaponSystem>();
var angle = new Angle(target.Transform.WorldPosition - user.Transform.WorldPosition);
var angle = Angle.FromWorldVec(target.Transform.WorldPosition - user.Transform.WorldPosition);
meleeSys.SendLunge(angle, user);
}

View File

@@ -189,7 +189,7 @@ namespace Content.Server.GameObjects.Components.Mobs
var diff = targetWorldPos - player.Transform.WorldPosition;
if (diff.LengthSquared > 0.01f)
{
player.Transform.LocalRotation = new Angle(diff);
player.Transform.LocalRotation = Angle.FromWorldVec(diff);
}
return true;

View File

@@ -86,7 +86,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
return true;
var location = eventArgs.User.Transform.Coordinates;
var angle = new Angle(eventArgs.ClickLocation.ToMapPos(Owner.EntityManager) - location.ToMapPos(Owner.EntityManager));
var diff = eventArgs.ClickLocation.ToMapPos(Owner.EntityManager) - location.ToMapPos(Owner.EntityManager);
var angle = Angle.FromWorldVec(diff);
// This should really be improved. GetEntitiesInArc uses pos instead of bounding boxes.
var entities = ArcRayCast(eventArgs.User.Transform.WorldPosition, angle, eventArgs.User);
@@ -143,7 +144,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
var target = eventArgs.TargetEntity;
var location = eventArgs.User.Transform.Coordinates;
var angle = new Angle(eventArgs.ClickLocation.ToMapPos(Owner.EntityManager) - location.ToMapPos(Owner.EntityManager));
var diff = eventArgs.ClickLocation.ToMapPos(Owner.EntityManager) - location.ToMapPos(Owner.EntityManager);
var angle = Angle.FromWorldVec(diff);
var audioSystem = EntitySystem.Get<AudioSystem>();
if (target != null)
@@ -194,7 +196,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee
for (var i = 0; i < increments; i++)
{
var castAngle = new Angle(baseAngle + increment * i);
var res = _physicsManager.IntersectRay(mapId, new CollisionRay(position, castAngle.ToVec(), (int) (CollisionGroup.Impassable|CollisionGroup.MobImpassable)), Range, ignore).FirstOrDefault();
var res = _physicsManager.IntersectRay(mapId, new CollisionRay(position, castAngle.ToWorldVec(), (int) (CollisionGroup.Impassable|CollisionGroup.MobImpassable)), Range, ignore).FirstOrDefault();
if (res.HitEntity != null)
{
resSet.Add(res.HitEntity);

View File

@@ -394,7 +394,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
.EnsureController<BulletController>()
.LinearVelocity = projectileAngle.ToVec() * velocity;
projectile.Transform.LocalRotation = projectileAngle.Theta;
projectile.Transform.LocalRotation = projectileAngle + MathHelper.PiOver2;
}
ammo.SendMessage(this, new BarrelFiredMessage(firedProjectiles));
}

View File

@@ -395,7 +395,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click
var diff = coordinates.ToMapPos(EntityManager) - player.Transform.MapPosition.Position;
if (diff.LengthSquared > 0.01f)
{
player.Transform.LocalRotation = new Angle(diff);
player.Transform.LocalRotation = Angle.FromWorldVec(diff);
}
}
}

View File

@@ -0,0 +1,47 @@
using System;
using Content.Shared.GameObjects.Verbs;
using Robust.Shared.GameObjects;
using Robust.Shared.Maths;
namespace Content.Server
{
// Mapping tools
// Uncomment if you need them, I guess.
/*
[GlobalVerb]
public sealed class HardRotateCcwVerb : GlobalVerb
{
public override bool RequireInteractionRange => false;
public override void GetData(IEntity user, IEntity target, VerbData data)
{
data.Visibility = VerbVisibility.Visible;
data.Text = "Rotate CCW";
data.IconTexture = "/Textures/Interface/VerbIcons/rotate_ccw.svg.96dpi.png";
}
public override void Activate(IEntity user, IEntity target)
{
target.Transform.LocalRotation += Math.PI / 2;
}
}
[GlobalVerb]
public sealed class HardRotateCwVerb : GlobalVerb
{
public override bool RequireInteractionRange => false;
public override void GetData(IEntity user, IEntity target, VerbData data)
{
data.Visibility = VerbVisibility.Visible;
data.Text = "Rotate CW";
data.IconTexture = "/Textures/Interface/VerbIcons/rotate_cw.svg.96dpi.png";
}
public override void Activate(IEntity user, IEntity target)
{
target.Transform.LocalRotation -= Math.PI / 2;
}
}*/
}

View File

@@ -83,7 +83,7 @@ namespace Content.Server.Throw
if (ActionBlockerSystem.CanChangeDirection(throwSourceEnt))
{
throwSourceEnt.Transform.LocalRotation = angle.GetCardinalDir().ToAngle();
throwSourceEnt.Transform.LocalRotation = (angle + MathHelper.PiOver2).GetCardinalDir().ToAngle();
}
}
@@ -112,7 +112,7 @@ namespace Content.Server.Throw
/// <summary>
/// Throw an entity at the position of <paramref name="targetLoc"/> from <paramref name="sourceLoc"/>,
/// without overshooting.
/// </summary>
/// </summary>cl
/// <param name="thrownEnt">The entity to throw.</param>
/// <param name="throwForceMax">
/// The MAXIMUM force to throw the entity with.