public void Copy(SurfaceObject _object)
        {
            if (_object == null)
            {
                return;
            }

            base.Copy(_object);

            AudioPlayer.Copy(_object.AudioPlayer);
            FootstepPlayer.Copy(_object.FootstepPlayer);

            GroundScanInterval        = _object.GroundScanInterval;
            GroundScanIntervalMaximum = _object.GroundScanIntervalMaximum;

            Surfaces.Clear();
            foreach (SurfaceDataObject _data in _object.Surfaces)
            {
                Surfaces.Add(new SurfaceDataObject(_data));
            }
        }
Beispiel #2
0
 private void OnValidate()
 {
     movementController = movementController ?? GetComponent <CharacterController>();
     footstepPlayer     = footstepPlayer ?? GetComponent <FootstepPlayer>();
 }
        /// <summary>
        /// Update surface handling.
        /// </summary>
        public void Update(CreatureObject _creature)
        {
            if (Enabled == false || _creature == null || _creature.Move.IsGrounded == false)
            {
                return;
            }

            Vector3 _velocity = _creature.Move.DesiredVelocity;

            if (_creature.Behaviour.ActiveBehaviourMode != null && _creature.Behaviour.ActiveBehaviourMode.Rule != null)
            {
                _velocity = _creature.Behaviour.ActiveBehaviourMode.Rule.Move.Motion.Velocity;
            }


            // Update Ground Texture Name - only required while creature is moving or texture name is empty
            if (_velocity.z > 0 || m_ActiveTextureName == "")
            {
                string _detected_texture_name = m_ActiveTextureName;

                m_GroundScanIntervalTimer += Time.deltaTime;
                if (m_GroundScanIntervalTimer >= GroundScanInterval)
                {
                    m_GroundScanIntervalTimer = 0;
                    _detected_texture_name    = _creature.Move.UpdateGroundTextureName();
                }

                if (_detected_texture_name != m_ActiveTextureName)
                {
                    m_ActiveTextureName = _detected_texture_name;

                    SurfaceDataObject _best_surface = null;
                    foreach (SurfaceDataObject _surface in Surfaces)
                    {
                        foreach (TextureDataObject _texture in _surface.Textures)
                        {
                            if (_texture != null && _texture.Image != null && _texture.Image.name == m_ActiveTextureName)
                            {
                                _best_surface = _surface;
                                break;
                            }
                        }
                    }

                    if (_best_surface != null)
                    {
                        if (m_ActiveSurface != _best_surface)
                        {
                            if (m_ActiveSurface != null)
                            {
                                m_ActiveSurface.Effect.Stop();
                            }

                            m_ActiveSurface = _best_surface;
                            m_ActiveSurface.Effect.Start(OwnerComponent);

                            AudioPlayer.Play(m_ActiveSurface.Audio);
                            FootstepPlayer.SetData(m_ActiveSurface.Footsteps);
                        }
                    }
                    else
                    {
                        if (m_ActiveSurface != null)
                        {
                            m_ActiveSurface.Effect.Stop();
                        }

                        m_ActiveSurface = null;

                        FootstepPlayer.SetData(null);
                        AudioPlayer.Stop();
                    }
                }
            }

            if (_velocity.z == 0)
            {
                AudioPlayer.Stop();
            }
            else
            {
                AudioPlayer.Update();
                FootstepPlayer.Update(_velocity.z);
            }
        }
 public override void Init(ICEWorldBehaviour _component)
 {
     base.Init(_component);
     AudioPlayer.Init(_component);
     FootstepPlayer.Init(_component);
 }