示例#1
0
        /// <summary>
        /// Draws the escort.
        /// </summary>
        public void DrawEscort()
        {
            if (!CreatureControl.Creature.Missions.Escort.TargetReady() || ShowEscort == false)
            {
                return;
            }

            TargetObject _target = CreatureControl.Creature.Missions.Escort.Target;

            DrawTargetGizmos(_target);

            if (!Application.isPlaying)
            {
                BehaviourModeObject _mode = null;
                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Escort.BehaviourModeFollow);
                DrawBehaviourModeGizmos(_target, _mode);

                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Escort.BehaviourModeEscort);
                DrawBehaviourModeGizmos(_target, _mode);

                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Escort.BehaviourModeIdle);
                DrawBehaviourModeGizmos(_target, _mode);

                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Escort.BehaviourModeStandby);
                DrawBehaviourModeGizmos(_target, _mode);
            }
        }
示例#2
0
        public BehaviourModeObject CopyBehaviourMode(BehaviourModeObject _mode)
        {
            string _key = _mode.Key;

            _key = Regex.Replace(_key, "COPY_OF_", "");

            _key = "COPY_OF_" + _key;

            if (BehaviourModeExists(_key))
            {
                int _index = 1;
                while (BehaviourModeExists(_key + "_" + _index))
                {
                    _index++;
                }

                _key += "_" + _index;
            }

            BehaviourModeObject _copy = new BehaviourModeObject(_mode);

            _copy.Key = _key;

            m_BehaviourModes.Add(_copy);

            return(_copy);
        }
示例#3
0
        private bool IsTargetUpdatePermitted(TargetObject _target)
        {
            if (_target == null)
            {
                return(false);
            }

            if (m_ActiveTarget == null || Behaviour.BehaviourMode == null || Behaviour.BehaviourMode.Favoured.Enabled == false)
            {
                return(true);
            }

            bool _permitted = true;

            if ((Behaviour.BehaviourMode.Favoured.Enabled == true) && (
                    (Behaviour.BehaviourMode.Favoured.FavouredMinimumPeriod > 0 && Behaviour.BehaviourTimer < Behaviour.BehaviourMode.Favoured.FavouredMinimumPeriod) ||
                    (Behaviour.BehaviourMode.Favoured.FavouredUntilNextMovePositionReached && !Move.MovePositionReached()) ||
                    (Behaviour.BehaviourMode.Favoured.FavouredUntilTargetMovePositionReached && !m_ActiveTarget.TargetMoveComplete) ||
                    (Behaviour.BehaviourMode.Favoured.FavouredUntilNewTargetInRange(_target, Vector3.Distance(_target.TargetGameObject.transform.position, m_Owner.transform.position))) ||
                    (Behaviour.BehaviourMode.HasActiveDetourRule && Behaviour.BehaviourMode.Favoured.FavouredUntilDetourPositionReached && !Move.DetourComplete)))
            {
                _permitted = false;
            }
            else
            {
                _permitted = true;
            }

            //mode check - the new mode could be also forced, so we have to check this here
            if (_permitted == false)
            {
                BehaviourModeObject _mode = Behaviour.GetBehaviourModeByKey(_target.BehaviourModeKey);

                if (_mode != null && _mode.Favoured.Enabled == true)
                {
                    if (Behaviour.BehaviourMode.Favoured.FavouredPriority > _mode.Favoured.FavouredPriority)
                    {
                        _permitted = false;
                    }
                    else if (Behaviour.BehaviourMode.Favoured.FavouredPriority < _mode.Favoured.FavouredPriority)
                    {
                        _permitted = true;
                    }
                    else
                    {
                        _permitted = (Random.Range(0, 1) == 0?false:true);
                    }
                }
            }


            return(_permitted);
        }
        public BehaviourModeObject(BehaviourModeObject _mode)
        {
            Favoured = _mode.Favoured;
            Foldout  = _mode.Foldout;
            Key      = _mode.Key;

            Rules.Clear();
            foreach (BehaviourModeRuleObject _rule in _mode.Rules)
            {
                Rules.Add(new BehaviourModeRuleObject(_rule));
            }
        }
示例#5
0
        public BehaviourModeObject CreateBehaviourMode(string _key)
        {
            BehaviourModeObject _mode = null;

            _key = GetFixedBehaviourModeKey(_key);

            if (_key != "" && !BehaviourModeExists(_key))
            {
                _mode = new BehaviourModeObject(_key);
            }

            return(_mode);
        }
示例#6
0
        private Vector3 DrawBehaviourModeGizmos(TargetObject _target, BehaviourModeObject _mode)
        {
            if (_target == null || _target.IsValid == false || _mode == null)
            {
                return(Vector3.zero);
            }

            foreach (BehaviourModeRuleObject _rule in _mode.Rules)
            {
                DrawBehaviourModeRuleGizmos(_target, _rule);
            }

            return(Vector3.zero);
        }
        /// <summary>
        /// Sets the behaviour mode by key.
        /// </summary>
        ///<description>Use this function to change the behaviour of your creature.</description>
        /// <param name="key">Key.</param>
        public void SetBehaviourModeByKey(string _key)
        {
            if (_key == "")
            {
                if (m_BehaviourModeKeyValid)
                {
                    Debug.LogWarning("CAUTION : THE CREATURE '" + m_Owner.gameObject.name.ToUpper() + "' HAVE NO BEHAVIOUR!");
                }
                m_BehaviourModeKeyValid = false;
                return;
            }
            else
            {
                m_BehaviourModeKeyValid = true;
            }

            if (BehaviourModeKey != _key || m_ActiveBehaviourMode == null || m_ActiveBehaviourMode.Rules == null || m_ActiveBehaviourMode.Rule == null)
            {
                m_LastBehaviourModeKey = m_ActiveBehaviourModeKey;
                m_LastBehaviourMode    = m_ActiveBehaviourMode;
                //m_LastBehaviourModeIndex = m_ActiveBehaviourModeIndex;

                m_ActiveBehaviourModeKey = _key;

                if (m_BehaviourModesKeys.TryGetValue(m_ActiveBehaviourModeKey, out m_ActiveBehaviourModeIndex))
                {
                    m_ActiveBehaviourMode = BehaviourModes[m_ActiveBehaviourModeIndex];
                }

                if (m_LastBehaviourMode != null)
                {
                    m_LastBehaviourMode.SetActive(false);
                }

                if (m_ActiveBehaviourMode != null)
                {
                    m_ActiveBehaviourMode.SetActive(true);
                }

                m_BehaviourTimer = 0;

                m_BehaviourModeChanged      = true;
                m_BehaviourModeRulesChanged = true;

                NextBehaviorModeRule(true);

                return;
            }
        }
        public string AddBehaviourMode(string _key)
        {
            _key = GetFixedBehaviourModeKey(_key);

            if (_key != "" && !BehaviourModeExists(_key))
            {
                BehaviourModeObject _mode = new BehaviourModeObject();
                _mode.Key = _key;
                _mode.Rules.Add(new BehaviourModeRuleObject());

                m_BehaviourModes.Add(_mode);
            }

            return(_key);
        }
示例#9
0
        protected BehaviourModeObject SetDesignatedBehaviourModeByKey(string _key)
        {
            if (string.IsNullOrEmpty(_key))
            {
                return(null);
            }

            m_DesignatedBehaviourModeKey = _key;
            m_DesignatedBehaviourMode    = null;

            if (m_BehaviourModesKeys.TryGetValue(m_DesignatedBehaviourModeKey, out m_ActiveBehaviourModeIndex))
            {
                m_DesignatedBehaviourMode = BehaviourModes[m_ActiveBehaviourModeIndex];
            }

            return(m_DesignatedBehaviourMode);
        }
示例#10
0
        public void Copy(BehaviourModeObject _object)
        {
            if (_object == null)
            {
                return;
            }

            base.Copy(_object);

            Favoured.Copy(_object.Favoured);
            Key = _object.Key;

            Rules.Clear();
            foreach (BehaviourModeRuleObject _rule in _object.Rules)
            {
                Rules.Add(new BehaviourModeRuleObject(_rule));
            }
        }
示例#11
0
        /// <summary>
        /// Draws the home.
        /// </summary>
        public void DrawHome()
        {
            if (!CreatureControl.Creature.Essentials.TargetReady() || ShowHome == false)
            {
                return;
            }

            TargetObject _target = CreatureControl.Creature.Essentials.Target;

            DrawTargetGizmos(_target);

            if (!Application.isPlaying)
            {
                BehaviourModeObject _mode = null;
                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Essentials.BehaviourModeTravel);
                DrawBehaviourModeGizmos(_target, _mode);

                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Essentials.BehaviourModeLeisure);
                DrawBehaviourModeGizmos(_target, _mode);

                _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Essentials.BehaviourModeRendezvous);
                DrawBehaviourModeGizmos(_target, _mode);
            }
        }
示例#12
0
 public BehaviourModeObject(BehaviourModeObject _mode) : base(_mode)
 {
     Copy(_mode);
 }
示例#13
0
        /// <summary>
        /// Sets the behaviour mode by key.
        /// </summary>
        ///<description>Use this function to change the behaviour of your creature.</description>
        /// <param name="key">Key.</param>
        public bool SetBehaviourModeByKey(string _key)
        {
            bool _behaviour_mode_changed = false;

            if (string.IsNullOrEmpty(_key))
            {
                if (m_BehaviourModeKeyIsValid)
                {
                    PrintDebugLog(this, "SetBehaviourModeByKey : Invalid behaviour mode key, please check the behaviour modes!");
                }

                m_BehaviourModeKeyIsValid = false;
            }
            else
            {
                m_BehaviourModeKeyIsValid = true;

                if (ActiveBehaviourModeKey != _key || !ActiveBehaviourIsReady)
                {
                    if (SetDesignatedBehaviourModeByKey(_key) == null)
                    {
                        PrintDebugLog(this, "SetBehaviourModeByKey : Behaviour Mode '" + m_DesignatedBehaviourModeKey + "' not exists, please check this behaviour mode!");
                    }
                    else if (m_DesignatedBehaviourMode == null || m_DesignatedBehaviourMode.ValidRules.Count == 0)
                    {
                        PrintDebugLog(this, "SetBehaviourModeByKey : Behaviour Mode '" + m_DesignatedBehaviourModeKey + "' have no valid rules, please check its behaviour modes rules!");
                    }
                    else
                    {
                        // stops the current behaviour mode include its active rules
                        if (m_ActiveBehaviourMode != null)
                        {
                            BehaviourAnimation.Stop(m_ActiveBehaviourMode.Rule.Animation);
                            m_ActiveBehaviourMode.Stop();
                        }

                        //BehaviourAudioPlayer.Stop();

                        m_LastBehaviourMode   = m_ActiveBehaviourMode;
                        m_ActiveBehaviourMode = m_DesignatedBehaviourMode;

                        // initialize the active behaviour mode
                        m_ActiveBehaviourMode.Start(OwnerComponent);

                        // initialize the active behaviour mode rule
                        NextBehaviorModeRule(true);

                        m_BehaviourTimer = 0;

                        m_BehaviourModeRulesChanged = true;
                        m_BehaviourModeChanged      = true;
                        _behaviour_mode_changed     = true;

                        if (OnBehaviourModeChanged != null)
                        {
                            OnBehaviourModeChanged(Owner, m_ActiveBehaviourMode, m_LastBehaviourMode);
                        }
                    }
                }
            }

            return(_behaviour_mode_changed);
        }
示例#14
0
        /// <summary>
        /// Draws the patrol.
        /// </summary>
        public void DrawPatrol()
        {
            if (!CreatureControl.Creature.Missions.Patrol.TargetReady() || ShowPatrol == false)
            {
                return;
            }

            TargetObject _target = null;
            Vector3      _target_move_position = Vector3.zero;
            float        _target_stop_distance = 0;

            WaypointObject _last_waypoint_target = CreatureControl.Creature.Missions.Patrol.Waypoints.GetLastValidWaypoint();

            Vector3 _last_target_move_position = Vector3.zero;
            float   _last_target_stop_distance = 0;

            if (_last_waypoint_target != null)
            {
                _last_target_move_position   = _last_waypoint_target.TargetMovePosition;
                _last_target_move_position.y = GetLevel();
                _last_target_stop_distance   = _last_waypoint_target.TargetStopDistance;
            }

            for (int i = 0; i < CreatureControl.Creature.Missions.Patrol.Waypoints.Waypoints.Count; i++)
            {
                _target = (TargetObject)CreatureControl.Creature.Missions.Patrol.Waypoints.Waypoints[i];

                if (_target.IsValid == false)
                {
                    continue;
                }

                _target_move_position   = _target.TargetMovePosition;
                _target_move_position.y = GetLevel();
                _target_stop_distance   = _target.TargetStopDistance;

                if (CreatureControl.Creature.Missions.Patrol.Waypoints.Waypoints[i].Enabled)
                {
                    DrawTargetGizmos(_target);

                    Color _default_color = Gizmos.color;
                    Gizmos.color = MoveProjectedPathColor;
                    CustomGizmos.OffsetPath(_last_target_move_position, _last_target_stop_distance, _target_move_position, _target_stop_distance);
                    Gizmos.color = _default_color;

                    _last_target_move_position = _target_move_position;
                    _last_target_stop_distance = _target_stop_distance;
                }
                else
                {
                    Color _color = TargetColor;
                    _color.a = 0.25f;
                    DrawTargetGizmos(_target, _color);
                }

                if (!Application.isPlaying)
                {
                    BehaviourModeObject _mode = null;
                    _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Patrol.GetBehaviourModeTravelByIndex(i));
                    DrawBehaviourModeGizmos(_target, _mode);

                    _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Patrol.GetBehaviourModePatrolByIndex(i));
                    DrawBehaviourModeGizmos(_target, _mode);

                    _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Patrol.GetBehaviourModeLeisureByIndex(i));
                    DrawBehaviourModeGizmos(_target, _mode);

                    _mode = CreatureControl.Creature.Behaviour.GetBehaviourModeByKey(CreatureControl.Creature.Missions.Patrol.GetBehaviourModeRendezvousByIndex(i));
                    DrawBehaviourModeGizmos(_target, _mode);
                }
            }
        }