2f107db...5202af9

This commit is contained in:
Joonas Rikkonen
2019-03-18 21:42:26 +02:00
parent 58c92888b7
commit 044fd3344b
395 changed files with 27417 additions and 19754 deletions
@@ -189,6 +189,7 @@ namespace Barotrauma.Items.Components
#if CLIENT
if (lightComponent != null)
{
lightComponent.Parent = null;
lightComponent.Rotation = rotation;
lightComponent.Light.Rotation = -rotation;
}
@@ -258,7 +259,9 @@ namespace Barotrauma.Items.Components
private bool TryLaunch(float deltaTime, Character character = null)
{
#if CLIENT
if (GameMain.Client != null) return false;
#endif
if (reload > 0.0f) return false;
@@ -313,27 +316,32 @@ namespace Barotrauma.Items.Components
battery.Charge -= takePower / 3600.0f;
#if SERVER
if (GameMain.Server != null)
{
battery.Item.CreateServerEvent(battery);
}
#endif
}
Launch(projectiles[0].Item, character);
#if SERVER
if (character != null)
{
string msg = character.LogName + " launched " + item.Name + " (projectile: " + projectiles[0].Item.Name;
if (projectiles[0].Item.ContainedItems == null || projectiles[0].Item.ContainedItems.All(i => i == null))
var containedItems = projectiles[0].Item.ContainedItems;
if (containedItems == null || !containedItems.Any())
{
msg += ")";
}
else
{
msg += ", contained items: " + string.Join(", ", Array.FindAll(projectiles[0].Item.ContainedItems, i => i != null).Select(i => i.Name)) + ")";
msg += ", contained items: " + string.Join(", ", containedItems.Select(i => i.Name)) + ")";
}
GameServer.Log(msg, ServerLog.MessageType.ItemInteraction);
}
#endif
return true;
}
@@ -359,10 +367,10 @@ namespace Barotrauma.Items.Components
}
if (projectile.Container != null) projectile.Container.RemoveContained(projectile);
if (GameMain.Server != null)
if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsServer)
{
GameMain.Server.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ComponentState, item.components.IndexOf(this), projectile });
GameMain.NetworkMember.CreateEntityEvent(item, new object[] { NetEntityEvent.Type.ComponentState, item.GetComponentIndex(this), projectile });
}
ApplyStatusEffects(ActionType.OnUse, 1.0f, user: user);
@@ -415,18 +423,9 @@ namespace Barotrauma.Items.Components
if (containedItems != null)
{
var container = projectileContainer.GetComponent<ItemContainer>();
if (containedItems != null) maxProjectileCount += container.Capacity;
int projectiles = 0;
for (int i = 0; i < containedItems.Length; i++)
{
if (containedItems[i].Condition > 0.0f)
{
projectiles++;
}
}
maxProjectileCount += container.Capacity;
int projectiles = containedItems.Count(it => it.Condition > 0.0f);
usableProjectileCount += projectiles;
}
}
@@ -465,14 +464,21 @@ namespace Barotrauma.Items.Components
foreach (Character enemy in Character.CharacterList)
{
//ignore humans and characters that are inside the sub
if (enemy.IsDead || enemy.SpeciesName == "human" || enemy.AnimController.CurrentHull != null) continue;
if (enemy.IsDead|| enemy.AnimController.CurrentHull != null || !enemy.Enabled) { continue; }
if (enemy.SpeciesName == character.SpeciesName && enemy.TeamID == character.TeamID) { continue; }
float dist = Vector2.DistanceSquared(enemy.WorldPosition, item.WorldPosition);
if (dist < closestDist)
{
closestEnemy = enemy;
closestDist = dist;
}
if (dist > closestDist) { continue; }
float angle = -MathUtils.VectorToAngle(enemy.WorldPosition - item.WorldPosition);
float midRotation = (minRotation + maxRotation) / 2.0f;
while (midRotation - angle < -MathHelper.Pi) { angle -= MathHelper.TwoPi; }
while (midRotation - angle > MathHelper.Pi) { angle += MathHelper.TwoPi; }
if (angle < minRotation || angle > maxRotation) { continue; }
closestEnemy = enemy;
closestDist = dist;
}
if (closestEnemy == null) return false;
@@ -486,7 +492,7 @@ namespace Barotrauma.Items.Components
float enemyAngle = MathUtils.VectorToAngle(closestEnemy.WorldPosition - item.WorldPosition);
float turretAngle = -rotation;
if (Math.Abs(MathUtils.GetShortestAngle(enemyAngle, turretAngle)) > 0.1f) return false;
if (Math.Abs(MathUtils.GetShortestAngle(enemyAngle, turretAngle)) > 0.15f) return false;
var pickedBody = Submarine.PickBody(ConvertUnits.ToSimUnits(item.WorldPosition), closestEnemy.SimPosition, null);
if (pickedBody != null && !(pickedBody.UserData is Limb)) return false;
@@ -559,9 +565,9 @@ namespace Barotrauma.Items.Components
var containedItems = projectileContainer.ContainedItems;
if (containedItems == null) return;
for (int i = 0; i < containedItems.Length; i++)
foreach (Item containedItem in containedItems)
{
var projectileComponent = containedItems[i].GetComponent<Projectile>();
var projectileComponent = containedItem.GetComponent<Projectile>();
if (projectileComponent != null)
{
projectiles.Add(projectileComponent);
@@ -570,10 +576,10 @@ namespace Barotrauma.Items.Components
else
{
//check if the contained item is another itemcontainer with projectiles inside it
if (containedItems[i].ContainedItems == null) continue;
for (int j = 0; j < containedItems[i].ContainedItems.Length; j++)
if (containedItem.ContainedItems == null) continue;
foreach (Item subContainedItem in containedItem.ContainedItems)
{
projectileComponent = containedItems[i].ContainedItems[j].GetComponent<Projectile>();
projectileComponent = subContainedItem.GetComponent<Projectile>();
if (projectileComponent != null)
{
projectiles.Add(projectileComponent);
@@ -653,12 +659,9 @@ namespace Barotrauma.Items.Components
break;
case "toggle":
case "toggle_light":
foreach (ItemComponent component in item.components)
if (lightComponent != null)
{
if (component.Parent == this && component is LightComponent lightComponent)
{
lightComponent.IsOn = !lightComponent.IsOn;
}
lightComponent.IsOn = !lightComponent.IsOn;
}
break;
}