private bool SetRuleByIndex(int _index)
        {
            if (_index < 0 || _index >= m_Rules.Count)
            {
                return(false);
            }

            BehaviourModeRuleObject new_rule = m_Rules[_index];

            if (m_Rule != new_rule || m_Rule == null)
            {
                m_LastRule      = m_Rule;
                m_LastRuleIndex = m_RuleIndex;
                m_Rule          = new_rule;
                m_RuleIndex     = _index;

                m_RuleChanged = true;
            }
            else
            {
                m_RuleChanged = false;
            }

            return(m_RuleChanged);
        }
Exemplo n.º 2
0
        public void Copy(BehaviourModeRuleObject _rule)
        {
            if (_rule == null)
            {
                return;
            }

            base.Copy(_rule);

            Animation.Copy(_rule.Animation);
            Look.Copy(_rule.Look);
            Audio.Copy(_rule.Audio);
            Inventory.Copy(_rule.Inventory);
            Events.Copy(_rule.Events);
            Effect.Copy(_rule.Effect);
            Link.Copy(_rule.Link);
            Move.Copy(_rule.Move);
            Body.Copy(_rule.Body);
            Influences.Copy(_rule.Influences);

            Key                 = _rule.Key;
            LengthMax           = _rule.LengthMax;
            LengthMin           = _rule.LengthMin;
            LengthMaximum       = _rule.LengthMaximum;
            Weight              = _rule.Weight;
            UseCustomLength     = _rule.UseCustomLength;
            FoldoutCustomLength = _rule.FoldoutCustomLength;
        }
        public BehaviourModeRuleObject(BehaviourModeRuleObject _rule)
        {
            Animation = _rule.Animation;

            Audio           = new AudioDataObject(_rule.Audio);
            Effect          = _rule.Effect;
            Foldout         = _rule.Foldout;
            Influences      = _rule.Influences;
            Key             = _rule.Key;
            LengthMax       = _rule.LengthMax;
            LengthMin       = _rule.LengthMin;
            UseCustomLength = _rule.UseCustomLength;
            Links           = _rule.Links;
            Move            = _rule.Move;
            UseFootsteps    = _rule.UseFootsteps;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Sets a rule by the specified index.
        /// </summary>
        /// <returns><c>true</c>, if rule was set by index, <c>false</c> otherwise.</returns>
        /// <param name="_index">Index.</param>
        private bool SetRuleByIndex(int _index)
        {
            List <BehaviourModeRuleObject> _rules = ValidRules;

            if (_index < 0 || _index >= _rules.Count)
            {
                if (DebugLogIsEnabled)
                {
                    PrintDebugLog(this, "SetRuleByIndex : Behaviour mode rule index '" + _index + "' out of range, please check this mode and its rules!");
                }
                return(false);
            }

            BehaviourModeRuleObject _new_rule = _rules[_index];

            if (m_Rule != _new_rule || m_Rule == null)
            {
                //if( m_Rule != null )
                //	m_Rule.Stop();

                m_LastRule   = m_Rule;
                m_Rule       = _new_rule;
                m_Rule.Index = _index;

                //if( m_Rule != null )
                //	m_Rule.Start( OwnerComponent );

                m_RuleChanged = true;
            }
            else
            {
                m_RuleChanged = false;
            }

            return(m_RuleChanged);
        }
Exemplo n.º 5
0
 public BehaviourModeRuleObject(BehaviourModeRuleObject _rule) : base(_rule as ICEOwnerObject)
 {
     Copy(_rule);
 }
        public void Play(BehaviourModeRuleObject _rule)
        {
            if (_rule == null || _rule.Animation.InterfaceType == AnimationInterfaceType.NONE)
            {
                return;
            }

            if (m_Animator != null && m_animator_last_boolean != "")
            {
                m_Animator.SetBool(m_animator_last_boolean, false);
            }

            //m_AnimatorAutoSpeed = false;

            if (_rule.Animation.InterfaceType == AnimationInterfaceType.ANIMATION)
            {
                if (m_Animation == null)
                {
                    Debug.LogError("CAUTION : Missing Animation Component on " + m_Owner.gameObject.name);
                    return;
                }

                WrapMode _mode = _rule.Animation.Animation.wrapMode;

                m_Animation[_rule.Animation.Animation.Name].wrapMode = _mode;
                //animation[ m_BehaviourData.AnimationName ].speed = Mathf.Clamp( m_BehaviourData.MoveVelocity. controller.velocity.magnitude, 0.0, runMaxAnimationSpeed);
                m_Animation.CrossFade(_rule.Animation.Animation.Name, _rule.Animation.Animation.TransitionDuration);
            }
            else if (_rule.Animation.InterfaceType == AnimationInterfaceType.CLIP)
            {
                if (m_Animation == null)
                {
                    m_Animation = m_Owner.AddComponent <Animation>();
                }

                if (m_Animation != null && _rule.Animation.Clip.Clip != null)
                {
                    m_Animation.AddClip(_rule.Animation.Clip.Clip, _rule.Animation.Clip.Clip.name);
                    m_Animation.CrossFade(_rule.Animation.Clip.Clip.name, _rule.Animation.Clip.TransitionDuration);
                }
            }
            else if (_rule.Animation.InterfaceType == AnimationInterfaceType.ANIMATOR)
            {
                if (m_Animator == null)
                {
                    Debug.LogError("Missing Animator Component!");
                    return;
                }

                if (_rule.Animation.Animator.Type == AnimatorControlType.DIRECT)
                {
                    m_Animator.CrossFade(_rule.Animation.Animator.Name, _rule.Animation.Animator.TransitionDuration, -1, 0);
                    m_Animator.speed = _rule.Animation.Animator.Speed;
                    //m_AnimatorAutoSpeed = _rule.Animation.Animator.AutoSpeed;

                    /*if( _rule.Animation.Animator.AutoSpeed )
                     *      m_Animator.speed = Mathf.Clamp( m_BehaviourData.MoveVelocity. controller.velocity.magnitude, 0.0, runMaxAnimationSpeed);
                     * else*/
                }
                else if (_rule.Animation.Animator.Type == AnimatorControlType.CONDITIONS)
                {
                    if (_rule.Animation.Animator.Boolean != "-")
                    {
                        m_Animator.SetBool(_rule.Animation.Animator.Boolean, true);
                        m_animator_last_boolean = _rule.Animation.Animator.Boolean;
                    }

                    if (_rule.Animation.Animator.Trigger != "-")
                    {
                        m_Animator.SetTrigger(_rule.Animation.Animator.Trigger);
                    }
                }
                else if (_rule.Animation.Animator.Type == AnimatorControlType.ADVANCED)
                {
                }
            }
        }
Exemplo n.º 7
0
        private void DrawBehaviourModeRuleGizmos(TargetObject _target, BehaviourModeRuleObject _rule)
        {
                        #if UNITY_EDITOR
            if (_target == null || _target.IsValid == false || _rule == null)
            {
                return;
            }

            Vector3 _owner_position         = m_Owner.transform.position;
            Vector3 _target_pos             = _target.TargetPosition;
            Vector3 _target_move_position   = _target.TargetMovePosition;
            float   _target_stop_distance   = _target.TargetStopDistance;
            float   _target_selection_range = _target.Selectors.SelectionRange;
            //float _target_selection_angle = _target.Selectors.SelectionAngle;

            DrawOwnerGizmos();

            if (Application.isPlaying)
            {
                DrawPathGizmos();
                DrawMoveGizmos();
            }

            float _level = GetLevel();

            _owner_position.y       = _level;
            _target_pos.y           = _level;
            _target_move_position.y = _level;

            if (_rule.Move.Type == MoveType.DEFAULT)
            {
            }
            else if (_rule.Move.Type == MoveType.AVOID)
            {
                MoveContainer _move = _rule.Move;
                //float _radius = _target_selection_range  + 0.25f;// _move.Avoid.MaxAvoidDistance;//( _target_selection_range / 2 ) + 0.25f;
                //float _angle = _move.Avoid.MaxDirectionAngle;

                Gizmos.color = MoveAvoidColor;
                UnityEditor.Handles.color = Gizmos.color;

                //DrawDirectionAngle( m_Owner.transform, _radius, _angle );
                //DrawDirectionAngle( _target.TargetGameObject.transform, _radius, _angle );

                Vector3 _right           = Vector3.Cross(_target.TargetGameObject.transform.up, _target.TargetGameObject.transform.forward);
                Vector3 _avoid_pos_right = _target_pos + (_right * _move.Avoid.AvoidDistance);
                Vector3 _avoid_pos_left  = _target_pos + (_right * -_move.Avoid.AvoidDistance);

                CustomGizmos.OffsetPath(_target_pos, 0, _avoid_pos_right, _move.MoveStopDistance);
                CustomGizmos.DottedCircle(_avoid_pos_right, _move.MoveStopDistance, 5, 2);
                CustomGizmos.OffsetPath(_target_pos, 0, _avoid_pos_left, _move.MoveStopDistance);
                CustomGizmos.DottedCircle(_avoid_pos_left, _move.MoveStopDistance, 5, 2);

                if (Application.isPlaying)
                {
                    /*
                     * Gizmos.color = Color.blue;
                     * Gizmos.DrawLine( _target_pos, CreatureControl.Creature.Move.AvoidMovePosition );
                     * Gizmos.color = Color.red;
                     * Gizmos.DrawLine( _target_pos, CreatureControl.Creature.Move.MovePosition );
                     */
                }
            }
            else if (_rule.Move.Type == MoveType.ESCAPE)
            {
                MoveContainer _move             = _rule.Move;
                float         _inner_radius     = (_target_selection_range / 2) + 0.25f;
                float         _outer_radius     = _inner_radius + _rule.Move.MoveSegmentLength;
                float         _outer_radius_max = _inner_radius + _rule.Move.MoveSegmentLengthMax;
                float         _outer_radius_min = _inner_radius + _rule.Move.MoveSegmentLengthMin;

                float _inner_angle = 0;
                float _outer_angle = _inner_angle + _move.Escape.RandomEscapeAngle;

                Gizmos.color = MoveEscapeColor;

                Vector3 _left_inner_pos  = Tools.GetDirectionPosition(_target.TargetGameObject.transform, -_inner_angle, _inner_radius);
                Vector3 _right_inner_pos = Tools.GetDirectionPosition(_target.TargetGameObject.transform, _inner_angle, _inner_radius);
                Vector3 _left_outer_pos  = Tools.GetDirectionPosition(_target.TargetGameObject.transform, -_outer_angle, _outer_radius);
                Vector3 _right_outer_pos = Tools.GetDirectionPosition(_target.TargetGameObject.transform, _outer_angle, _outer_radius);

                _target_pos.y      = _level;
                _left_inner_pos.y  = _level;
                _right_inner_pos.y = _level;
                _left_outer_pos.y  = _level;
                _right_outer_pos.y = _level;

                Gizmos.DrawLine(_target_pos, _left_inner_pos);
                Gizmos.DrawLine(_target_pos, _right_inner_pos);

                Gizmos.DrawLine(_left_inner_pos, _left_outer_pos);
                Gizmos.DrawLine(_right_inner_pos, _right_outer_pos);

                CustomGizmos.Arc(_target.TargetGameObject.transform, _inner_radius, 1, -_inner_angle, _inner_angle, _level, false);
                CustomGizmos.Arc(_target.TargetGameObject.transform, _outer_radius, 1, -_outer_angle, _outer_angle, _level, false);

                CustomGizmos.Arc(_target.TargetGameObject.transform, _outer_radius_min, 1, -_outer_angle, _outer_angle, _level, true);
                CustomGizmos.Arc(_target.TargetGameObject.transform, _outer_radius_max, 1, -_outer_angle, _outer_angle, _level, true);

                // DENGER ZONE BEGIN
                _inner_radius += 0.25f;
                float _degree = CustomGizmos.GetBestDegrees(_inner_radius, _inner_angle);
                CustomGizmos.ArrowArc(_target.TargetGameObject.transform, _inner_radius, _degree, -_inner_angle, _inner_angle, _level);

                Transform _target_transform = _target.TargetGameObject.transform;
                Vector3   _center           = _target_transform.position;
                Vector3   _center_pos       = Tools.GetDirectionPosition(_target_transform, 0, _inner_radius + (_inner_radius / 10));
                Vector3   _left_pos         = Tools.GetDirectionPosition(_target_transform, -_inner_angle, _inner_radius);
                Vector3   _right_pos        = Tools.GetDirectionPosition(_target_transform, _inner_angle, _inner_radius);

                _center.y     = _level;
                _center_pos.y = _level;
                _left_pos.y   = _level;
                _right_pos.y  = _level;

                Gizmos.DrawLine(_center, _center_pos);
                Gizmos.DrawLine(_center, _left_pos);
                Gizmos.DrawLine(_center, _right_pos);
            }
            else if (_rule.Move.Type == MoveType.ORBIT)
            {
                MoveContainer _move    = _rule.Move;
                float         _degrees = CreatureControl.Creature.Move.OrbitDegrees;
                float         _radius  = _move.Orbit.Radius;

                if (Application.isPlaying)
                {
                    _move   = CreatureControl.Creature.Move.CurrentMove;
                    _radius = CreatureControl.Creature.Move.OrbitRadius;
                }

                Gizmos.color = MoveOrbitColor;
                CustomGizmos.Orbit(m_Owner.transform.position, _target_move_position, _radius, _degrees, _move.Orbit.RadiusShift, _move.Orbit.MinDistance, _move.Orbit.MaxDistance, _level);
            }
            else if (_rule.Move.Type == MoveType.DETOUR)
            {
                Vector3 _detour_pos = _rule.Move.Detour.Position;

                _detour_pos.y = _level;

                Gizmos.color = MoveDetourColor;
                CustomGizmos.OffsetPath(_detour_pos, _rule.Move.MoveStopDistance, _target_move_position, _target_stop_distance);
                CustomGizmos.Circle(_detour_pos, _rule.Move.MoveStopDistance, 5, false);                   // STOP DISTANCE RANGE
                //DrawMoveGizmos( Vector3 _initial_position, Vector3 _move_position, float _stop_distance, float _random_range, Vector3 _target_position, float _target_stop_distance )
            }
                        #endif
        }