diff --git a/Backup/ChainingPropertyDescriptor.cs b/Backup/ChainingPropertyDescriptor.cs
deleted file mode 100644
index 997cfb27c..000000000
--- a/Backup/ChainingPropertyDescriptor.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace Hyper.ComponentModel {
- public abstract class ChainingPropertyDescriptor : PropertyDescriptor {
- private readonly PropertyDescriptor _root;
- protected PropertyDescriptor Root { get { return _root; } }
- protected ChainingPropertyDescriptor(PropertyDescriptor root)
- : base(root) {
- _root = root;
- }
- public override void AddValueChanged(object component, EventHandler handler) {
- Root.AddValueChanged(component, handler);
- }
- public override AttributeCollection Attributes {
- get {
- return Root.Attributes;
- }
- }
- public override bool CanResetValue(object component) {
- return Root.CanResetValue(component);
- }
- public override string Category {
- get {
- return Root.Category;
- }
- }
- public override Type ComponentType {
- get { return Root.ComponentType; }
- }
- public override TypeConverter Converter {
- get {
- return Root.Converter;
- }
- }
- public override string Description {
- get {
- return Root.Description;
- }
- }
- public override bool DesignTimeOnly {
- get {
- return Root.DesignTimeOnly;
- }
- }
- public override string DisplayName {
- get {
- return Root.DisplayName;
- }
- }
- public override bool Equals(object obj) {
- return Root.Equals(obj);
- }
- public override PropertyDescriptorCollection GetChildProperties(object instance, Attribute[] filter) {
- return Root.GetChildProperties(instance, filter);
- }
- public override object GetEditor(Type editorBaseType) {
- return Root.GetEditor(editorBaseType);
- }
- public override int GetHashCode() {
- return Root.GetHashCode();
- }
- public override object GetValue(object component) {
- return Root.GetValue(component);
- }
- public override bool IsBrowsable {
- get {
- return Root.IsBrowsable;
- }
- }
- public override bool IsLocalizable {
- get {
- return Root.IsLocalizable;
- }
- }
- public override bool IsReadOnly {
- get { return Root.IsReadOnly; }
- }
- public override string Name {
- get {
- return Root.Name;
- }
- }
- public override Type PropertyType {
- get { return Root.PropertyType; }
- }
- public override void RemoveValueChanged(object component, EventHandler handler) {
- Root.RemoveValueChanged(component, handler);
- }
- public override void ResetValue(object component) {
- Root.ResetValue(component);
- }
- public override void SetValue(object component, object value) {
- Root.SetValue(component, value);
- }
- public override bool ShouldSerializeValue(object component) {
- return Root.ShouldSerializeValue(component);
- }
- public override bool SupportsChangeEvents {
- get {
- return Root.SupportsChangeEvents;
- }
- }
- public override string ToString() {
- return Root.ToString();
- }
- }
-}
diff --git a/Backup/HyperPropertyDescriptor.csproj b/Backup/HyperPropertyDescriptor.csproj
deleted file mode 100644
index cf60a1d62..000000000
--- a/Backup/HyperPropertyDescriptor.csproj
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
- Debug
- AnyCPU
- 8.0.50727
- 2.0
- {954502B1-7282-417D-9310-3332962A1CA1}
- Library
- Properties
- HyperPropertyDescriptor
- HyperPropertyDescriptor
-
-
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Backup/HyperPropertyDescriptor.csproj.user b/Backup/HyperPropertyDescriptor.csproj.user
deleted file mode 100644
index 6a34e7dcd..000000000
--- a/Backup/HyperPropertyDescriptor.csproj.user
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- ShowAllFiles
-
-
\ No newline at end of file
diff --git a/Backup/HyperTypeDescriptionProvider.cs b/Backup/HyperTypeDescriptionProvider.cs
deleted file mode 100644
index f21c47d85..000000000
--- a/Backup/HyperTypeDescriptionProvider.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.ComponentModel;
-using System.Security.Permissions;
-
-/* Change history:
- * 20 Apr 2007 Marc Gravell Rollback dictionary on error;
- * Assert ReflectionPermission for main creation
- * (thanks/credit to Josh Smith for feedback/hints)
- */
-
-namespace Hyper.ComponentModel {
- public sealed class HyperTypeDescriptionProvider : TypeDescriptionProvider {
- public static void Add(Type type) {
- TypeDescriptionProvider parent = TypeDescriptor.GetProvider(type);
- TypeDescriptor.AddProvider(new HyperTypeDescriptionProvider(parent), type);
- }
- public HyperTypeDescriptionProvider() : this(typeof(object)) { }
- public HyperTypeDescriptionProvider(Type type) : this(TypeDescriptor.GetProvider(type)) { }
- public HyperTypeDescriptionProvider(TypeDescriptionProvider parent) : base(parent) { }
- public static void Clear(Type type) {
- lock (descriptors) {
- descriptors.Remove(type);
- }
- }
- public static void Clear() {
- lock (descriptors) {
- descriptors.Clear();
- }
- }
- private static readonly Dictionary descriptors = new Dictionary();
- public sealed override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) {
- ICustomTypeDescriptor descriptor;
- lock (descriptors) {
- if (!descriptors.TryGetValue(objectType, out descriptor)) {
- try
- {
- descriptor = BuildDescriptor(objectType);
- }
- catch
- {
- return base.GetTypeDescriptor(objectType, instance);
- }
- }
- return descriptor;
- }
- }
- [ReflectionPermission( SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]
- private ICustomTypeDescriptor BuildDescriptor(Type objectType)
- {
- // NOTE: "descriptors" already locked here
-
- // get the parent descriptor and add to the dictionary so that
- // building the new descriptor will use the base rather than recursing
- ICustomTypeDescriptor descriptor = base.GetTypeDescriptor(objectType, null);
- descriptors.Add(objectType, descriptor);
- try
- {
- // build a new descriptor from this, and replace the lookup
- descriptor = new HyperTypeDescriptor(descriptor);
- descriptors[objectType] = descriptor;
- return descriptor;
- }
- catch
- { // rollback and throw
- // (perhaps because the specific caller lacked permissions;
- // another caller may be successful)
- descriptors.Remove(objectType);
- throw;
- }
- }
- }
-}
diff --git a/Backup/HyperTypeDescriptor.cs b/Backup/HyperTypeDescriptor.cs
deleted file mode 100644
index d47858bca..000000000
--- a/Backup/HyperTypeDescriptor.cs
+++ /dev/null
@@ -1,218 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Reflection.Emit;
-using System.Reflection;
-using System.Threading;
-using System.Collections.Generic;
-using System.Diagnostics;
-
-/* Change history:
- * 20 Apr 2007 Marc Gravell Renamed
- */
-
-namespace Hyper.ComponentModel {
- sealed class HyperTypeDescriptor : CustomTypeDescriptor {
- private readonly PropertyDescriptorCollection propertyCollections;
- static readonly Dictionary properties = new Dictionary();
- internal HyperTypeDescriptor(ICustomTypeDescriptor parent)
- : base(parent) {
- propertyCollections = WrapProperties(parent.GetProperties());
- }
- public sealed override PropertyDescriptorCollection GetProperties(Attribute[] attributes) {
- return propertyCollections;
- }
- public sealed override PropertyDescriptorCollection GetProperties() {
- return propertyCollections;
- }
- private static PropertyDescriptorCollection WrapProperties(PropertyDescriptorCollection oldProps) {
- PropertyDescriptor[] newProps = new PropertyDescriptor[oldProps.Count];
- int index = 0;
- bool changed = false;
- // HACK: how to identify reflection, given that the class is internal...
- Type wrapMe = Assembly.GetAssembly(typeof(PropertyDescriptor)).GetType("System.ComponentModel.ReflectPropertyDescriptor");
- foreach (PropertyDescriptor oldProp in oldProps) {
- PropertyDescriptor pd = oldProp;
- // if it looks like reflection, try to create a bespoke descriptor
- if (ReferenceEquals(wrapMe, pd.GetType()) && TryCreatePropertyDescriptor(ref pd)) {
- changed = true;
- }
- newProps[index++] = pd;
- }
-
- return changed ? new PropertyDescriptorCollection(newProps, true) : oldProps;
- }
-
- static readonly ModuleBuilder moduleBuilder;
- static int counter;
- static HyperTypeDescriptor() {
- AssemblyName an = new AssemblyName("Hyper.ComponentModel.dynamic");
- AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
- moduleBuilder = ab.DefineDynamicModule("Hyper.ComponentModel.dynamic.dll");
-
- }
-
- private static bool TryCreatePropertyDescriptor(ref PropertyDescriptor descriptor) {
- try {
- PropertyInfo property = descriptor.ComponentType.GetProperty(descriptor.Name);
- if (property == null) return false;
-
- lock (properties) {
- PropertyDescriptor foundBuiltAlready;
- if (properties.TryGetValue(property, out foundBuiltAlready)) {
- descriptor = foundBuiltAlready;
- return true;
- }
-
- string name = "_c" + Interlocked.Increment(ref counter).ToString();
- TypeBuilder tb = moduleBuilder.DefineType(name, TypeAttributes.Sealed | TypeAttributes.NotPublic | TypeAttributes.Class | TypeAttributes.BeforeFieldInit | TypeAttributes.AutoClass | TypeAttributes.Public, typeof(ChainingPropertyDescriptor));
-
- // ctor calls base
- ConstructorBuilder cb = tb.DefineConstructor(MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName, CallingConventions.Standard, new Type[] { typeof(PropertyDescriptor) });
- ILGenerator il = cb.GetILGenerator();
- il.Emit(OpCodes.Ldarg_0);
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Call, typeof(ChainingPropertyDescriptor).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(PropertyDescriptor) }, null));
- il.Emit(OpCodes.Ret);
-
- MethodBuilder mb;
- MethodInfo baseMethod;
- if (property.CanRead) {
- // obtain the implementation that we want to override
- baseMethod = typeof(ChainingPropertyDescriptor).GetMethod("GetValue");
- // create a new method that accepts an object and returns an object (as per the base)
- mb = tb.DefineMethod(baseMethod.Name,
- MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final,
- baseMethod.CallingConvention, baseMethod.ReturnType, new Type[] { typeof(object) });
- // start writing IL into the method
- il = mb.GetILGenerator();
- if (property.DeclaringType.IsValueType) {
- // upbox the object argument into our known (instance) struct type
- LocalBuilder lb = il.DeclareLocal(property.DeclaringType);
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Unbox_Any, property.DeclaringType);
- il.Emit(OpCodes.Stloc_0);
- il.Emit(OpCodes.Ldloca_S, lb);
- } else {
- // cast the object argument into our known class type
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Castclass, property.DeclaringType);
- }
- // call the "get" method
- il.Emit(OpCodes.Callvirt, property.GetGetMethod());
-
- if (property.PropertyType.IsValueType) {
- // box it from the known (value) struct type
- il.Emit(OpCodes.Box, property.PropertyType);
- }
- // return the value
- il.Emit(OpCodes.Ret);
- // signal that this method should override the base
- tb.DefineMethodOverride(mb, baseMethod);
- }
-
- bool supportsChangeEvents = descriptor.SupportsChangeEvents, isReadOnly = descriptor.IsReadOnly;
-
- // override SupportsChangeEvents
- baseMethod = typeof(ChainingPropertyDescriptor).GetProperty("SupportsChangeEvents").GetGetMethod();
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, Type.EmptyTypes);
- il = mb.GetILGenerator();
- if (supportsChangeEvents) {
- il.Emit(OpCodes.Ldc_I4_1);
- } else {
- il.Emit(OpCodes.Ldc_I4_0);
- }
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
-
- // override IsReadOnly
- baseMethod = typeof(ChainingPropertyDescriptor).GetProperty("IsReadOnly").GetGetMethod();
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, Type.EmptyTypes);
- il = mb.GetILGenerator();
- if (isReadOnly) {
- il.Emit(OpCodes.Ldc_I4_1);
- } else {
- il.Emit(OpCodes.Ldc_I4_0);
- }
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
-
- /* REMOVED: PropertyType, ComponentType; actually *adds* time overriding these
- // override PropertyType
- baseMethod = typeof(ChainingPropertyDescriptor).GetProperty("PropertyType").GetGetMethod();
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, Type.EmptyTypes);
- il = mb.GetILGenerator();
- il.Emit(OpCodes.Ldtoken, descriptor.PropertyType);
- il.Emit(OpCodes.Call, typeof(Type).GetMethod("GetTypeFromHandle"));
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
-
- // override ComponentType
- baseMethod = typeof(ChainingPropertyDescriptor).GetProperty("ComponentType").GetGetMethod();
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, Type.EmptyTypes);
- il = mb.GetILGenerator();
- il.Emit(OpCodes.Ldtoken, descriptor.ComponentType);
- il.Emit(OpCodes.Call, typeof(Type).GetMethod("GetTypeFromHandle"));
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
- */
-
- // for classes, implement write (would be lost in unbox for structs)
- if (!property.DeclaringType.IsValueType) {
- if (!isReadOnly && property.CanWrite) {
- // override set method
- baseMethod = typeof(ChainingPropertyDescriptor).GetMethod("SetValue");
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final, baseMethod.CallingConvention, baseMethod.ReturnType, new Type[] { typeof(object), typeof(object) });
- il = mb.GetILGenerator();
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Castclass, property.DeclaringType);
- il.Emit(OpCodes.Ldarg_2);
- if (property.PropertyType.IsValueType) {
- il.Emit(OpCodes.Unbox_Any, property.PropertyType);
- } else {
- il.Emit(OpCodes.Castclass, property.PropertyType);
- }
- il.Emit(OpCodes.Callvirt, property.GetSetMethod());
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
- }
-
- if (supportsChangeEvents) {
- EventInfo ei = property.DeclaringType.GetEvent(property.Name + "Changed");
- if (ei != null) {
- baseMethod = typeof(ChainingPropertyDescriptor).GetMethod("AddValueChanged");
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, new Type[] { typeof(object), typeof(EventHandler) });
- il = mb.GetILGenerator();
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Castclass, property.DeclaringType);
- il.Emit(OpCodes.Ldarg_2);
- il.Emit(OpCodes.Callvirt, ei.GetAddMethod());
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
-
- baseMethod = typeof(ChainingPropertyDescriptor).GetMethod("RemoveValueChanged");
- mb = tb.DefineMethod(baseMethod.Name, MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.Final | MethodAttributes.SpecialName, baseMethod.CallingConvention, baseMethod.ReturnType, new Type[] { typeof(object), typeof(EventHandler) });
- il = mb.GetILGenerator();
- il.Emit(OpCodes.Ldarg_1);
- il.Emit(OpCodes.Castclass, property.DeclaringType);
- il.Emit(OpCodes.Ldarg_2);
- il.Emit(OpCodes.Callvirt, ei.GetRemoveMethod());
- il.Emit(OpCodes.Ret);
- tb.DefineMethodOverride(mb, baseMethod);
- }
- }
-
- }
- PropertyDescriptor newDesc = tb.CreateType().GetConstructor(new Type[] { typeof(PropertyDescriptor) }).Invoke(new object[] { descriptor }) as PropertyDescriptor;
- if (newDesc == null) {
- return false;
- }
- descriptor = newDesc;
- properties.Add(property, descriptor);
- return true;
- }
- } catch {
- return false;
- }
- }
- }
-}
diff --git a/Backup/Properties/AssemblyInfo.cs b/Backup/Properties/AssemblyInfo.cs
deleted file mode 100644
index 89228e1b0..000000000
--- a/Backup/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Security;
-
-[assembly: AllowPartiallyTrustedCallers]
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("HyperTypeDescriptor")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("HyperTypeDescriptor")]
-[assembly: AssemblyCopyright("Copyright © Marc Gravell 2007")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("f22bc56b-501e-438a-967e-8f0b48827869")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs
index f5a58ec55..1962bc932 100644
--- a/Subsurface/Source/Characters/Character.cs
+++ b/Subsurface/Source/Characters/Character.cs
@@ -601,11 +601,10 @@ namespace Subsurface
///
public void ControlLocalPlayer(float deltaTime, Camera cam, bool moveCam = true)
{
- //if (isDead)
- //{
-
- // return;
- //}
+ if (PlayerInput.KeyHit(Keys.U))
+ {
+ AnimController.SimplePhysicsEnabled = !AnimController.SimplePhysicsEnabled;
+ }
Limb head = AnimController.GetLimb(LimbType.Head);
@@ -747,6 +746,8 @@ namespace Subsurface
public virtual void Update(Camera cam, float deltaTime)
{
+ AnimController.SimplePhysicsEnabled = (Character.controlled!=this && Vector2.Distance(cam.WorldViewCenter, Position)>2000.0f);
+
if (isDead) return;
if (PressureProtection==0.0f &&
diff --git a/Subsurface/Source/Characters/FishAnimController.cs b/Subsurface/Source/Characters/FishAnimController.cs
index 491c34364..9ef14ac76 100644
--- a/Subsurface/Source/Characters/FishAnimController.cs
+++ b/Subsurface/Source/Characters/FishAnimController.cs
@@ -4,6 +4,7 @@ using System.Xml.Linq;
using FarseerPhysics;
using FarseerPhysics.Dynamics.Joints;
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Input;
namespace Subsurface
{
@@ -48,6 +49,11 @@ namespace Subsurface
public override void UpdateAnim(float deltaTime)
{
+ if (PlayerInput.KeyHit(Keys.I))
+ {
+ SimplePhysicsEnabled = !SimplePhysicsEnabled;
+ }
+
if (character.IsDead)
{
UpdateDying(deltaTime);
@@ -68,6 +74,10 @@ namespace Subsurface
stunTimer -= deltaTime;
return;
}
+ else if (SimplePhysicsEnabled)
+ {
+ UpdateSimpleAnim();
+ }
else
{
if (inWater)
@@ -80,7 +90,6 @@ namespace Subsurface
}
}
-
if (flip)
{
//targetDir = (movement.X > 0.0f) ? Direction.Right : Direction.Left;
@@ -208,6 +217,31 @@ namespace Subsurface
floorY = Limbs[0].SimPosition.Y;
}
}
+
+ void UpdateSimpleAnim()
+ {
+ movement = MathUtils.SmoothStep(movement, TargetMovement*swimSpeed, 1.0f);
+ if (movement == Vector2.Zero) return;
+
+ float movementAngle = MathUtils.VectorToAngle(movement) - MathHelper.PiOver2;
+
+ RefLimb.body.SmoothRotate(
+ (rotateTowardsMovement) ?
+ RefLimb.body.Rotation + MathUtils.GetShortestAngle(RefLimb.body.Rotation, movementAngle) :
+ HeadAngle*Dir);
+
+ RefLimb.pullJoint.Enabled = true;
+ RefLimb.pullJoint.WorldAnchorB =
+ RefLimb.SimPosition + movement * 0.1f;
+
+ RefLimb.body.SmoothRotate(0.0f);
+
+ foreach (Limb l in Limbs)
+ {
+ if (l == RefLimb) continue;
+ l.body.SetTransform(RefLimb.SimPosition, RefLimb.Rotation);
+ }
+ }
void UpdateWalkAnim(float deltaTime)
{
diff --git a/Subsurface/Source/Characters/HumanoidAnimController.cs b/Subsurface/Source/Characters/HumanoidAnimController.cs
index cc79e911a..0f19a120e 100644
--- a/Subsurface/Source/Characters/HumanoidAnimController.cs
+++ b/Subsurface/Source/Characters/HumanoidAnimController.cs
@@ -30,8 +30,8 @@ namespace Subsurface
public override void UpdateAnim(float deltaTime)
{
- if (character.IsDead) return;
-
+ if (character.IsDead) return;
+
Vector2 colliderPos = GetLimb(LimbType.Torso).SimPosition;
//if (inWater) stairs = null;
@@ -136,6 +136,15 @@ namespace Subsurface
return;
}
+ if (TargetDir != dir) Flip();
+
+ if (SimplePhysicsEnabled)
+ {
+ UpdateStandingSimple();
+ return;
+ }
+
+
switch (Anim)
{
case Animation.Climbing:
@@ -152,7 +161,6 @@ namespace Subsurface
break;
}
- if (TargetDir != dir) Flip();
foreach (Limb limb in Limbs)
{
@@ -389,6 +397,29 @@ namespace Subsurface
}
+ void UpdateStandingSimple()
+ {
+ movement = MathUtils.SmoothStep(movement, TargetMovement, movementLerp);
+
+ if (inWater && movement != Vector2.Zero)
+ {
+ movement = Vector2.Normalize(movement);
+ }
+
+ RefLimb.pullJoint.Enabled = true;
+ RefLimb.pullJoint.WorldAnchorB =
+ RefLimb.SimPosition + movement*0.15f;
+
+ RefLimb.body.SmoothRotate(0.0f);
+
+ foreach (Limb l in Limbs)
+ {
+ if (l==RefLimb) continue;
+ l.body.SetTransform(RefLimb.SimPosition, RefLimb.Rotation);
+ }
+ //new Vector2(movement.X, floorY + HeadPosition), 0.5f);
+ }
+
void UpdateSwimming()
{
IgnorePlatforms = true;
diff --git a/Subsurface/Source/Characters/Ragdoll.cs b/Subsurface/Source/Characters/Ragdoll.cs
index bff201eea..849d84a57 100644
--- a/Subsurface/Source/Characters/Ragdoll.cs
+++ b/Subsurface/Source/Characters/Ragdoll.cs
@@ -22,7 +22,9 @@ namespace Subsurface
private Dictionary limbDictionary;
public RevoluteJoint[] limbJoints;
- Character character;
+ private bool simplePhysicsEnabled;
+
+ private Character character;
private Limb lowestLimb;
@@ -76,6 +78,29 @@ namespace Subsurface
private set;
}
+ public bool SimplePhysicsEnabled
+ {
+ get { return simplePhysicsEnabled; }
+ set
+ {
+ if (value == simplePhysicsEnabled) return;
+
+ simplePhysicsEnabled = value;
+
+ foreach (Limb limb in Limbs)
+ {
+ limb.body.Enabled = !simplePhysicsEnabled;
+ }
+
+ foreach (RevoluteJoint joint in limbJoints)
+ {
+ joint.Enabled = !simplePhysicsEnabled;
+ }
+
+ refLimb.body.Enabled = true;
+ }
+ }
+
public Vector2 TargetMovement
{
get
@@ -473,11 +498,11 @@ namespace Subsurface
}
}
- public static void UpdateAll(float deltaTime)
+ public static void UpdateAll(Camera cam, float deltaTime)
{
foreach (Ragdoll r in list)
{
- r.Update(deltaTime);
+ r.Update(cam, deltaTime);
}
}
@@ -491,10 +516,12 @@ namespace Subsurface
currentHull);
}
- public void Update(float deltaTime)
+ public void Update(Camera cam, float deltaTime)
{
UpdateNetplayerPosition();
+
+
Vector2 flowForce = Vector2.Zero;
FindLowestLimb();
@@ -537,8 +564,7 @@ namespace Subsurface
limb.inWater = true;
}
else if (limbHull.Volume > 0.0f && Submarine.RectContains(limbHull.Rect, limbPosition))
- {
-
+ {
if (limbPosition.Y < limbHull.Surface)
{
limb.inWater = true;
diff --git a/Subsurface/Source/Events/Quests/MonsterQuest.cs b/Subsurface/Source/Events/Quests/MonsterQuest.cs
index f88110803..686ae94ac 100644
--- a/Subsurface/Source/Events/Quests/MonsterQuest.cs
+++ b/Subsurface/Source/Events/Quests/MonsterQuest.cs
@@ -18,10 +18,7 @@ namespace Subsurface
public override Vector2 RadarPosition
{
- get
- {
- return monster.Position;
- }
+ get { return monster.Position; }
}
public MonsterQuest(XElement element)
@@ -34,7 +31,7 @@ namespace Subsurface
{
Vector2 position = level.PositionsOfInterest[Rand.Int(level.PositionsOfInterest.Count, false)];
- monster = new Character(monsterFile, ConvertUnits.ToSimUnits(position+level.Position));
+ monster = new AICharacter(monsterFile, ConvertUnits.ToSimUnits(position+level.Position));
}
public override void End()
diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs
index 7420c9342..8cfc099b9 100644
--- a/Subsurface/Source/Items/Components/Machines/Reactor.cs
+++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs
@@ -206,7 +206,7 @@ namespace Subsurface.Items.Components
if (item.CurrentHull != null)
{
//the sound can be heard from 20 000 display units away when everything running at 100%
- item.CurrentHull.SoundRange += (coolingRate + fissionRate) * 100;
+ item.CurrentHull.SoundRange = (coolingRate + fissionRate) * 100;
}
UpdateGraph(deltaTime);
diff --git a/Subsurface/Source/Map/Levels/Level.cs b/Subsurface/Source/Map/Levels/Level.cs
index ef8664c0e..2ccacad2f 100644
--- a/Subsurface/Source/Map/Levels/Level.cs
+++ b/Subsurface/Source/Map/Levels/Level.cs
@@ -728,19 +728,10 @@ int currentTargetIndex = 1;
}
}
- foreach (MapEntity mapEntity in MapEntity.mapEntityList)
- {
- Item item = mapEntity as Item;
- if (item == null)
- {
- //if (!mapEntity.MoveWithLevel) continue;
- //mapEntity.Move(velocity);
- }
- else if (item.body!=null)
- {
- if (item.CurrentHull != null) continue;
- item.body.LinearVelocity += simVelocity;
- }
+ foreach (Item item in Item.itemList)
+ {
+ if (item.body==null || item.CurrentHull != null) continue;
+ item.body.LinearVelocity += simVelocity;
}
AtStartPosition = Vector2.Distance(startPosition, -Position) < ExitDistance;
diff --git a/Subsurface/Source/Screens/EditCharacterScreen.cs b/Subsurface/Source/Screens/EditCharacterScreen.cs
index adcc4fda8..dec16e249 100644
--- a/Subsurface/Source/Screens/EditCharacterScreen.cs
+++ b/Subsurface/Source/Screens/EditCharacterScreen.cs
@@ -110,7 +110,7 @@ namespace Subsurface
{
Character.UpdateAnimAll((float)Physics.step * 1000.0f);
- Ragdoll.UpdateAll((float)Physics.step);
+ Ragdoll.UpdateAll(cam, (float)Physics.step);
GameMain.World.Step((float)Physics.step);
diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs
index 9d88a2f84..891779d48 100644
--- a/Subsurface/Source/Screens/GameScreen.cs
+++ b/Subsurface/Source/Screens/GameScreen.cs
@@ -132,7 +132,7 @@ namespace Subsurface
Debug.WriteLine(" char: " + sw.ElapsedTicks);
sw.Restart();
- Ragdoll.UpdateAll((float)Physics.step);
+ Ragdoll.UpdateAll(cam, (float)Physics.step);
if (GameMain.GameSession != null && GameMain.GameSession.Level != null)
{
diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo
index a32fa03b6..3932c192e 100644
Binary files a/Subsurface_Solution.v12.suo and b/Subsurface_Solution.v12.suo differ