示例#1
0
        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);
        }
示例#2
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;