From 461547d9494c8efd4c571e9b23ce4338b4134753 Mon Sep 17 00:00:00 2001 From: Regalis Date: Fri, 24 Jul 2015 13:46:22 +0300 Subject: [PATCH] Medical items, improved falldamage, "power on" sounds --- Subsurface/Characters/Character.cs | 9 +++- Subsurface/Characters/Limb.cs | 2 +- Subsurface/Characters/Ragdoll.cs | 12 +++++- Subsurface/Content/Characters/Human/human.xml | 4 +- Subsurface/Content/Items/Medical/med.png | Bin 0 -> 340 bytes Subsurface/Content/Items/Medical/medical.xml | 39 ++++++++++++++++++ Subsurface/Items/Components/ItemComponent.cs | 7 ++++ .../Items/Components/Power/PowerTransfer.cs | 3 +- Subsurface/Items/Components/Power/Powered.cs | 28 ++++++++++--- Subsurface/Items/Item.cs | 6 +++ Subsurface/Subsurface.csproj | 7 ++++ Subsurface_Solution.v12.suo | Bin 455680 -> 464384 bytes 12 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 Subsurface/Content/Items/Medical/med.png create mode 100644 Subsurface/Content/Items/Medical/medical.xml diff --git a/Subsurface/Characters/Character.cs b/Subsurface/Characters/Character.cs index 3fd571a2e..a17bb1466 100644 --- a/Subsurface/Characters/Character.cs +++ b/Subsurface/Characters/Character.cs @@ -172,6 +172,13 @@ namespace Subsurface } } + public float Bleeding + { + get { return bleeding; } + set { bleeding = value; } + } + + //public float Blood //{ // get { return blood; } @@ -575,7 +582,7 @@ namespace Subsurface Body body = Submarine.PickBody(AnimController.limbs[0].SimPosition, mouseSimPos); Structure structure = null; if (body != null) structure = body.UserData as Structure; - if (structure!=null) + if (structure != null) { if (!structure.CastShadow && moveCam) { diff --git a/Subsurface/Characters/Limb.cs b/Subsurface/Characters/Limb.cs index 6c6ce7fcf..bcc33b0bd 100644 --- a/Subsurface/Characters/Limb.cs +++ b/Subsurface/Characters/Limb.cs @@ -184,7 +184,7 @@ namespace Subsurface body.CollidesWith = Physics.CollisionAll & ~Physics.CollisionCharacter & ~Physics.CollisionMisc; } - impactTolerance = ToolBox.GetAttributeFloat(element, "impacttolerance", 20.0f); + impactTolerance = ToolBox.GetAttributeFloat(element, "impacttolerance", 8.0f); body.UserData = this; diff --git a/Subsurface/Characters/Ragdoll.cs b/Subsurface/Characters/Ragdoll.cs index abdc11695..4bd4c68e8 100644 --- a/Subsurface/Characters/Ragdoll.cs +++ b/Subsurface/Characters/Ragdoll.cs @@ -312,7 +312,17 @@ namespace Subsurface private void CalculateImpact(Fixture f1, Fixture f2, Contact contact) { Vector2 normal = contact.Manifold.LocalNormal; - float impact = Vector2.Dot(f1.Body.LinearVelocity, -normal); + + Vector2 avgVelocity = Vector2.Zero; + foreach (Limb limb in limbs) + { + avgVelocity += limb.LinearVelocity; + } + + avgVelocity = avgVelocity / limbs.Count(); + + + float impact = Vector2.Dot((f1.Body.LinearVelocity + avgVelocity)/2.0f, -normal); Limb l = (Limb)f1.Body.UserData; diff --git a/Subsurface/Content/Characters/Human/human.xml b/Subsurface/Content/Characters/Human/human.xml index 84842b744..faae36450 100644 --- a/Subsurface/Content/Characters/Human/human.xml +++ b/Subsurface/Content/Characters/Human/human.xml @@ -76,12 +76,12 @@ - + - + diff --git a/Subsurface/Content/Items/Medical/med.png b/Subsurface/Content/Items/Medical/med.png new file mode 100644 index 0000000000000000000000000000000000000000..6521e2b950e64fd97ebf2886873ac7dfa247c74b GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?3oVGw3ym^DWNq$1fP z$d`ekN|k}3p_zf<=YJsml7XSrfPvvv0t1893ttbvOuc}Wj0|&(H=pBgk65y^^j}31n;oyr-E9Y~{1sWQ zzVK(r+#>aiy}_sQ?V9VN4%ZxJF>aN*;Pbow8`DnNReKYreAI0aJZ2xvobW8?wCv1p ikIrUXxlp+DI>V{lmT0C^AB=&%WbkzLb6Mw<&;$TGSA$ys literal 0 HcmV?d00001 diff --git a/Subsurface/Content/Items/Medical/medical.xml b/Subsurface/Content/Items/Medical/medical.xml new file mode 100644 index 000000000..12e02440f --- /dev/null +++ b/Subsurface/Content/Items/Medical/medical.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Subsurface/Items/Components/ItemComponent.cs b/Subsurface/Items/Components/ItemComponent.cs index a568b8b4d..3645951ac 100644 --- a/Subsurface/Items/Components/ItemComponent.cs +++ b/Subsurface/Items/Components/ItemComponent.cs @@ -90,6 +90,13 @@ namespace Subsurface set { canBeSelected = value; } } + [HasDefaultValue(false, false)] + public bool DeleteOnUse + { + get; + set; + } + public Item Item { get { return item; } diff --git a/Subsurface/Items/Components/Power/PowerTransfer.cs b/Subsurface/Items/Components/Power/PowerTransfer.cs index 537f5abc0..b51c9eaa7 100644 --- a/Subsurface/Items/Components/Power/PowerTransfer.cs +++ b/Subsurface/Items/Components/Power/PowerTransfer.cs @@ -49,8 +49,7 @@ namespace Subsurface.Items.Components { pt.powerLoad += (fullLoad - pt.powerLoad) / inertia; pt.currPowerConsumption += (-fullPower - pt.currPowerConsumption) / inertia; - pt.Item.SendSignal("", - "power", fullPower / Math.Max(fullLoad, 1.0f)); + pt.Item.SendSignal("", "power", fullPower / Math.Max(fullLoad, 1.0f)); if (-pt.currPowerConsumption > pt.powerLoad * 2.0f) pt.item.Condition = 0.0f; } } diff --git a/Subsurface/Items/Components/Power/Powered.cs b/Subsurface/Items/Components/Power/Powered.cs index ada384bd8..236f82daf 100644 --- a/Subsurface/Items/Components/Power/Powered.cs +++ b/Subsurface/Items/Components/Power/Powered.cs @@ -10,15 +10,19 @@ namespace Subsurface.Items.Components //negative values mean that the item is providing power to connected items protected float currPowerConsumption; - //the amount of power available for the item through connected items + //current voltage of the item (load / power) protected float voltage; - //the amount of power required for the item to work + //the minimum voltage required for the item to work protected float minVoltage; //the maximum amount of power the item can draw from connected items protected float powerConsumption; + private bool powerOnSoundPlayed; + + private static Sound powerOnSound; + [Editable, HasDefaultValue(0.5f, true)] public float MinVoltage { @@ -68,14 +72,28 @@ namespace Subsurface.Items.Components public override void Update(float deltaTime, Camera cam) { if (currPowerConsumption == 0.0f) return; - if (voltage > minVoltage) ApplyStatusEffects(ActionType.OnActive, deltaTime); + if (voltage > minVoltage) + { + if (!powerOnSoundPlayed) + { + powerOnSound.Play(1.0f, 600.0f, item.Position); + powerOnSoundPlayed = true; + } + ApplyStatusEffects(ActionType.OnActive, deltaTime); + } + else if (voltage < 0.1f) + { + powerOnSoundPlayed = false; + } } public Powered(Item item, XElement element) : base(item, element) { - //minVoltage = ToolBox.GetAttributeFloat(element, "minvoltage", 10.0f); - //powerConsumption = ToolBox.GetAttributeFloat(element, "powerconsumption", 15.0f); + if (powerOnSound==null) + { + powerOnSound = Sound.Load("Content/Items/Electricity/powerOn.ogg"); + } } } } diff --git a/Subsurface/Items/Item.cs b/Subsurface/Items/Item.cs index 0dc288099..d736ede36 100644 --- a/Subsurface/Items/Item.cs +++ b/Subsurface/Items/Item.cs @@ -796,6 +796,8 @@ namespace Subsurface { if (condition == 0.0f) return; + bool remove = false; + foreach (ItemComponent ic in components) { if (!ic.HasRequiredContainedItems(character == Character.Controlled)) continue; @@ -804,8 +806,12 @@ namespace Subsurface ic.PlaySound(ActionType.OnUse, 1.0f, Position); ic.ApplyStatusEffects(ActionType.OnUse, deltaTime, character); + + if (ic.DeleteOnUse) remove = true; } } + + if (remove) Remove(); } public void SecondaryUse(float deltaTime, Character character = null) diff --git a/Subsurface/Subsurface.csproj b/Subsurface/Subsurface.csproj index 417b836b4..baa86edad 100644 --- a/Subsurface/Subsurface.csproj +++ b/Subsurface/Subsurface.csproj @@ -286,6 +286,13 @@ Designer PreserveNewest + + PreserveNewest + Designer + + + PreserveNewest + PreserveNewest Designer diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index ea8fe93b28a08d9201340d337dec20db86a36ebe..49ca8b7ad6e0e11584385f8d0452f4823d2ce02d 100644 GIT binary patch delta 11887 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