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");
        }
    }
Example #2
0
 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;
 }
Example #3
0
        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);
        }
Example #4
0
    private void Awake()
    {
        dockableComponent = GetComponent <Dockable>();
        spriteComponent   = GetComponent <SpriteRenderer>();

        dockableComponent.OnShipDocked   += DockableComponent_OnShipDocked;
        dockableComponent.OnShipUndocked += DockableComponent_OnShipUndocked;
    }
Example #5
0
        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;
        }
    }
Example #8
0
		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);
		}
Example #9
0
        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;
    }
Example #11
0
        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);
        }
Example #12
0
        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;
		}
Example #14
0
    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");
        }
    }
Example #15
0
        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;
    }
Example #18
0
 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;
 }
Example #19
0
 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;
 }
Example #21
0
 public void UndockShip(Dockable ship)
 {
     dockedShips.Remove(ship);
     OnDockableUndocked(ship);
 }
Example #22
0
 public bool DockShip(Dockable ship)
 {
     dockedShips.Add(ship);
     OnDockableDocked(ship);
     return(true);
 }
Example #23
0
        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());
        }
Example #24
0
 public abstract void Undock(Actor dockableActor, Dockable dockable, Actor dockActor, Dock dock);