/// <summary> /// Creates a missile with homing and target finding capabilities. /// </summary> public GuidedMissile(IMyEntity missile, GuidedMissileLauncher launcher, Target initialTarget) : base(missile, launcher.CubeBlock) { m_launcher = launcher; myAmmo = launcher.loadedAmmo; m_entity = missile; m_owner = launcher.CubeBlock.OwnerId; if (myAmmo.Description.HasAntenna) { myAntenna = new RelayNode(missile, () => m_owner, ComponentRadio.CreateRadio(missile, 0f)); } TryHard = true; SEAD = myAmmo.Description.SEAD; Static.AllGuidedMissiles.Add(this); Registrar.Add(MyEntity, this); MyEntity.OnClose += MyEntity_OnClose; acceleration = myDescr.Acceleration + myAmmo.MissileDefinition.MissileAcceleration; addSpeedPerUpdate = myDescr.Acceleration * Globals.UpdateDuration; if (!(launcher.CubeBlock is Sandbox.ModAPI.Ingame.IMyLargeTurretBase)) { m_rail = new RailData(Vector3D.Transform(MyEntity.GetPosition(), CubeBlock.WorldMatrixNormalizedInv)); } Options = m_launcher.m_weaponTarget.Options.Clone(); Options.TargetingRange = myAmmo.Description.TargetRange; SetTarget(initialTarget); if (myAmmo.RadarDefinition != null) { Log.DebugLog("Has a radar definiton"); m_radar = new RadarEquipment(missile, myAmmo.RadarDefinition, launcher.CubeBlock); if (myAntenna == null) { Log.DebugLog("Creating node for radar"); myAntenna = new RelayNode(missile, () => m_owner, null); } } Log.DebugLog("Options: " + Options + ", initial target: " + (CurrentTarget == null ? "null" : CurrentTarget.Entity.getBestName()) + ", entityId: " + missile.EntityId); //Log.DebugLog("AmmoDescription: \n" + MyAPIGateway.Utilities.SerializeToXML<Ammo.AmmoDescription>(myDescr), "GuidedMissile()"); }
/// <summary> /// Creates a missile with homing and target finding capabilities. /// </summary> public GuidedMissile(IMyEntity missile, GuidedMissileLauncher launcher, out Target initialTarget) : base(missile, launcher.CubeBlock) { myLogger = new Logger("GuidedMissile", () => missile.getBestName(), () => m_stage.ToString()); m_launcher = launcher; myAmmo = launcher.loadedAmmo; m_owner = launcher.CubeBlock.OwnerId; if (myAmmo.Description.HasAntenna) myAntenna = new RelayNode(missile, () => m_owner, ComponentRadio.CreateRadio(missile, 0f)); TryHard = true; SEAD = myAmmo.Description.SEAD; AllGuidedMissiles.Add(this); MyEntity.OnClose += MyEntity_OnClose; acceleration = myDescr.Acceleration + myAmmo.MissileDefinition.MissileAcceleration; addSpeedPerUpdate = myDescr.Acceleration * Globals.UpdateDuration; if (!(launcher.CubeBlock is Sandbox.ModAPI.Ingame.IMyLargeTurretBase)) m_rail = new RailData(Vector3D.Transform(MyEntity.GetPosition(), CubeBlock.WorldMatrixNormalizedInv)); Options = m_launcher.m_weaponTarget.Options.Clone(); Options.TargetingRange = myAmmo.Description.TargetRange; RelayStorage storage = launcher.m_relayPart.GetStorage(); if (storage == null) { myLogger.debugLog("failed to get storage for launcher", Logger.severity.WARNING); } else { myLogger.debugLog("getting initial target from launcher", Logger.severity.DEBUG); GetLastSeenTarget(storage, myAmmo.MissileDefinition.MaxTrajectory); } initialTarget = CurrentTarget; if (myAmmo.RadarDefinition != null) { myLogger.debugLog("Has a radar definiton"); m_radar = new RadarEquipment(missile, myAmmo.RadarDefinition, launcher.CubeBlock); if (myAntenna == null) { myLogger.debugLog("Creating node for radar"); myAntenna = new RelayNode(missile, () => m_owner, null); } } Registrar.Add(missile, this); myLogger.debugLog("Options: " + Options + ", initial target: " + (myTarget == null ? "null" : myTarget.Entity.getBestName())); //myLogger.debugLog("AmmoDescription: \n" + MyAPIGateway.Utilities.SerializeToXML<Ammo.AmmoDescription>(myDescr), "GuidedMissile()"); }
private static void ShootOnceEvent(GuidedMissileLauncher launcher) { launcher.LockAndShoot(); }
/// <summary> /// Scripts that use UpdateManager and run on clients as well as on server shall be added here. /// </summary> private void RegisterScripts_ClientAndServer() { #region Attached RegisterForBlock(typeof(MyObjectBuilder_MotorStator), (block) => { StatorRotor.Stator stator = new StatorRotor.Stator(block); RegisterForUpdates(1, stator.Update10, block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorAdvancedStator), (block) => { StatorRotor.Stator stator = new StatorRotor.Stator(block); RegisterForUpdates(1, stator.Update10, block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorRotor), (block) => { new StatorRotor.Rotor(block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorAdvancedRotor), (block) => { new StatorRotor.Rotor(block); }); RegisterForBlock(typeof(MyObjectBuilder_ExtendedPistonBase), (block) => { Piston.PistonBase pistonBase = new Piston.PistonBase(block); RegisterForUpdates(100, pistonBase.Update, block); }); RegisterForBlock(typeof(MyObjectBuilder_PistonTop), (block) => { new Piston.PistonTop(block); }); RegisterForBlock(typeof(MyObjectBuilder_ShipConnector), (block) => { Connector conn = new Connector(block); RegisterForUpdates(10, conn.Update, block); }); RegisterForBlock(typeof(MyObjectBuilder_LandingGear), (block) => { if (!Hacker.IsHacker(block)) new LandingGear(block); }); #endregion #region Antenna Communication Action<IMyCubeBlock> nodeConstruct = block => { RelayNode node = new RelayNode(block); RegisterForUpdates(100, node.Update100, block); }; RegisterForBlock(typeof(MyObjectBuilder_Beacon), nodeConstruct); RegisterForBlock(typeof(MyObjectBuilder_LaserAntenna), nodeConstruct); RegisterForBlock(typeof(MyObjectBuilder_RadioAntenna), nodeConstruct); RegisterForCharacter(character => { if (character.IsPlayer) { RelayNode node = new RelayNode(character); RegisterForUpdates(100, node.Update100, (IMyEntity)character); } new CharacterStateTracker(character); }); RegisterForBlock(typeof(MyObjectBuilder_MyProgrammableBlock), block => { ProgrammableBlock pb = new ProgrammableBlock(block); if (MyAPIGateway.Multiplayer.IsServer) RegisterForUpdates(100, pb.Update100, block); }); RegisterForBlock(typeof(MyObjectBuilder_TextPanel), block => { TextPanel tp = new TextPanel(block); if (MyAPIGateway.Multiplayer.IsServer) RegisterForUpdates(100, tp.Update100, block); }); RegisterForBlock(typeof(MyObjectBuilder_Projector), block => { Projector p = new Projector(block); if (MyAPIGateway.Session.Player != null) { RegisterForUpdates(100, p.Update100, block); RegisterForUpdates(1, p.Update1, block); } }); if (MyAPIGateway.Session.Player != null) new Player(); #endregion #region Autopilot RadarEquipment.Definition apRadar = new RadarEquipment.Definition() { Radar = true, LineOfSight = false, MaxTargets_Tracking = 3, MaxPowerLevel = 1000 }; Action<IMyCubeBlock> apConstruct = (block) => { if (ShipAutopilot.IsAutopilotBlock(block)) { nodeConstruct(block); new AutopilotTerminal(block); RadarEquipment r = new RadarEquipment(block, apRadar, block); RegisterForUpdates(100, r.Update100, block); } }; if (!MyAPIGateway.Multiplayer.IsServer) { if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bUseRemoteControl)) RegisterForBlock(typeof(MyObjectBuilder_RemoteControl), apConstruct); RegisterForBlock(typeof(MyObjectBuilder_Cockpit), apConstruct); } #endregion #region Radar // must come after nodes are created if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowRadar)) { RegisterForBlock(typeof(MyObjectBuilder_Beacon), (block) => { if (RadarEquipment.IsRadarOrJammer(block)) { RadarEquipment r = new RadarEquipment(block); RegisterForUpdates(100, r.Update100, block); } }); RegisterForBlock(typeof(MyObjectBuilder_RadioAntenna), (block) => { if (RadarEquipment.IsRadarOrJammer(block)) { RadarEquipment r = new RadarEquipment(block); RegisterForUpdates(100, r.Update100, block); } }); //RegisterForEveryBlock((IMyCubeBlock block) => { // if (RadarEquipment.IsRadarOrJammer(block)) // { // RadarEquipment r = new RadarEquipment(block); // RegisterForUpdates(100, r.Update100, block); // } //}); } #endregion #region Terminal Control RegisterForBlock(new MyObjectBuilderType[] { typeof(MyObjectBuilder_RadioAntenna), typeof(MyObjectBuilder_LaserAntenna) }, block => new ManualMessage(block)); #endregion Terminal Control #region Weapon Control if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowWeaponControl)) { #region Turrets Action<IMyCubeBlock> constructor; if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowGuidedMissile)) constructor = block => { Turret t = new Turret(block); RegisterForUpdates(1, t.Update_Targeting, block); if (GuidedMissileLauncher.IsGuidedMissileLauncher(block)) { GuidedMissileLauncher gml = new GuidedMissileLauncher(t); RegisterForUpdates(1, gml.Update1, block); } }; else constructor = block => { Turret t = new Turret(block); RegisterForUpdates(1, t.Update_Targeting, block); }; RegisterForBlock(typeof(MyObjectBuilder_LargeGatlingTurret), constructor); RegisterForBlock(typeof(MyObjectBuilder_LargeMissileTurret), constructor); RegisterForBlock(typeof(MyObjectBuilder_InteriorTurret), constructor); #endregion #region Fixed if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowGuidedMissile)) { constructor = block => { FixedWeapon w = new FixedWeapon(block); RegisterForUpdates(1, w.Update_Targeting, block); if (GuidedMissileLauncher.IsGuidedMissileLauncher(block)) { GuidedMissileLauncher gml = new GuidedMissileLauncher(w); RegisterForUpdates(1, gml.Update1, block); } }; } else constructor = block => { FixedWeapon w = new FixedWeapon(block); RegisterForUpdates(1, w.Update_Targeting, block); }; RegisterForBlock(typeof(MyObjectBuilder_SmallGatlingGun), constructor); RegisterForBlock(typeof(MyObjectBuilder_SmallMissileLauncher), constructor); RegisterForBlock(typeof(MyObjectBuilder_SmallMissileLauncherReload), constructor); #endregion // apparently missiles do not have their positions synced RegisterForUpdates(1, GuidedMissile.Update1); RegisterForUpdates(10, GuidedMissile.Update10); RegisterForUpdates(100, GuidedMissile.Update100); } else myLogger.debugLog("Weapon Control is disabled", Logger.severity.INFO); #endregion new ChatHandler(); }
/// <summary> /// <para>Scripts that use UpdateManager and run on a server shall be added here.</para> /// </summary> private void RegisterScripts_Server() { #region Autopilot if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bUseRemoteControl)) RegisterForBlock(typeof(MyObjectBuilder_RemoteControl), (IMyCubeBlock block) => { if (ShipController_Autopilot.IsAutopilotBlock(block)) { var sca = new ShipController_Autopilot(block); RegisterForUpdates(ShipController_Autopilot.UpdateFrequency, sca.Update, block); } }); RegisterForBlock(typeof(MyObjectBuilder_Cockpit), (IMyCubeBlock block) => { if (ShipController_Autopilot.IsAutopilotBlock(block)) { var sca = new ShipController_Autopilot(block); RegisterForUpdates(ShipController_Autopilot.UpdateFrequency, sca.Update, block); } }); #endregion #region Antenna Communication RegisterForBlock(typeof(MyObjectBuilder_Beacon), (IMyCubeBlock block) => { Beacon newBeacon = new Beacon(block); RegisterForUpdates(100, newBeacon.UpdateAfterSimulation100, block); }); RegisterForBlock(typeof(MyObjectBuilder_TextPanel), (IMyCubeBlock block) => { TextPanel newTextPanel = new TextPanel(block); RegisterForUpdates(100, newTextPanel.UpdateAfterSimulation100, block); }); RegisterForBlock(typeof(MyObjectBuilder_LaserAntenna), (IMyCubeBlock block) => { LaserAntenna newLA = new LaserAntenna(block); RegisterForUpdates(100, newLA.UpdateAfterSimulation100, block); }); RegisterForBlock(typeof(MyObjectBuilder_MyProgrammableBlock), (IMyCubeBlock block) => { ProgrammableBlock newPB = new ProgrammableBlock(block); RegisterForUpdates(100, newPB.UpdateAfterSimulation100, block); }); RegisterForBlock(typeof(MyObjectBuilder_RadioAntenna), (IMyCubeBlock block) => { RadioAntenna newRA = new RadioAntenna(block); RegisterForUpdates(100, newRA.UpdateAfterSimulation100, block); }); RegisterForPlayer((player) => { Player p = new Player(player); RegisterForUpdates(100, p.Update100, player, Player.OnLeave); }); if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bUseRemoteControl)) RegisterForBlock(typeof(MyObjectBuilder_RemoteControl), (IMyCubeBlock block) => { if (ShipController_Autopilot.IsAutopilotBlock(block)) new ShipController(block); // Does not receive Updates }); RegisterForBlock(typeof(MyObjectBuilder_Cockpit), (IMyCubeBlock block) => { if (ShipController_Autopilot.IsAutopilotBlock(block)) new ShipController(block); // Does not receive Updates }); #endregion #region Weapons if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowWeaponControl)) { #region Turrets Action<IMyCubeBlock> constructor; if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowGuidedMissile)) constructor = block => { Turret t = new Turret(block); RegisterForUpdates(1, t.Update_Targeting, block); if (GuidedMissileLauncher.IsGuidedMissileLauncher(block)) { GuidedMissileLauncher gml = new GuidedMissileLauncher(t); RegisterForUpdates(1, gml.Update1, block); } }; else constructor = block => { Turret t = new Turret(block); RegisterForUpdates(1, t.Update_Targeting, block); }; RegisterForBlock(typeof(MyObjectBuilder_LargeGatlingTurret), constructor); RegisterForBlock(typeof(MyObjectBuilder_LargeMissileTurret), constructor); RegisterForBlock(typeof(MyObjectBuilder_InteriorTurret), constructor); #endregion #region Fixed if (ServerSettings.GetSetting<bool>(ServerSettings.SettingName.bAllowGuidedMissile)) { constructor = block => { FixedWeapon w = new FixedWeapon(block); RegisterForUpdates(1, w.Update_Targeting, block); if (GuidedMissileLauncher.IsGuidedMissileLauncher(block)) { GuidedMissileLauncher gml = new GuidedMissileLauncher(w); RegisterForUpdates(1, gml.Update1, block); } }; RegisterForUpdates(1, GuidedMissile.Update1); RegisterForUpdates(10, GuidedMissile.Update10); RegisterForUpdates(100, GuidedMissile.Update100); } else constructor = block => { FixedWeapon w = new FixedWeapon(block); RegisterForUpdates(1, w.Update_Targeting, block); }; RegisterForBlock(typeof(MyObjectBuilder_SmallGatlingGun), constructor); RegisterForBlock(typeof(MyObjectBuilder_SmallMissileLauncher), constructor); RegisterForBlock(typeof(MyObjectBuilder_SmallMissileLauncherReload), constructor); #endregion #region Disruption RegisterForUpdates(10, EMP.Update); RegisterForUpdates(10, AirVentDepressurize.Update); RegisterForUpdates(10, DoorLock.Update); RegisterForUpdates(10, GravityReverse.Update); RegisterForUpdates(10, DisableTurret.Update); RegisterForUpdates(10, TraitorTurret.Update); RegisterForBlock(typeof(MyObjectBuilder_LandingGear), block => { if (Hacker.IsHacker(block)) { Hacker h = new Hacker(block); RegisterForUpdates(10, h.Update10, block); } }); #endregion } else myLogger.debugLog("Weapon Control is disabled", "RegisterScripts_Server()", Logger.severity.INFO); #endregion #region Solar { SunProperties sun = new SunProperties(); RegisterForUpdates(10, sun.Update10); } RegisterForBlock(typeof(MyObjectBuilder_OxygenFarm), (block) => { Solar s = new Solar(block); RegisterForUpdates(1, s.Update1, block); }); RegisterForBlock(typeof(MyObjectBuilder_SolarPanel), (block) => { Solar s = new Solar(block); RegisterForUpdates(1, s.Update1, block); }); #endregion #region Attached RegisterForBlock(typeof(MyObjectBuilder_MotorStator), (block) => { StatorRotor.Stator stator = new StatorRotor.Stator(block); RegisterForUpdates(1, stator.Update10, block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorAdvancedStator), (block) => { StatorRotor.Stator stator = new StatorRotor.Stator(block); RegisterForUpdates(1, stator.Update10, block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorRotor), (block) => { new StatorRotor.Rotor(block); }); RegisterForBlock(typeof(MyObjectBuilder_MotorAdvancedRotor), (block) => { new StatorRotor.Rotor(block); }); RegisterForBlock(typeof(MyObjectBuilder_ExtendedPistonBase), (block) => { Piston.PistonBase pistonBase = new Piston.PistonBase(block); RegisterForUpdates(100, pistonBase.Update, block); }); RegisterForBlock(typeof(MyObjectBuilder_PistonTop), (block) => { new Piston.PistonTop(block); }); RegisterForBlock(typeof(MyObjectBuilder_ShipConnector), (block) => { Connector conn = new Connector(block); RegisterForUpdates(10, conn.Update, block); }); RegisterForBlock(typeof(MyObjectBuilder_LandingGear), (block) => { new LandingGear(block); }); #endregion RegisterForBlock(typeof(MyObjectBuilder_OreDetector), block => { var od = new OreDetector(block); RegisterForUpdates(1000, od.Update, block); }); RegisterForPlayerLeaves(UserSettings.OnPlayerLeave); }
public GuidedMissile(Cluster missiles, GuidedMissileLauncher launcher, Target initialTarget) : this(missiles.Master, launcher, initialTarget) { myCluster = missiles; }
public GuidedMissile(Cluster missiles, GuidedMissileLauncher launcher, out Target initialTarget) : this(missiles.Master, launcher, out initialTarget) { myCluster = missiles; }