Further lighting optimization, fixed (railgun) controller movement, physicsbody collisioncategory changes, command room reactor controls in Vellamo

This commit is contained in:
Regalis11
2015-10-14 22:10:37 +03:00
parent 8df9133e84
commit 2bb5d41836
27 changed files with 135 additions and 126 deletions

View File

@@ -27,9 +27,10 @@ namespace Subsurface.Items.Components
Character character;
[HasDefaultValue(1.0f,false)]
[HasDefaultValue(0.0f, false)]
public float UserPos
{
get { return userPos; }
set { userPos = value; }
}
@@ -80,26 +81,24 @@ namespace Subsurface.Items.Components
return;
}
ApplyStatusEffects(ActionType.OnActive, deltaTime, character);
if (userPos != 0.0f && character.AnimController.Anim != AnimController.Animation.UsingConstruction)
{
Limb torso = character.AnimController.GetLimb(LimbType.Torso);
float torsoX = ConvertUnits.ToDisplayUnits(torso.SimPosition.X);
float torsoX = ConvertUnits.ToDisplayUnits(character.AnimController.RefLimb.SimPosition.X);
if (Math.Abs(torsoX - item.Rect.X + userPos) > 10.0f)
Vector2 diff = new Vector2(item.Rect.X + UserPos - torsoX, 0.0f);
if (diff!= Vector2.Zero && diff.Length() > 10.0f)
{
character.AnimController.Anim = AnimController.Animation.None;
character.AnimController.TargetMovement =
new Vector2(
Math.Min(Math.Max(item.Rect.X + userPos - torsoX, -1.0f), 1.0f),
0.0f);
character.AnimController.TargetDir = (Math.Sign(torsoX - item.Rect.X + userPos) == 1) ? Direction.Right : Direction.Left;
character.AnimController.TargetMovement = new Vector2(Math.Sign(diff.X), 0.0f);
character.AnimController.TargetDir = (Math.Sign(diff.X) == 1) ? Direction.Right : Direction.Left;
return;
}
}
ApplyStatusEffects(ActionType.OnActive, deltaTime, character);
if (limbPositions.Count == 0) return;
character.AnimController.Anim = AnimController.Animation.UsingConstruction;
@@ -118,20 +117,13 @@ namespace Subsurface.Items.Components
fmj.Enabled = true;
fmj.WorldAnchorB = position;
}
//foreach (MapEntity e in item.linkedTo)
//{
// Item linkedItem = e as Item;
// if (linkedItem == null) continue;
// linkedItem.Update(cam, deltaTime);
//}
item.SendSignal(ToolBox.Vector2ToString(character.CursorPosition), "position_out");
}
public override bool Use(float deltaTime, Character activator = null)
{
if (character==null || activator!=character || character.SelectedConstruction != item)
if (character == null || activator != character || character.SelectedConstruction != item)
{
character = null;
return false;

View File

@@ -101,9 +101,10 @@ namespace Subsurface.Items.Components
foreach (Connection c in connections)
{
if (!c.IsPower) continue;
foreach (Connection recipient in c.Recipients)
{
if (recipient == null) continue;
if (recipient == null || !recipient.IsPower) continue;
Item it = recipient.Item;
if (it == null) continue;

View File

@@ -88,7 +88,7 @@ namespace Subsurface.Items.Components
public override void ReceiveSignal(string signal, Connection connection, Item sender, float power)
{
if (currPowerConsumption == 0.0f) voltage = 0.0f;
if (connection.Name == "power_in" || connection.Name == "power") voltage = power;
if (connection.IsPower) voltage = power;
}
public override void Update(float deltaTime, Camera cam)

View File

@@ -97,7 +97,7 @@ namespace Subsurface.Items.Components
item.body.FarseerBody.IsBullet = true;
item.body.CollisionCategories = Physics.CollisionProjectile;
item.body.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall;
item.body.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall | Physics.CollisionLevel;
item.Drop();
@@ -155,7 +155,7 @@ namespace Subsurface.Items.Components
item.body.FarseerBody.IsBullet = false;
item.body.CollisionCategories = Physics.CollisionMisc;
item.body.CollidesWith = Physics.CollisionWall;
item.body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel;
ignoredBodies.Clear();

View File

@@ -30,6 +30,12 @@ namespace Subsurface.Items.Components
public readonly int[] wireId;
public bool IsPower
{
get;
private set;
}
public List<Connection> Recipients
{
get
@@ -69,6 +75,8 @@ namespace Subsurface.Items.Components
IsOutput = (element.Name.ToString() == "output");
Name = ToolBox.GetAttributeString(element, "name", (IsOutput) ? "output" : "input");
IsPower = Name == "power_in" || Name == "power" || Name == "power_out";
effects = new List<StatusEffect>();
wireId = new int[MaxLinked];

View File

@@ -63,6 +63,21 @@ namespace Subsurface.Items.Components
light.Position += amount;
}
public override bool IsActive
{
get
{
return base.IsActive;
}
set
{
if (base.IsActive == value) return;
base.IsActive = value;
light.Color = value ? lightColor : Color.Transparent;
}
}
public LightComponent(Item item, XElement element)
: base (item, element)
{
@@ -122,10 +137,11 @@ namespace Subsurface.Items.Components
public override void Draw(SpriteBatch spriteBatch, bool editing)
{
if (!IsActive)
{
light.Color = Color.Transparent;
}
if (!editing) return;
//Vector2 center = new Vector2(item.Rect.Center.X, -item.Rect.Y + item.Rect.Height/2.0f);
//GUI.DrawLine(spriteBatch, center - Vector2.One * range, center + Vector2.One * range, lightColor);
}
public override void Remove()

View File

@@ -304,7 +304,7 @@ namespace Subsurface.Items.Components
GUI.DrawRectangle(spriteBatch, new Rectangle((int)Nodes[i].X - 3, (int)-Nodes[i].Y - 3, 6, 6), Color.Red, true, 0.0f);
if (GUIComponent.MouseOn != null ||
Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), Nodes[i]) > 20.0f)
Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), Nodes[i]) > 10.0f)
{
continue;
}