コード例 #1
0
        public override AbstractConstruct Clone()
        {
            var newc = new RevConstruct(this);

            newc.Offset       = Offset;
            newc.AxisRotation = AxisRotation;
            newc.Min          = Min;
            newc.Max          = Max;
            return(newc);
        }
コード例 #2
0
 protected RevConstruct(RevConstruct cf) : base(cf)
 {
 }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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();
            }
        }