public override void Start() { List <EncounterAgent> potentialEnemies = encounter.GetEnemiesInEncounter(controlledShip.GetComponent <EncounterAgent>()); float shortestSquaredDist = 0f; EncounterAgent closestEnemy = null; foreach (var enemy in potentialEnemies) { float squaredDist = (controlledShip.transform.position - enemy.transform.position).sqrMagnitude; Dockable dockableComponent = enemy.GetComponent <Dockable>(); if (dockableComponent == null || dockableComponent.Docked == false) { if ((closestEnemy == null || squaredDist < shortestSquaredDist)) { closestEnemy = enemy; shortestSquaredDist = squaredDist; } } } if (closestEnemy != null) { Succeed(); onTargetFoundCallback(closestEnemy); } else { Fail("ENCOUNTER OVER"); } }
public override void Dock(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock) { isDocking = true; Setup(dockableActor, dockable, dockActor, dock); QueueChild(new Move(dockableActor, dockEntry, WDist.Zero)); state = SequenceState.Move; }
private static bool Prefix(VehicleDockingBay __instance) { if (__instance != null) { Dockable docked = __instance.GetDockedObject(); if (docked != null) { if (docked.name.Contains("SeaTruck")) { MainPatch.seaTruckIsDocked = true; } else if (docked.name.Contains("Exosuit")) { MainPatch.exoSuitIsDocked = true; } } else { MainPatch.seaTruckIsDocked = false; MainPatch.exoSuitIsDocked = false; } } return(false); }
private void Awake() { dockableComponent = GetComponent <Dockable>(); spriteComponent = GetComponent <SpriteRenderer>(); dockableComponent.OnShipDocked += DockableComponent_OnShipDocked; dockableComponent.OnShipUndocked += DockableComponent_OnShipUndocked; }
public Docking(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock) { DockableActor = dockableActor; Dockable = dockable; DockActor = dockActor; Dock = dock; DockingState = DockingState.Approaching; }
public DockAtOrder(GameObject ship) : base(ship) { target = null; goToOrder = new GoToOrder(ship); goToOrder.OnStateFailed += GoToOrder_OnStateFailed; goToOrder.OnStateSucceeded += GoToOrder_OnStateSucceeded; dockableComponent = controlledShip.GetComponent <Dockable>(); dockableComponent.OnShipDocked += OnShipDocked; }
private void Awake() { shipControllerInput = GetComponent <ShipPiloting> (); dockableComponent = GetComponent <Dockable>(); if (dockableComponent != null) { dockableComponent.OnShipDocked += DockableComponent_OnShipDocked; dockableComponent.OnShipUndocked += DockableComponent_OnShipUndocked; } }
public override bool CanDock(Actor target, Dockable dockable) { if (dockable == null && !target.Info.HasTraitInfo<TankerInfo>()) return false; if (dockable != null && !(dockable is Tanker)) return false; var tanker = dockable as Tanker; return tanker == null || tanker.IsValidPowerStation(self); }
private void Setup(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock) { this.dockableActor = dockableActor; this.dock = dock; dockTarget = dockActor.CenterPosition + dock.Info.Position; dockEntry = dockableActor.World.Map.CellContaining(dockTarget + new WVec(0, -1024, 0).Rotate(WRot.FromFacing(dock.Info.Facing))); speed = dockableActor.Trait <Mobile>().Info.Speed; distance = (dockTarget - dockableActor.World.Map.CenterOfCell(dockEntry)).Length; }
public DockAtOrder(GameObject ship, Dock target) : base(ship) { this.target = target; goToOrder = new GoToOrder(ship, target.transform.position, target.DockingRange * 0.8f); goToOrder.OnStateFailed += GoToOrder_OnStateFailed; goToOrder.OnStateSucceeded += GoToOrder_OnStateSucceeded; dockableComponent = controlledShip.GetComponent <Dockable>(); dockableComponent.OnShipDocked += OnShipDocked; }
public override bool CanDock(Actor target, Dockable dockable) { if (dockable == null && !target.Info.HasTraitInfo <RepairableVehicleInfo>()) { return(false); } if (dockable != null && !(dockable is RepairableVehicle)) { return(false); } return(target.Owner == self.Owner && target.Trait <Health>().DamageState != DamageState.Undamaged); }
public override bool CanDock(Actor target, Dockable dockable) { if (dockable == null && !target.Info.HasTraitInfo <TankerInfo>()) { return(false); } if (dockable != null && !(dockable is Tanker)) { return(false); } var tanker = dockable as Tanker; return(tanker == null || tanker.IsValidDrillrig(self)); }
// This method appears to be flawless as-is; no exceptions seem to be getting thrown here. private List<ItemsContainer> GetSeamothStorage(Dockable dockable) { if (dockable == null) { //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Error, $"GetSeamothStorage invoked with null dockable"); return null; } //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: running on dockable {dockable.name}; dockable.truckMotor = " + (dockable.truckMotor != null ? dockable.truckMotor.ToString() : "null")); Equipment modules = null; if (dockable.vehicle is SeaMoth) modules = dockable.vehicle.modules; else if (dockable.truckMotor != null) modules = dockable.truckMotor.upgrades.modules; if (modules != null) { var results = new List<ItemsContainer>(); int i = 0; using (var e = modules.GetEquipment()) { //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: start enumerator"); while (e.MoveNext()) { //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: For dockable {dockable.name}, using module {i}"); var module = e.Current.Value; if (module != null && module.item != null) { var container = module.item.GetComponent<SeamothStorageContainer>(); if (container != null && !container.gameObject.name.Contains("Torpedo")) { //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: For dockable {dockable.name}, found SeamothStorageContainer at index {i}"); results.Add(container.container); } } i++; } } //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: got {results.Count} storage containers"); return results; } //QModManager.Utility.Logger.Log(QModManager.Utility.Logger.Level.Debug, $"GetSeamothStorage: could not get Equipment instance"); return null; }
public override void Start() { uint myFaction = controlledShip.GetComponent <Ownership>().OwnerFactionID; List <Ownership[]> potentialEnemies = new List <Ownership[]>(); for (int facID = 1; facID < Ownership.FactionCount; facID++) { if (facID != myFaction) { potentialEnemies.Add(Ownership.GetFactionMembers(facID)); } } float shortestSquaredDist = 0f; EncounterAgent closestEnemy = null; foreach (var enemyGroup in potentialEnemies) { foreach (var enemy in enemyGroup) { EncounterAgent encounterAgent = enemy.GetComponent <EncounterAgent>(); Dockable dockableComponent = enemy.GetComponent <Dockable>(); if (encounterAgent != null && (dockableComponent == null || dockableComponent.Docked == false)) { float squaredDist = (controlledShip.transform.position - enemy.transform.position).sqrMagnitude; if (squaredDist < maxDistance * maxDistance && (closestEnemy == null || squaredDist < shortestSquaredDist)) { closestEnemy = encounterAgent; shortestSquaredDist = squaredDist; } } } } if (closestEnemy != null) { Succeed(); targetFoundCallback(closestEnemy); } else { Fail("NO ENEMY IN RANGE"); } }
public TankerCycle(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock) : base(dockableActor, dockable, dockActor, dock) { var tanker = (Tanker)dockable; if (dockActor == null) { DockingState = DockingState.Undocked; return; } if (dockActor.Info.HasTraitInfo <DrillrigInfo>()) { tanker.Drillrig = dockActor; } else { tanker.PowerStation = dockActor; } }
void OnShipDocked(Dockable dockable) { // Create line var owner = dockable.GetComponent <Ownership>(); ShipPanelLine line; int currentLineAmount = 0; if (owner == null || owner.OwnerFactionID == 0) { // Create line on station's side line = CreateLine(dockable.gameObject); currentLineAmount = stationTradingPanelLines.Count; MoveLineToPanel(stationTradingPanelContent.transform, stationTradingPanelLines, line); } else if (owner != null && owner.OwnerFactionID == 1) { // Create line on player's side line = CreateLine(dockable.gameObject); currentLineAmount = playerTradingPanelLines.Count; MoveLineToPanel(playerTradingPanelContent.transform, playerTradingPanelLines, line); } else { line = null; } if (line != null) { line.GetComponent <RectTransform>().anchoredPosition = new Vector2(0f, -lineHeight * (currentLineAmount + 0.5f)); line.SetLineInfo(dockable.gameObject); line.gameObject.SetActive(true); Action <Dock> handler = null; handler = (dock) => { dockable.OnShipUndocked -= handler; OnShipUndocked(line); }; dockable.OnShipUndocked += handler; } }
private void OnPlayerShipChanged(Dockable playerShip) { if (playerLastShip != null) { playerLastShip.OnShipInDockingRange -= PlayerShip_OnShipInDockingRange; playerLastShip.OnShipOutOfDockingRange -= PlayerShip_OnShipOutOfDockingRange; playerLastShip.OnShipDocked -= PlayerShip_OnShipDocked; playerLastShip.OnShipUndocked -= PlayerShip_OnShipUndocked; playerLastShip.GetComponent <Damageable>().OnDeath -= DockingInteractionUI_OnDeath; } if (playerShip != null) { playerShip.OnShipInDockingRange += PlayerShip_OnShipInDockingRange; playerShip.OnShipOutOfDockingRange += PlayerShip_OnShipOutOfDockingRange; playerShip.OnShipDocked += PlayerShip_OnShipDocked; playerShip.OnShipUndocked += PlayerShip_OnShipUndocked; playerShip.GetComponent <Damageable>().OnDeath += DockingInteractionUI_OnDeath; } playerLastShip = playerShip; }
public override void Undock(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock) { Setup(dockableActor, dockable, dockActor, dock); QueueChild(new Drag(dockableActor, dockTarget, dockableActor.World.Map.CenterOfCell(dockEntry), distance / speed)); state = SequenceState.Drag; }
public SellCargoToDockedStation(GameObject ship) : base(ship) { dockableComponent = ship.GetComponent <Dockable>(); shipCargoComponent = ship.GetComponent <Cargo>(); }
public UndockOrder(GameObject ship) : base(ship) { dockableComponent = ship.GetComponent <Dockable>(); dockableComponent.OnShipUndocked += DockableComponent_OnShipUndocked; }
public void UndockShip(Dockable ship) { dockedShips.Remove(ship); OnDockableUndocked(ship); }
public bool DockShip(Dockable ship) { dockedShips.Add(ship); OnDockableDocked(ship); return(true); }
public DockPanelUI() { InitializeComponent(); StartPosition = FormStartPosition.Manual; Location = new Point(2150, 150); m_dock.ActiveContentChanged += (s, a) => { Debug.WriteLine($"ActiveContentChanged: {a.ContentOld?.DockControl.PersistName} -> {a.ContentNew?.DockControl.PersistName}"); }; m_dock.ActivePaneChanged += (s, a) => { Debug.WriteLine($"ActivePaneChanged: {a.PaneOld?.CaptionText} -> {a.PaneNew?.CaptionText}"); }; m_dock.DockableMoved += (s, a) => { Debug.WriteLine($"DockableMoved: {a.Action} {a.Dockable.DockControl.PersistName}"); }; var bs = BorderStyle.None; //FixedSingle; var d0 = new Dockable("Dockable 0") { BorderStyle = bs }; var d1 = new Dockable("Dockable 1") { BorderStyle = bs }; var d2 = new Dockable("Dockable 2") { BorderStyle = bs }; var d3 = new Dockable("Dockable 3") { BorderStyle = bs }; var d4 = new Dockable("Dockable 4") { BorderStyle = bs }; var d5 = new Dockable("Dockable 5") { BorderStyle = bs }; var d6 = new Dockable("Dockable 6") { BorderStyle = bs }; var d7 = new Dockable("Dockable 7") { BorderStyle = bs }; var d8 = new Dockable("Dockable 8") { BorderStyle = bs }; var d9 = new Dockable("Dockable 9") { BorderStyle = bs }; var d10 = new TextDockable("TextDockable 10") { BorderStyle = bs }; m_dock.Add(d0); d0.DockControl.DockSite = EDockSite.Centre; m_dock.Add(d1); d1.DockControl.DockSite = EDockSite.Left; m_dock.Add(d2); d2.DockControl.DockSite = EDockSite.Top; m_dock.Add(d3); d3.DockControl.DockSite = EDockSite.Right; m_dock.Add(d4); d4.DockControl.DockSite = EDockSite.Right; m_dock.Add(d5); d5.DockControl.DockSite = EDockSite.Bottom; m_dock.Add(d6); d6.DockControl.DockSite = EDockSite.Bottom; m_dock.Add(d7); d7.DockControl.DockSite = EDockSite.Centre; m_dock.Add(d8); d8.DockControl.DockSite = EDockSite.Top; m_dock.Add(d9, EDockSite.Centre, EDockSite.Left); m_dock.Add(d10); d0.DockControl.DockPane.TabStripCtrl.StripLocation = EDockSite.Left; d2.DockControl.DockPane.TabStripCtrl.StripLocation = EDockSite.Top; d3.DockControl.DockPane.TabStripCtrl.StripLocation = EDockSite.Right; m_menu.Items.Add(m_dock.WindowsMenu()); }
public abstract void Undock(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock);