public float GetOrderPriority(AIObjective objective) { if (objective == ForcedOrder) { return(HighestOrderPriority); } var currentOrder = CurrentOrders.FirstOrDefault(o => o.Objective == objective); if (currentOrder.Objective == null) { return(HighestOrderPriority); } else if (currentOrder.ManualPriority > 0) { if (objective.ForceHighestPriority) { return(HighestOrderPriority); } if (objective.PrioritizeIfSubObjectivesActive && objective.SubObjectives.Any()) { return(HighestOrderPriority); } return(MathHelper.Lerp(LowestOrderPriority, HighestOrderPriority - 1, MathUtils.InverseLerp(1, CharacterInfo.HighestManualOrderPriority, currentOrder.ManualPriority))); } #if DEBUG DebugConsole.AddWarning("Error in order priority: shouldn't return 0!"); #endif return(0); }
public OrderInfo?GetCurrentOrderInfo() { if (currentOrder == null) { return(null); } return(CurrentOrders.FirstOrDefault(o => o.Objective == CurrentOrder)); }
private void DismissSelf(Order order, string option) { var currentOrder = CurrentOrders.FirstOrDefault(oi => oi.MatchesOrder(order, option)); if (currentOrder.Order == null) { #if DEBUG DebugConsole.ThrowError("Tried to self-dismiss an order, but no matching current order was found"); #endif return; } #if CLIENT if (GameMain.GameSession?.CrewManager != null && GameMain.GameSession.CrewManager.IsSinglePlayer) { GameMain.GameSession?.CrewManager?.SetCharacterOrder(character, Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(currentOrder), currentOrder.ManualPriority, character); } #else GameMain.Server?.SendOrderChatMessage(new OrderChatMessage(Order.GetPrefab("dismissed"), Order.GetDismissOrderOption(currentOrder), currentOrder.ManualPriority, currentOrder.Order?.TargetSpatialEntity, character, character)); #endif }
public T GetOrder <T>() where T : AIObjective => CurrentOrders.FirstOrDefault(o => o.Objective is T).Objective as T;