diff --git a/Subsurface/Content/Characters/Endworm/endworm.xml b/Subsurface/Content/Characters/Endworm/endworm.xml index 560794eb7..a63bc2a19 100644 --- a/Subsurface/Content/Characters/Endworm/endworm.xml +++ b/Subsurface/Content/Characters/Endworm/endworm.xml @@ -44,12 +44,12 @@ - + - + diff --git a/Subsurface/Content/Characters/Moloch/moloch.xml b/Subsurface/Content/Characters/Moloch/moloch.xml index aa257707d..d6f774f67 100644 --- a/Subsurface/Content/Characters/Moloch/moloch.xml +++ b/Subsurface/Content/Characters/Moloch/moloch.xml @@ -11,6 +11,7 @@ + diff --git a/Subsurface/Content/Characters/Watcher/watcher.png b/Subsurface/Content/Characters/Watcher/watcher.png index 4046c480e..d20e99f89 100644 Binary files a/Subsurface/Content/Characters/Watcher/watcher.png and b/Subsurface/Content/Characters/Watcher/watcher.png differ diff --git a/Subsurface/Source/Characters/AI/EnemyAIController.cs b/Subsurface/Source/Characters/AI/EnemyAIController.cs index b25c80a05..d79b4b2fc 100644 --- a/Subsurface/Source/Characters/AI/EnemyAIController.cs +++ b/Subsurface/Source/Characters/AI/EnemyAIController.cs @@ -344,6 +344,23 @@ namespace Barotrauma steeringManager.SteeringSeek(attackPosition + (limb.SimPosition-SimPosition), 5.0f); + break; + case AttackType.Hit: + damageTarget = (wallAttackPos != Vector2.Zero && targetEntity != null) ? targetEntity : selectedAiTarget.Entity as IDamageable; + + if (damageTarget == null) + { + attackTimer = limb.attack.Duration; + break; + } + + if (ConvertUnits.ToDisplayUnits(Vector2.Distance(limb.SimPosition, attackPosition)) < limb.attack.Range) + { + attackTimer += deltaTime; + limb.body.ApplyForce(limb.Mass * limb.attack.Force * Vector2.Normalize(attackPosition - limb.SimPosition)); + } + + steeringManager.SteeringSeek(attackPosition + (limb.SimPosition-SimPosition), 5.0f); break; default: attackTimer = limb.attack.Duration; diff --git a/Subsurface/Source/Characters/Attack.cs b/Subsurface/Source/Characters/Attack.cs index 530981cc7..489dae066 100644 --- a/Subsurface/Source/Characters/Attack.cs +++ b/Subsurface/Source/Characters/Attack.cs @@ -15,7 +15,7 @@ namespace Barotrauma public enum AttackType { - None, PinchCW, PinchCCW + None, PinchCW, PinchCCW, Hit } struct AttackResult @@ -47,6 +47,8 @@ namespace Barotrauma private readonly float damage; private readonly float bleedingDamage; + public readonly float Force; + private Sound sound; private ParticleEmitterPrefab particleEmitterPrefab; @@ -101,6 +103,8 @@ namespace Barotrauma structureDamage = ToolBox.GetAttributeFloat(element, "structuredamage", 0.0f); bleedingDamage = ToolBox.GetAttributeFloat(element, "bleedingdamage", 0.0f); + Force = ToolBox.GetAttributeFloat(element,"force", 0.0f); + Stun = ToolBox.GetAttributeFloat(element, "stun", 0.0f); string soundPath = ToolBox.GetAttributeString(element, "sound", ""); diff --git a/Subsurface/Source/Items/Components/Label.cs b/Subsurface/Source/Items/Components/Label.cs deleted file mode 100644 index 1bd5363ab..000000000 --- a/Subsurface/Source/Items/Components/Label.cs +++ /dev/null @@ -1,106 +0,0 @@ -//using Microsoft.Xna.Framework; -//using Microsoft.Xna.Framework.Graphics; -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using System.Xml.Linq; - -//namespace Subsurface.Items.Components -//{ -// class Label : ItemComponent -// { -// GUITextBox textBox; - -// private string text; - -// [HasDefaultValue("", true)] -// public string Text -// { -// get { return text; } -// set -// { -// text = value; -// } -// } - -// public Label(Item item, XElement element) -// : base(item, element) -// { - -// } - -// public override bool Select(Character Character) -// { -// if (textBox == null) -// { -// textBox = new GUITextBox(Rectangle.Empty, GUI.Style, GuiFrame); -// textBox.Wrap = true; -// textBox.OnTextChanged = TextChanged; -// textBox.LimitText = true; - -// GUIButton button = new GUIButton(new Rectangle(0,0,100,15), "OK", null, Alignment.BottomRight, GUI.Style, GuiFrame); -// button.OnClicked = Close; -// } - -// textBox.Text = text; - -// textBox.Select(); - -// return base.Select(Character); -// } - -// public override void DrawHUD(SpriteBatch spriteBatch, Character Character) -// { -// //isActive = true; -// GuiFrame.Update((float)Physics.step); -// GuiFrame.Draw(spriteBatch); - -// //int width = 300, height = 300; -// //int x = Game1.GraphicsWidth / 2 - width / 2; -// //int y = Game1.GraphicsHeight / 2 - height / 2 - 50; - -// //GUI.DrawRectangle(spriteBatch, new Rectangle(x, y, width, height), Color.Black, true); -// if (!textBox.Selected) Character.SelectedConstruction = null; -// } - -// private bool TextChanged(GUITextBox textBox, string text) -// { -// this.text = text; -// item.NewComponentEvent(this, true); - -// return true; -// } - -// private bool Close(GUIButton button, object obj) -// { -// textBox.Deselect(); - -// return true; -// } - -// public override void FillNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetOutgoingMessage message) -// { -// message.Write(Text); -// } - -// public override void ReadNetworkData(Networking.NetworkEventType type, Lidgren.Network.NetIncomingMessage message) -// { -// string newText = ""; -// try -// { -// newText = message.ReadString(); -// } - -// catch (Exception e) -// { -//#if DEBUG -// DebugConsole.ThrowError("invalid network message", e); -//#endif -// return; -// } - -// Text = newText; -// } -// } -//}