public void Play(AudioChannel channel = AudioChannel.Action) { FMOD_StudioEventEmitter emitter = this.GetEmitter(channel); if (emitter != null) { emitter.Play(); } }
public static bool PlayEmitter(string estring) //Called To Play A Sound From Designated Emitter { FMOD_StudioEventEmitter EmitterToPlay = (FMOD_StudioEventEmitter)emitterlist[estring]; EmitterToPlay.Stop(); //Stop Sound EmitterToPlay.Play(); //Play Sound return(true); }
public override void Awake() { FMOD_StudioEventEmitter fMOD_StudioEventEmitter = (FMOD_StudioEventEmitter)this.GetComponent(typeof(FMOD_StudioEventEmitter)); this.WindDice = UnityEngine.Random.Range(0, 4); this.WindDiceStop = UnityEngine.Random.Range(0, 3); if (this.WindDice == 2 && !this.Playing) { this.Playing = true; fMOD_StudioEventEmitter.Play(); } else if (this.WindDiceStop == 2 && this.Playing) { this.Playing = false; fMOD_StudioEventEmitter.Stop(); } }
public void fd(float pas, bool smoothRotation = true, bool evitementDesAutresAgents = true) { if (walkEmitter != null && walkEmitter.HasFinished()) { walkEmitter.Play(); } float finalDirection = direction; if (evitementDesAutresAgents) { //Liste des vecteurs générés pour éviter/fuir les obstacles et leurs poids List <Vector2> evitements = new List <Vector2>(); List <float> poidsEvitements = new List <float>(); List <Vector2> repulsions = new List <Vector2>(); List <float> poidsRepulsions = new List <float>(); Vector2 vectorDirection = Utils.vectorFromAngle(direction, 1f); Animal currentAnimal; List <MemoryBloc> memoryBlocs = new List <MemoryBloc>(GetComponent <Memory>().getMemoyBlocs()); MemoryBloc currentBloc; for (int i = 0; i < memoryBlocs.Count; ++i) { currentBloc = memoryBlocs[i]; currentAnimal = currentBloc.getEntity() as Animal; if (currentAnimal != null && !currentAnimal.estMort() && currentAnimal != agentToDontDodge) { float distance = Vector2.Distance(currentBloc.getLastPosition(), transform.position); Vector2 vectorFaceToLastPosition = Utils.vectorFromAngle(getFaceToDirection(currentBloc.getLastPosition())); float angle = Vector2.Angle(vectorDirection, vectorFaceToLastPosition); //Ajout d'un vecteur pour éviter et passer sur le côté de l'obstacle if (angle <= 90 && distance < 1.5f) { //Calcul de la force ( priorité ) de l'évitement afin de pondérer les différents vecteur float force = (distance <= 1) ? 1f : (1f - (distance - 1f) / 4f); Vector2 vectorDirectionCurrentLoup = Utils.vectorFromAngle(currentAnimal.direction); if (distance < .75f || Vector2.Angle(vectorDirection, vectorDirectionCurrentLoup) > 18) { Vector2 subVector = vectorDirection - vectorDirectionCurrentLoup; List <Vector2> orthogonaux = Utils.getOrthogonalsVectors(vectorFaceToLastPosition); if (Vector2.Angle(orthogonaux[1], subVector) < Vector2.Angle(orthogonaux[0], subVector)) { evitements.Add(orthogonaux[1]); } else { evitements.Add(orthogonaux[0]); } poidsEvitements.Add(force); } //Ajout d'un vecteur pour reculer par rapport à l'obstacle if (force > .5f) { repulsions.Add(Utils.vectorFromAngle(getFaceToDirection(currentBloc.getLastPosition()) + 180)); poidsRepulsions.Add((force - .5f) / .5f); } } } } Vector2 sommeEvitements = new Vector2(0, 0); for (int i = 0; i < evitements.Count; ++i) { sommeEvitements += evitements[i] * poidsEvitements[i]; } Vector2 sommeRepulsions = new Vector2(0, 0); for (int i = 0; i < repulsions.Count; ++i) { sommeRepulsions += repulsions[i] * poidsRepulsions[i]; } //Affichage des vecteurs si un vectorDisplayer est assigné au script if (vectorDisplayer != null) { VectorDisplayer displayer = vectorDisplayer.GetComponent <VectorDisplayer>(); displayer.transform.position = transform.position; displayer.setBluePosition(vectorDirection * 6); if (sommeEvitements != Vector2.zero) { displayer.setRedPosition(sommeEvitements * 6); } else { displayer.hideRedVector(); } displayer.transform.Rotate(new Vector3(0, 0, 1), 90); } sommeEvitements.Normalize(); sommeRepulsions.Normalize(); finalDirection = Utils.angleFromVector(vectorDirection + .8f * sommeEvitements + sommeRepulsions); } float currentDirection = direction; if (smoothRotation) { //Limitation du degré de rotation à parcourir à chaque tick currentDirection = GetComponent <Rigidbody2D>().rotation; float rotateValue = 4; Vector2 vectorCurrentDirection = Utils.vectorFromAngle(currentDirection); Vector2 vectorFinalDirection = Utils.vectorFromAngle(finalDirection); if (Vector2.Angle(vectorCurrentDirection, vectorFinalDirection) <= rotateValue) { currentDirection = finalDirection; } else { float determinant = vectorCurrentDirection.x * vectorFinalDirection.y - vectorCurrentDirection.y * vectorFinalDirection.x; if (determinant > 0) { currentDirection += rotateValue; } else { currentDirection -= rotateValue; } } } GetComponent <Rigidbody2D>().rotation = currentDirection; GetComponent <Rigidbody2D>().velocity = transform.up * pas; }