Exemplo n.º 1
0
 /// <summary>
 /// Adds survival alert, what to do when this alert is triggered and trigger for this ocasion
 /// </summary>
 /// <param name="survivalAlert">trigger for survival decision</param>
 /// <param name="decision">decision for handeling survival</param>
 /// <param name="trigger">percentage of max parameter for health, oxygen and fuel issues | distance for detecting enemy</param>
 public void AddSurvivalAlert(MyBotSurvivalAlertsEnum survivalAlert, MyBotDecisionLogicsEnum decision, int trigger)
 {
     var survivalHandler = new MySurvivalDecision { SurvivalDecision = decision, SurvivalTrigger = trigger };
     m_survivalKit.Add(survivalAlert, survivalHandler);
 }
Exemplo n.º 2
0
        /// <summary>
        /// Check one survival alert and decide if it is triggered
        /// </summary>
        /// <param name="alert"></param>
        /// <param name="check"></param>
        /// <returns></returns>
        private bool CheckSurvivalAlert(MyBotSurvivalAlertsEnum alert, MySurvivalDecision check)
        {
            switch (alert)
            {
                case MyBotSurvivalAlertsEnum.LowHealth:
                    {
                        //VOICE: DMG taking / LOW HP 
                        //TODO: merge
                        //if (check.SurvivalTrigger * DEFAULT_HEALTH_MAX < this.Health) return true;
                        return false;
                    }
                case MyBotSurvivalAlertsEnum.LowOxygen:
                    {
                        //VOICE: LOW AIR/ EMPTY AIR
                        return false;
                    }
                case MyBotSurvivalAlertsEnum.LowFuel:
                    {
                        //VOICE: LOW FUEL / EMPTY FUEL
                        return false;
                    }
                case MyBotSurvivalAlertsEnum.UnderAttack:
                    {
                        if (Threat != null)
                        {
                            if (MyFactions.GetFactionsRelation(this.Faction, Threat.Faction) == MyFactionRelationEnum.Enemy
                                ||
                                MyFactions.GetFactionsRelation(this.Faction, Threat.Faction) == MyFactionRelationEnum.Neutral)
                            {
                                Target = Threat;
                                return true;
                            }
                        }

                        return false;
                    }

                case MyBotSurvivalAlertsEnum.EnemyInsight:
                    {
                        //handle this with under attack
                        if (Threat != null && m_survivalKit.ContainsKey(MyBotSurvivalAlertsEnum.UnderAttack))
                            return false;
                        //VOICE: DETECT PLAYER

                        //Search for targets around
                        //find new target if old target is hidden
                        if (Target == null || !CheckCanSee(ref m_canSeeCheck, Target) )
                        {
                            Target = SearchTargetToAttack(check.SurvivalTrigger);

                            if (Target != null)
                            {
                                m_isInCombat = true;
                                m_behaviourTimeCounter = Int16.MaxValue;
                                return true;
                            }
                            else
                            {
                                Target = null;
                                m_isInCombat = false;
                                m_behaviourTimeCounter = Int16.MaxValue;
                            }
                        }
                        else if (Target.IsDead())
                        {
                            Target = null;
                            m_isInCombat = false;
                            m_behaviourTimeCounter = Int16.MaxValue;
                            return true;
                        }
                        else 
                            if (
                                MyFactions.GetFactionsRelation(this.Faction, Target.Faction) == MyFactionRelationEnum.Enemy
                                &&
                                (GetPosition() - Target.GetPosition()).Length() < MAX_ENEMY_IN_SIGHT)
                            return true;

                        return false;
                    }
                case MyBotSurvivalAlertsEnum.CallForHelp: 
                    {
                        return false;
                    }
                case MyBotSurvivalAlertsEnum.Lost:
                    {
                        if (m_isLost)
                        {
                            return true;
                        }
                        return false;
                    }
                default:
                    {
                        return false;
                    }
            }
        }