/// <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); } }
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); }
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)); } }
public BehaviourModeObject CreateBehaviourMode(string _key) { BehaviourModeObject _mode = null; _key = GetFixedBehaviourModeKey(_key); if (_key != "" && !BehaviourModeExists(_key)) { _mode = new BehaviourModeObject(_key); } return(_mode); }
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); }
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); }
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)); } }
/// <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); } }
public BehaviourModeObject(BehaviourModeObject _mode) : base(_mode) { Copy(_mode); }
/// <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); }
/// <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); } } }