public override AbstractConstruct Clone() { var newc = new RevConstruct(this); newc.Offset = Offset; newc.AxisRotation = AxisRotation; newc.Min = Min; newc.Max = Max; return(newc); }
protected RevConstruct(RevConstruct cf) : base(cf) { }
void DoRotation(float x, float y, double time) { var hp = Parent.Attachment; var rads = MathHelper.DegreesToRadians(Object.Def.TurnRate); var delta = (float)(time * rads); if (hp.Revolute != null) { var target = x; var current = Parent.Attachment.CurrentRevolution; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } hp.Revolve(current); Angles.X = current; } //TODO: Finding barrel construct properly? Utf.RevConstruct barrel = null; foreach (var mdl in Parent.RigidModel.AllParts) { if (mdl.Construct is Utf.RevConstruct revCon) { barrel = revCon; } } if (barrel != null) { var target = y; var current = barrel.Current; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } barrel.Update(target, Quaternion.Identity); Angles.Y = current; Parent.RigidModel.UpdateTransform(); } }
public void AimTowards(Vector3 point, TimeSpan time) { var hp = Parent.Attachment; //Parent is the gun itself rotated var beforeRotate = hp.TransformNoRotate * Parent.Parent.GetTransform(); //Inverse Transform beforeRotate.Invert(); var local = beforeRotate.Transform(point); var localProper = local.Normalized(); var delta = (float)(time.TotalSeconds * Definition.TurnRateRadians); if (hp.Revolute != null) { var target = localProper.X * (float)Math.PI; var current = Parent.Attachment.CurrentRevolution; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } hp.Revolve(current); } //TODO: Finding barrel construct properly? Utf.RevConstruct barrel = null; foreach (var construct in Parent.CmpConstructs) { if (construct is Utf.RevConstruct) { barrel = (Utf.RevConstruct)construct; } } if (barrel != null) { var target = -localProper.Y * (float)Math.PI; var current = barrel.Current; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } barrel.Update(target); } }
public void AimTowards(Vector3 point, TimeSpan time) { var hp = Parent.Attachment; //Parent is the gun itself rotated var beforeRotate = hp.TransformNoRotate * Parent.Parent.GetTransform(); //Inverse Transform Matrix4x4.Invert(beforeRotate, out beforeRotate); var local = Vector3.Transform(point, beforeRotate); var localProper = local.Normalized(); var rads = MathHelper.DegreesToRadians(Object.Def.TurnRate); var delta = (float)(time.TotalSeconds * rads); if (hp.Revolute != null) { var target = localProper.X * (float)Math.PI; var current = Parent.Attachment.CurrentRevolution; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } hp.Revolve(current); } //TODO: Finding barrel construct properly? Utf.RevConstruct barrel = null; foreach (var mdl in Parent.RigidModel.AllParts) { if (mdl.Construct is Utf.RevConstruct revCon) { barrel = revCon; } } if (barrel != null) { var target = -localProper.Y * (float)Math.PI; var current = barrel.Current; if (current > target) { current -= delta; if (current <= target) { current = target; } } if (current < target) { current += delta; if (current >= target) { current = target; } } barrel.Update(target, Quaternion.Identity); Parent.RigidModel.UpdateTransform(); } }