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)); } }
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); }