예제 #1
0
        /// <summary>
        /// Gets the visual sensor position.
        /// </summary>
        /// <returns>The visual sensor position.</returns>
        public Vector3 GetVisualSensorPosition()
        {
            if (Owner == null)
            {
                return(Vector3.zero);
            }

            Vector3 _position = Vector3.zero;

            if (UseDynamicVisualSensorPosition)
            {
                if (m_VisualSensorTransform == null)
                {
                    m_VisualSensorTransform = SystemTools.FindChildByName(VisualSensorName, Owner.transform);
                }
            }
            else
            {
                m_VisualSensorTransform = null;
            }

            if (m_VisualSensorTransform != null)
            {
                _position = m_VisualSensorTransform.position;
            }
            else
            {
                _position = PositionTools.FixTransformPoint(Owner.transform, VisualSensorOffset);
            }

            return(_position);
        }
예제 #2
0
        /// <summary>
        /// Sends the message.
        /// </summary>
        /// <param name="_method">Method.</param>
        protected virtual void SendMessage(BehaviourEvent _event)
        {
            if (Owner == null || _event == null || string.IsNullOrEmpty(_event.FunctionName))
            {
                return;
            }

            if (m_Receiver == null)
            {
                m_Receiver = Owner;
            }

            if (m_ReceiverTransform == null)
            {
                m_ReceiverTransform = SystemTools.FindChildByName(_event.ComponentName, m_Receiver.transform);
            }

            if (m_ReceiverTransform != null)
            {
                GameObject _receiver = m_ReceiverTransform.gameObject;

                switch (_event.ParameterType)
                {
                case BehaviourEventParameterType.Boolean:
                    _receiver.SendMessage(_event.FunctionName, _event.ParameterBoolean, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Integer:
                    _receiver.SendMessage(_event.FunctionName, _event.ParameterInteger, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Float:
                    _receiver.SendMessage(_event.FunctionName, _event.ParameterFloat, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.String:
                    _receiver.SendMessage(_event.FunctionName, _event.ParameterString, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Sender:
                    _receiver.SendMessage(_event.FunctionName, Owner, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.SenderComponent:
                    _receiver.SendMessage(_event.FunctionName, OwnerComponent, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.SenderTransform:
                    _receiver.SendMessage(_event.FunctionName, Owner.transform, SendMessageOptions.DontRequireReceiver);
                    break;

                default:
                    _receiver.SendMessage(_event.FunctionName, null, SendMessageOptions.DontRequireReceiver);
                    break;
                }

                if (DebugLogIsEnabled)
                {
                    PrintDebugLog(this, "Send Message '" + _event.FunctionName + "' with " + _event.ParameterType.ToString() + " parameter to " + _receiver.name + " (" + _receiver.GetInstanceID() + ")");
                }
            }
            else
            {
                switch (_event.ParameterType)
                {
                case BehaviourEventParameterType.Boolean:
                    m_Receiver.BroadcastMessage(_event.FunctionName, _event.ParameterBoolean, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Integer:
                    m_Receiver.BroadcastMessage(_event.FunctionName, _event.ParameterInteger, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Float:
                    m_Receiver.BroadcastMessage(_event.FunctionName, _event.ParameterFloat, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.String:
                    m_Receiver.BroadcastMessage(_event.FunctionName, _event.ParameterString, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.Sender:
                    m_Receiver.BroadcastMessage(_event.FunctionName, Owner, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.SenderComponent:
                    m_Receiver.BroadcastMessage(_event.FunctionName, OwnerComponent, SendMessageOptions.DontRequireReceiver);
                    break;

                case BehaviourEventParameterType.SenderTransform:
                    m_Receiver.BroadcastMessage(_event.FunctionName, Owner.transform, SendMessageOptions.DontRequireReceiver);
                    break;

                default:
                    m_Receiver.BroadcastMessage(_event.FunctionName, null, SendMessageOptions.DontRequireReceiver);
                    break;
                }

                if (DebugLogIsEnabled)
                {
                    PrintDebugLog(this, "Broadcast Message '" + _event.FunctionName + "' with " + _event.ParameterType.ToString() + " parameter to " + m_Receiver.name + " (" + m_Receiver.GetInstanceID() + ")");
                }
            }
        }
예제 #3
0
        private GameObject InstantiateNewEffect()
        {
            if (Owner == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(MountPointName.Trim()) && (m_MountPointTransform == null || m_MountPointTransform.name != MountPointName.Trim()))
            {
                m_MountPointTransform = SystemTools.FindChildByName(MountPointName, Owner.transform);
            }

            if (m_MountPointTransform == null)
            {
                m_MountPointTransform = Owner.transform;
            }

            Vector3 _position = m_MountPointTransform.position;
            Vector3 _offset   = Vector3.zero;

            if (OffsetType == RandomOffsetType.EXACT)
            {
                _offset = Offset;
            }
            else if (OffsetRadius > 0)
            {
                Vector2 _pos = Random.insideUnitCircle * OffsetRadius;

                _offset.x = _pos.x;
                _offset.z = _pos.y;

                if (OffsetType == RandomOffsetType.HEMISPHERE)
                {
                    _offset.y = Random.Range(0, OffsetRadius);
                }
                else if (OffsetType == RandomOffsetType.SPHERE)
                {
                    _offset.y = Random.Range(-OffsetRadius, OffsetRadius);
                }
            }

            _position = PositionTools.FixTransformPoint(m_MountPointTransform, _offset);

            GameObject _effect = (GameObject)Object.Instantiate(ReferenceObject, _position, Quaternion.identity);

            if (_effect != null)
            {
                _effect.name = ReferenceObject.name;

                if (m_MountPointTransform != null)
                {
                    _effect.transform.rotation = m_MountPointTransform.rotation * Rotation;
                }
                else
                {
                    _effect.transform.rotation = Rotation;
                }

                if (Detach == false)
                {
                    _effect.transform.SetParent(m_MountPointTransform, true);
                }

                _effect.SetActive(true);
            }

            return(_effect);
        }
예제 #4
0
        private GameObject InstantiateEffect()
        {
            if (Owner == null || !Enabled || ReferenceObject == null)
            {
                return(null);
            }

            if (!string.IsNullOrEmpty(MountPointName.Trim()) && (m_MountPointTransform == null || m_MountPointTransform.name != MountPointName.Trim()))
            {
                m_MountPointTransform = SystemTools.FindChildByName(MountPointName, Owner.transform);
            }

            if (m_MountPointTransform == null)
            {
                m_MountPointTransform = Owner.transform;
            }

            Vector3 _position = m_MountPointTransform.position;
            Vector3 _offset   = Vector3.zero;

            if (OffsetType == RandomOffsetType.EXACT)
            {
                _offset = Offset;
            }
            else if (OffsetRadius > 0)
            {
                Vector2 _pos = Random.insideUnitCircle * OffsetRadius;

                _offset.x = _pos.x;
                _offset.z = _pos.y;

                if (OffsetType == RandomOffsetType.HEMISPHERE)
                {
                    _offset.y = Random.Range(0, OffsetRadius);
                }
                else if (OffsetType == RandomOffsetType.SPHERE)
                {
                    _offset.y = Random.Range(-OffsetRadius, OffsetRadius);
                }
            }

            _position = PositionTools.FixTransformPoint(m_MountPointTransform, _offset);

            GameObject _effect = WorldManager.Instantiate(ReferenceObject, _position, Rotation);

            if (_effect != null)
            {
                _effect.name = ReferenceObject.name;

                if (m_MountPointTransform != null)
                {
                    _effect.transform.rotation = m_MountPointTransform.rotation * Rotation;
                }
                else
                {
                    _effect.transform.rotation = Rotation;
                }

                _effect.SetActive(true);

                if (Attached == true && m_MountPointTransform != null && Owner.activeInHierarchy)
                {
                    _effect.transform.SetParent(m_MountPointTransform, true);
                }
                else if (Attached == false && Lifetime > 0)
                {
                    WorldManager.Destroy(_effect, Lifetime);
                    _effect = null;
                }
            }

            return(_effect);
        }