예제 #1
0
            private IEnumerator <bool> MissileSM(MissileManagement.MissileInfo missile, long targetId)
            {
                management.SendCommand(missile, "LaunchOut");
                firedMissiles[missile.id] = missile;
                management.RemoveMissile(missile);
                yield return(true);

                for (int i = 0; i < 5; i++)         //Wait 5 ticks to allow missile to get out of tube
                {
                    yield return(true);
                }

                var predictedPos = targets[targetId].Position + targets[targetId].Velocity * 0.17f;

                string[] command =
                {
                    "AttackLoc",
                    predictedPos.ToString()
                };

                management.SendCommand(missile, command);

                if ((missile.missileType & MissileManagement.MissileType.SRInterceptor) != 0)
                {
                    management.SendCommand(missile, "UseTurretLockon");
                }

                OnTargetFiredAt?.Invoke(missile, targets[targetId]);
            }
예제 #2
0
            private void LaunchNewMissile(MissileManagement.MissileInfo missile, long targetId)
            {
                IEnumerator <bool> tempSM = MissileSM(missile, targetId);

                firedAt[targetId] = DateTime.Now;
                tempSM.MoveNext();

                missileStaging.Add(tempSM);
            }
예제 #3
0
        /*=========| Helper Functions |=========*/

        bool ParseCommands(string command)
        {
            switch (command)
            {
            case "RefreshMissiles":
                missileManagement.RefreshMissileList();
                return(true);

            case "TargetMissile":
                MissileManagement.MissileInfo missile = missileManagement.GetMissileCloseTo(Me.GetPosition(), MissileManagement.MissileType.SRInterceptor, false);
                missileManagement.SendCommand(missile, "Target");
                return(true);

            case "FireMissile":
                MissileManagement.MissileInfo fire = missileManagement.GetMissileCloseTo(Me.GetPosition(), MissileManagement.MissileType.SRInterceptor, true);
                missileManagement.SendCommand(fire, "Attack");
                return(true);

            case "ModeAutomatic":
                currentMode = CurrentSystemMode.Automatic;
                return(true);

            case "ModeManual":
                currentMode = CurrentSystemMode.Command;
                return(true);

            default:        //More complex stuff goes here
                if (command.StartsWith("LaunchInDirectionTurr|"))
                {
                    string[] commandArgs = command.Split('|');

                    try
                    {
                        Vector3D direction;
                        if (Vector3D.TryParse(commandArgs[1], out direction))
                        {
                            missileCoordination.FireMissileInDirection(direction, true);

                            Echo("Launched missile");
                        }
                    }
                    catch (Exception e) { Echo("Failed to parse message"); }

                    return(true);
                }

                break;
            }

            return(false);
        }
예제 #4
0
 void OnMissileRemoved(MissileManagement.MissileInfo info)
 {
     Echo($"Missile with ID {info.id} removed.");
     Me.CustomData = missileManagement.TotalMissileCount.ToString();
 }