(9d5753aa6) Added Daedalic to the credits
This commit is contained in:
@@ -121,90 +121,7 @@ namespace Barotrauma
|
|||||||
MainLimb.PullJointWorldAnchorB = Collider.SimPosition;
|
MainLimb.PullJointWorldAnchorB = Collider.SimPosition;
|
||||||
MainLimb.PullJointEnabled = true;
|
MainLimb.PullJointEnabled = true;
|
||||||
}
|
}
|
||||||
character.SelectedConstruction = character.MemState[0].SelectedItem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (character.MemState[0].Animation == AnimController.Animation.CPR)
|
|
||||||
{
|
|
||||||
character.AnimController.Anim = AnimController.Animation.CPR;
|
|
||||||
}
|
|
||||||
else if (character.AnimController.Anim == AnimController.Animation.CPR)
|
|
||||||
{
|
|
||||||
character.AnimController.Anim = AnimController.Animation.None;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2 newVelocity = Collider.LinearVelocity;
|
|
||||||
Vector2 newPosition = Collider.SimPosition;
|
|
||||||
float newRotation = Collider.Rotation;
|
|
||||||
float newAngularVelocity = Collider.AngularVelocity;
|
|
||||||
Collider.CorrectPosition(character.MemState, out newPosition, out newVelocity, out newRotation, out newAngularVelocity);
|
|
||||||
|
|
||||||
newVelocity = newVelocity.ClampLength(100.0f);
|
|
||||||
if (!MathUtils.IsValid(newVelocity)) { newVelocity = Vector2.Zero; }
|
|
||||||
overrideTargetMovement = newVelocity.LengthSquared() > 0.01f ? newVelocity : Vector2.Zero;
|
|
||||||
|
|
||||||
Collider.LinearVelocity = newVelocity;
|
|
||||||
Collider.AngularVelocity = newAngularVelocity;
|
|
||||||
|
|
||||||
float distSqrd = Vector2.DistanceSquared(newPosition, Collider.SimPosition);
|
|
||||||
float errorTolerance = character.AllowInput ? 0.01f : 0.2f;
|
|
||||||
if (distSqrd > errorTolerance)
|
|
||||||
{
|
|
||||||
if (distSqrd > 10.0f || !character.AllowInput)
|
|
||||||
{
|
|
||||||
Collider.TargetRotation = newRotation;
|
|
||||||
SetPosition(newPosition, lerp: distSqrd < 5.0f, ignorePlatforms: false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Collider.TargetRotation = newRotation;
|
|
||||||
Collider.TargetPosition = newPosition;
|
|
||||||
Collider.MoveToTargetPosition(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//unconscious/dead characters can't correct their position using AnimController movement
|
|
||||||
// -> we need to correct it manually
|
|
||||||
if (!character.AllowInput)
|
|
||||||
{
|
|
||||||
float mainLimbDistSqrd = Vector2.DistanceSquared(MainLimb.PullJointWorldAnchorA, Collider.SimPosition);
|
|
||||||
float mainLimbErrorTolerance = 0.1f;
|
|
||||||
//if the main limb is roughly at the correct position and the collider isn't moving (much at least),
|
|
||||||
//don't attempt to correct the position.
|
|
||||||
if (mainLimbDistSqrd > mainLimbErrorTolerance || Collider.LinearVelocity.LengthSquared() > 0.05f)
|
|
||||||
{
|
|
||||||
MainLimb.PullJointWorldAnchorB = Collider.SimPosition;
|
|
||||||
MainLimb.PullJointEnabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
character.MemLocalState.Clear();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//remove states with a timestamp (there may still timestamp-based states
|
|
||||||
//in the list if the controlled character switches from timestamp-based interpolation to ID-based)
|
|
||||||
character.MemState.RemoveAll(m => m.Timestamp > 0.0f);
|
|
||||||
|
|
||||||
for (int i = 0; i < character.MemLocalState.Count; i++)
|
|
||||||
{
|
|
||||||
if (character.Submarine == null)
|
|
||||||
{
|
|
||||||
//transform in-sub coordinates to outside coordinates
|
|
||||||
if (character.MemLocalState[i].Position.Y > lowestSubPos)
|
|
||||||
{
|
|
||||||
character.MemLocalState[i].TransformInToOutside();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (currentHull?.Submarine != null)
|
|
||||||
{
|
|
||||||
//transform outside coordinates to in-sub coordinates
|
|
||||||
if (character.MemLocalState[i].Position.Y < lowestSubPos)
|
|
||||||
{
|
|
||||||
character.MemLocalState[i].TransformOutToInside(currentHull.Submarine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
character.MemLocalState.Clear();
|
character.MemLocalState.Clear();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,12 +75,39 @@ namespace Barotrauma
|
|||||||
public CrewManager(XElement element, bool isSinglePlayer)
|
public CrewManager(XElement element, bool isSinglePlayer)
|
||||||
: this(isSinglePlayer)
|
: this(isSinglePlayer)
|
||||||
{
|
{
|
||||||
if (!isSinglePlayer)
|
if (GameMain.Client != null)
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError("Cannot add messages to single player chat box in multiplayer mode!\n" + Environment.StackTrace);
|
//let the server create random conversations in MP
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(text)) { return; }
|
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
|
||||||
|
c.AIController is HumanAIController &&
|
||||||
|
!c.IsDead &&
|
||||||
|
c.SpeechImpediment <= 100.0f);
|
||||||
|
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddCharacter(Character character)
|
||||||
|
{
|
||||||
|
if (character.Removed)
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Tried to add a removed character to CrewManager!\n" + Environment.StackTrace);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (character.IsDead)
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Tried to add a dead character to CrewManager!\n" + Environment.StackTrace);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!characters.Contains(character)) characters.Add(character);
|
||||||
|
if (!characterInfos.Contains(character.Info))
|
||||||
|
{
|
||||||
|
characterInfos.Add(character.Info);
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateCharacterFrame(character, characterListBox.Content);
|
||||||
|
characterListBox.Content.RectTransform.SortChildren((c1, c2) => { return c2.NonScaledSize.X - c1.NonScaledSize.X; });
|
||||||
|
|
||||||
var characterInfo = new CharacterInfo(subElement);
|
var characterInfo = new CharacterInfo(subElement);
|
||||||
characterInfos.Add(characterInfo);
|
characterInfos.Add(characterInfo);
|
||||||
@@ -242,27 +269,24 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public IEnumerable<Character> GetCharacters()
|
public IEnumerable<Character> GetCharacters()
|
||||||
{
|
{
|
||||||
if (character?.Inventory == null) return null;
|
if (characterInfos.Contains(characterInfo))
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Tried to add the same character info to CrewManager twice.\n" + Environment.StackTrace);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var radioItem = character.Inventory.Items.FirstOrDefault(it => it != null && it.GetComponent<WifiComponent>() != null);
|
characterInfos.Add(characterInfo);
|
||||||
if (radioItem == null) return null;
|
|
||||||
if (requireEquipped && !character.HasEquippedItem(radioItem)) return null;
|
|
||||||
|
|
||||||
return radioItem.GetComponent<WifiComponent>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<CharacterInfo> GetCharacterInfos()
|
public IEnumerable<CharacterInfo> GetCharacterInfos()
|
||||||
{
|
{
|
||||||
if (GameMain.Client != null)
|
if (character == null)
|
||||||
{
|
{
|
||||||
//let the server create random conversations in MP
|
DebugConsole.ThrowError("Tried to remove a null character from CrewManager.\n" + Environment.StackTrace);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
|
characters.Remove(character);
|
||||||
c.AIController is HumanAIController &&
|
if (removeInfo) characterInfos.Remove(character.Info);
|
||||||
!c.IsDead &&
|
|
||||||
c.SpeechImpediment <= 100.0f);
|
|
||||||
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCharacter(Character character)
|
public void AddCharacter(Character character)
|
||||||
@@ -636,9 +660,42 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
characterListBox.BarScroll = roundedPos;
|
characterListBox.BarScroll = roundedPos;
|
||||||
}
|
}
|
||||||
soundIcon.Visible = !muted && !mutedLocally;
|
|
||||||
soundIconDisabled.Visible = muted || mutedLocally;
|
var toggleWrongOrderBtn = new GUIButton(new RectTransform(new Point((int)(30 * GUI.Scale), wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
|
||||||
soundIconDisabled.ToolTip = TextManager.Get(mutedLocally ? "MutedLocally" : "MutedGlobally");
|
"", style: "UIToggleButton")
|
||||||
|
{
|
||||||
|
UserData = "togglewrongorder",
|
||||||
|
CanBeFocused = false
|
||||||
|
};
|
||||||
|
|
||||||
|
wrongOrderList.RectTransform.NonScaledSize = new Point(
|
||||||
|
wrongOrderList.Content.Children.Sum(c => c.Rect.Width + wrongOrderList.Spacing),
|
||||||
|
wrongOrderList.RectTransform.NonScaledSize.Y);
|
||||||
|
wrongOrderList.RectTransform.SetAsLastChild();
|
||||||
|
|
||||||
|
new GUIFrame(new RectTransform(new Point(
|
||||||
|
wrongOrderList.Rect.Width - toggleWrongOrderBtn.Rect.Width - wrongOrderList.Spacing * 2,
|
||||||
|
wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
|
||||||
|
style: null)
|
||||||
|
{
|
||||||
|
CanBeFocused = false
|
||||||
|
};
|
||||||
|
|
||||||
|
//scale to fit the content
|
||||||
|
orderButtonFrame.RectTransform.NonScaledSize = new Point(
|
||||||
|
orderButtonFrame.Children.Sum(c => c.Rect.Width + orderButtonFrame.AbsoluteSpacing),
|
||||||
|
orderButtonFrame.RectTransform.NonScaledSize.Y);
|
||||||
|
|
||||||
|
frame.RectTransform.NonScaledSize = new Point(
|
||||||
|
characterInfoWidth + spacing + (orderButtonFrame.Rect.Width - wrongOrderList.Rect.Width),
|
||||||
|
frame.RectTransform.NonScaledSize.Y);
|
||||||
|
|
||||||
|
characterListBox.RectTransform.NonScaledSize = new Point(
|
||||||
|
characterListBox.Content.Children.Max(c => c.Rect.Width) + wrongOrderList.Rect.Width,
|
||||||
|
characterListBox.RectTransform.NonScaledSize.Y);
|
||||||
|
characterListBox.Content.RectTransform.NonScaledSize = characterListBox.RectTransform.NonScaledSize;
|
||||||
|
characterListBox.UpdateScrollBarSize();
|
||||||
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<object> KillCharacterAnim(GUIComponent component)
|
private IEnumerable<object> KillCharacterAnim(GUIComponent component)
|
||||||
@@ -840,19 +897,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//only one target (or an order with no particular targets), just show options
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
orderTargetFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.2f + order.Options.Length * 0.1f, 0.18f), GUI.Canvas)
|
|
||||||
{ AbsoluteOffset = new Point(orderButton.Rect.Center.X, orderButton.Rect.Bottom) },
|
|
||||||
isHorizontal: true, childAnchor: Anchor.BottomLeft)
|
|
||||||
{
|
|
||||||
UserData = character,
|
|
||||||
Stretch = true
|
|
||||||
};
|
|
||||||
//line connecting the order button to the option buttons
|
|
||||||
//TODO: sprite
|
|
||||||
new GUIFrame(new RectTransform(new Vector2(0.5f, 1.0f), orderTargetFrame.RectTransform), style: null);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create the UI panel that's used to select the target and options for a given order
|
/// Create the UI panel that's used to select the target and options for a given order
|
||||||
|
|||||||
@@ -706,6 +706,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private GUILayoutGroup subPreviewContainer;
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
private GUIButton loadGameButton;
|
private GUIButton loadGameButton;
|
||||||
|
|
||||||
public Action<Submarine, string, string> StartNewGame;
|
public Action<Submarine, string, string> StartNewGame;
|
||||||
|
|||||||
@@ -231,6 +231,32 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
||||||
|
#endif
|
||||||
|
abandon = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
||||||
|
// TODO: use the collider size/reach?
|
||||||
|
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
||||||
|
{
|
||||||
|
HumanAIController.AnimController.Crouching = true;
|
||||||
|
}
|
||||||
|
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
||||||
|
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach * 1.5f;
|
||||||
|
if (canOperate)
|
||||||
|
{
|
||||||
|
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
||||||
|
}
|
||||||
|
if (subObjectives.Any()) { return; }
|
||||||
|
var repairTool = weldingTool.GetComponent<RepairTool>();
|
||||||
|
if (repairTool == null)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
||||||
#endif
|
#endif
|
||||||
abandon = true;
|
abandon = true;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -89,6 +89,21 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
if (objectiveManager.CurrentObjective == this)
|
||||||
|
{
|
||||||
|
if (randomTimer > 0)
|
||||||
|
{
|
||||||
|
randomTimer -= deltaTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetRandom();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool IsCompleted() => false;
|
public override bool IsCompleted() => false;
|
||||||
public override bool CanBeCompleted => true;
|
public override bool CanBeCompleted => true;
|
||||||
|
|
||||||
|
|||||||
@@ -813,6 +813,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
isCompleted = true;
|
isCompleted = true;
|
||||||
}
|
}
|
||||||
|
if (component.AIOperate(deltaTime, character, this))
|
||||||
|
{
|
||||||
|
isCompleted = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1145,24 +1145,6 @@ namespace Barotrauma
|
|||||||
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
|
||||||
{
|
|
||||||
//apply some smoothing to the cursor positions of remote players when playing as a client
|
|
||||||
//to make aiming look a little less choppy
|
|
||||||
Vector2 smoothedCursorDiff = cursorPosition - SmoothedCursorPosition;
|
|
||||||
smoothedCursorDiff = NetConfig.InterpolateCursorPositionError(smoothedCursorDiff);
|
|
||||||
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
|
||||||
{
|
|
||||||
//apply some smoothing to the cursor positions of remote players when playing as a client
|
|
||||||
//to make aiming look a little less choppy
|
|
||||||
Vector2 smoothedCursorDiff = cursorPosition - SmoothedCursorPosition;
|
|
||||||
smoothedCursorDiff = NetConfig.InterpolateCursorPositionError(smoothedCursorDiff);
|
|
||||||
SmoothedCursorPosition = cursorPosition - smoothedCursorDiff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
if (!(this is AICharacter) || Controlled == this || IsRemotePlayer)
|
||||||
{
|
{
|
||||||
if (speedMultipliers.Count == 0) return 1f;
|
if (speedMultipliers.Count == 0) return 1f;
|
||||||
|
|||||||
@@ -772,6 +772,25 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
|
{
|
||||||
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
Entity.Spawner.AddToRemoveQueue(targetItem);
|
||||||
|
MoveInputQueue();
|
||||||
|
PutItemsToLinkedContainer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (outputContainer.Inventory.Items.All(i => i != null))
|
||||||
|
{
|
||||||
|
targetItem.Drop(dropper: null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputContainer.Inventory.TryPutItem(targetItem, user: null, createNetworkEvent: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (targetItem.Prefab.DeconstructItems.Any())
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
{
|
{
|
||||||
inputContainer.Inventory.RemoveItem(targetItem);
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
|||||||
@@ -144,17 +144,6 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector2 SteeringInput
|
|
||||||
{
|
|
||||||
get { return steeringInput; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (!MathUtils.IsValid(value)) return;
|
|
||||||
steeringInput.X = MathHelper.Clamp(value.X, -100.0f, 100.0f);
|
|
||||||
steeringInput.Y = MathHelper.Clamp(value.Y, -100.0f, 100.0f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public SteeringPath SteeringPath
|
public SteeringPath SteeringPath
|
||||||
{
|
{
|
||||||
if (!CanBeSelected) return false;
|
if (!CanBeSelected) return false;
|
||||||
@@ -175,6 +164,12 @@ namespace Barotrauma.Items.Components
|
|||||||
set { posToMaintain = value; }
|
set { posToMaintain = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector2? PosToMaintain
|
||||||
|
{
|
||||||
|
get { return posToMaintain; }
|
||||||
|
set { posToMaintain = value; }
|
||||||
|
}
|
||||||
|
|
||||||
struct ObstacleDebugInfo
|
struct ObstacleDebugInfo
|
||||||
{
|
{
|
||||||
public Vector2 Point1;
|
public Vector2 Point1;
|
||||||
|
|||||||
@@ -1139,70 +1139,6 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateTransform()
|
|
||||||
{
|
|
||||||
Submarine prevSub = Submarine;
|
|
||||||
|
|
||||||
FindHull();
|
|
||||||
|
|
||||||
if (Submarine == null && prevSub != null)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
else if (Submarine != null && prevSub == null)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
else if (Submarine != null && prevSub != null && Submarine != prevSub)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition + prevSub.SimPosition - Submarine.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition);
|
|
||||||
rect.X = (int)(displayPos.X - rect.Width / 2.0f);
|
|
||||||
rect.Y = (int)(displayPos.Y + rect.Height / 2.0f);
|
|
||||||
|
|
||||||
if (Math.Abs(body.LinearVelocity.X) > NetConfig.MaxPhysicsBodyVelocity ||
|
|
||||||
Math.Abs(body.LinearVelocity.Y) > NetConfig.MaxPhysicsBodyVelocity)
|
|
||||||
{
|
|
||||||
body.LinearVelocity = new Vector2(
|
|
||||||
MathHelper.Clamp(body.LinearVelocity.X, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity),
|
|
||||||
MathHelper.Clamp(body.LinearVelocity.Y, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateTransform()
|
|
||||||
{
|
|
||||||
Submarine prevSub = Submarine;
|
|
||||||
|
|
||||||
FindHull();
|
|
||||||
|
|
||||||
if (Submarine == null && prevSub != null)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
else if (Submarine != null && prevSub == null)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
else if (Submarine != null && prevSub != null && Submarine != prevSub)
|
|
||||||
{
|
|
||||||
body.SetTransform(body.SimPosition + prevSub.SimPosition - Submarine.SimPosition, body.Rotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition);
|
|
||||||
rect.X = (int)(displayPos.X - rect.Width / 2.0f);
|
|
||||||
rect.Y = (int)(displayPos.Y + rect.Height / 2.0f);
|
|
||||||
|
|
||||||
if (Math.Abs(body.LinearVelocity.X) > NetConfig.MaxPhysicsBodyVelocity ||
|
|
||||||
Math.Abs(body.LinearVelocity.Y) > NetConfig.MaxPhysicsBodyVelocity)
|
|
||||||
{
|
|
||||||
body.LinearVelocity = new Vector2(
|
|
||||||
MathHelper.Clamp(body.LinearVelocity.X, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity),
|
|
||||||
MathHelper.Clamp(body.LinearVelocity.Y, -NetConfig.MaxPhysicsBodyVelocity, NetConfig.MaxPhysicsBodyVelocity));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateTransform()
|
public void UpdateTransform()
|
||||||
{
|
{
|
||||||
Submarine prevSub = Submarine;
|
Submarine prevSub = Submarine;
|
||||||
|
|||||||
@@ -286,6 +286,25 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string DisplayName
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string roomName;
|
||||||
|
[Editable, Serialize("", true, translationTextTag: "RoomName.")]
|
||||||
|
public string RoomName
|
||||||
|
{
|
||||||
|
get { return roomName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (roomName == value) { return; }
|
||||||
|
roomName = value;
|
||||||
|
DisplayName = TextManager.Get(roomName, returnNull: true) ?? roomName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override Rectangle Rect
|
public override Rectangle Rect
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|||||||
Reference in New Issue
Block a user