Example #1
0
        private void SpawnEscortGrid(PrefabGrid prefabGrid, Vector3D naturalGravity, EscortPosition escortPosition,
                                     UnitType convoyUnitType, IMyCubeGrid convoyLeaderGrid)
        {
            var positionToSpawn = Convoy.GetEscortPositionVector(convoyLeaderGrid, naturalGravity, escortPosition,
                                                                 GetAdditionalHeightModifier(convoyUnitType));
            var factionId = convoyLeaderGrid.GetGridControllerFaction();
            var forwards  = convoyLeaderGrid.WorldMatrix.Forward;

            DuckUtils.SpawnInGravity(positionToSpawn, naturalGravity, factionId, prefabGrid.PrefabName,
                                     prefabGrid.InitialBeaconName, forwards);
        }
Example #2
0
        private void SendEscortToPosition(EscortPosition position, IMyCubeGrid escort, Vector3D targetPosition)
        {
            var slimBlocks = new List <IMySlimBlock>();

            escort.GetBlocks(slimBlocks, b => b.FatBlock is IMyRemoteControl);
            foreach (var slim in slimBlocks)
            {
                var remoteControl = slim.FatBlock as IMyRemoteControl;
                remoteControl.ClearWaypoints();
                var escortPosition = GetEscortPositionVector(targetPosition, remoteControl.GetNaturalGravity(), position,
                                                             GetAdditionalHeightModifier());
                remoteControl.AddWaypoint(escortPosition, "Target");
                remoteControl.SetAutoPilotEnabled(true);
            }
        }
Example #3
0
        private void SendEscortToGrid(EscortPosition position, IMyCubeGrid escort, IMyEntity convoyLeaderGrid)
        {
            var slimBlocks = new List <IMySlimBlock>();

            escort.GetBlocks(slimBlocks, b => b.FatBlock is IMyRemoteControl);
            foreach (var slim in slimBlocks)
            {
                // TODO: Make intelligent escorts
                var remoteControl = slim.FatBlock as IMyRemoteControl;
                remoteControl.ClearWaypoints();
                var escortPosition = GetEscortPositionVector(convoyLeaderGrid, remoteControl.GetTotalGravity(), position,
                                                             GetAdditionalHeightModifier());
                remoteControl.AddWaypoint(escortPosition, "Target");
                remoteControl.SetAutoPilotEnabled(true);
            }
        }
Example #4
0
        internal static Vector3D GetEscortPositionVector(IMyEntity convoyLeaderGrid, Vector3D gravity,
                                                         EscortPosition escortPosition, int additionalHeightModifier)
        {
            var deliveryShipPosition = convoyLeaderGrid.GetPosition();

            switch (escortPosition)
            {
            case EscortPosition.GroundLeft:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Left * 20);

            case EscortPosition.GroundRight:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Right * 20);

            case EscortPosition.AboveLeft:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Left * 10 -
                       gravity * (2 + additionalHeightModifier));

            case EscortPosition.AboveRight:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Right * 10 -
                       gravity * (2 + additionalHeightModifier));

            case EscortPosition.AboveLeftFar:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Left * 20 -
                       gravity * (3 + additionalHeightModifier));

            case EscortPosition.AboveRightFar:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Right * 20 -
                       gravity * (3 + additionalHeightModifier));

            case EscortPosition.AboveLeftSuperFar:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Left * 30 -
                       gravity * (4 + additionalHeightModifier));

            case EscortPosition.AboveRightSuperFar:
                return(deliveryShipPosition + convoyLeaderGrid.WorldMatrix.Right * 30 -
                       gravity * (4 + additionalHeightModifier));

            default:
                throw new ArgumentException("Uncoped for escort position: " + escortPosition);
            }
        }
Example #5
0
        internal static Vector3D GetEscortPositionVector(Vector3D deliveryShipPosition, Vector3D gravity,
                                                         EscortPosition escortPosition, int additionalHeightModifier)
        {
            switch (escortPosition)
            {
            case EscortPosition.GroundLeft:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees90) * 2);

            case EscortPosition.GroundRight:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees270) * 2);

            case EscortPosition.AboveLeft:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees90) -
                       gravity * (2 + additionalHeightModifier));

            case EscortPosition.AboveRight:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees270) -
                       gravity * (2 + additionalHeightModifier));

            case EscortPosition.AboveLeftFar:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees90) * 2 -
                       gravity * (3 + additionalHeightModifier));

            case EscortPosition.AboveRightFar:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees270) * 2 -
                       gravity * (3 + additionalHeightModifier));

            case EscortPosition.AboveLeftSuperFar:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees90) * 3 -
                       gravity * (4 + additionalHeightModifier));

            case EscortPosition.AboveRightSuperFar:
                return(deliveryShipPosition + GetPerpendicularVector(ref gravity, Degrees270) * 3 -
                       gravity * (4 + additionalHeightModifier));

            default:
                throw new ArgumentException("Uncoped for escort position: " + escortPosition);
            }
        }