// Update is called once per frame void Update() { if (functions.GetPauseMode() == false) { pnjPosition = this.transform.position; playerPosition = GameObject.Find("Tempus").transform.position; distancePnjPlayer = functions.DistanceBetween(playerPosition, pnjPosition); //Si le joueur est proche du PNJ if (distancePnjPlayer.x < hitBoxDistance && distancePnjPlayer.y < hitBoxDistance && distancePnjPlayer.z < hitBoxDistance) { if (sendDetection == true) { functions.playerDetection(this.name); sendDetection = false; } if (functions.CheckIfNearest(this.name) == true) { this.transform.GetChild(0).GetComponent <MeshRenderer>().enabled = true; //Debug.Log(functions.GetDialogueMode()); if (Input.GetKeyDown(KeyCode.Return) || mouseTrigger == true) { activateDialogue = true; } else if (functions.GetDialogueMode() == true && Input.GetMouseButtonDown(0) == true) { activateDialogue = true; } if (activateDialogue == true && itemTrigger == false) { activateDialogue = false; mouseTrigger = false; //Debug.Log(functions.GetFrame()); if (functions.GetDialogueMode() == false) { functions.SetDialogueMode(true); } if (characterType == 1) //Si le type de ce personnage est 1, le personnage dit entre 1 et plusieurs phrases puis donne quelque chose au héro et enfin dit entre 1 et plusieurs phrases pour conclure la conversation { if (eventTriggered == false) { if (dialogProgression < partitions[0] + partitions[1]) { if (dialogProgression < partitions[0]) //Le PNJ dit quelque chose { if (faceId == 0) { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(2); noFaceWindow.gameObject.SetActive(true); noFaceWindow.GetChild(0).GetComponent <Text>().text = this.name; noFaceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } else { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(1); faceWindow.gameObject.SetActive(true); faceWindow.GetChild(0).GetComponent <Text>().text = this.name; faceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } dialogProgression++; } else //Le PNJ donne un objet { if (itemGiven == false) { itemTrigger = true; screenManager.GetComponent <ScreenManager>().SetActiveDialogue(0); } else //Le PNJ dit quelque chose { if (dialogProgression < partitions[0] + partitions[1]) { if (faceId == 0) { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(2); noFaceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } else { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(1); faceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } dialogProgression++; } } } } else //Fin de conversation { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(0); if (faceId == 0) { noFaceWindow.GetChild(0).GetComponent <Text>().text = "Name"; noFaceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } else { faceWindow.GetChild(0).GetComponent <Text>().text = "Name"; faceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } functions.SetNoLoop(true); functions.SetDialogueMode(false); eventTriggered = true; } } else //Le PNJ dit quelque chose { if (dialogProgression < partitions[0] + partitions[1] + partitions[2]) { if (faceId == 0) { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(2); noFaceWindow.gameObject.SetActive(true); noFaceWindow.GetChild(0).GetComponent <Text>().text = this.name; noFaceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } else { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(1); faceWindow.gameObject.SetActive(true); faceWindow.GetChild(0).GetComponent <Text>().text = this.name; faceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } dialogProgression++; } else //Fin de conversation { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(0); if (faceId == 0) { noFaceWindow.GetChild(0).GetComponent <Text>().text = "Name"; noFaceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } else { faceWindow.GetChild(0).GetComponent <Text>().text = "Name"; faceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } functions.SetNoLoop(true); functions.SetDialogueMode(false); dialogProgression = partitions[0] + partitions[1]; } } } else if (characterType == 2) //Si le type de ce personnage est 2, le personnage pose une question (en 1 ou plusieurs phrases) puis attend la réponse du joueur. Enfin, selon la réponse, il dit quelques phrases et ne fait plus rien. { } else //Si le type de ce personnage est 0 ou autre, le personnage dit entre 1 et plusieurs phrases puis ne fait plus rien { if (dialogProgression < partitions[0]) { if (faceId == 0) { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(2); noFaceWindow.GetChild(0).GetComponent <Text>().text = this.name; noFaceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } else { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(1); faceWindow.GetChild(0).GetComponent <Text>().text = this.name; faceWindow.GetChild(1).GetComponent <Text>().text = dialogList[dialogProgression]; } dialogProgression++; } else //Fin de conversation { screenManager.GetComponent <ScreenManager>().SetActiveDialogue(0); if (faceId == 0) { noFaceWindow.GetChild(0).GetComponent <Text>().text = "Name"; noFaceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } else { faceWindow.GetChild(0).GetComponent <Text>().text = "Name"; faceWindow.GetChild(1).GetComponent <Text>().text = "Text"; } functions.SetNoLoop(true); functions.SetDialogueMode(false); dialogProgression = 0; } } } } else { this.transform.GetChild(0).GetComponent <MeshRenderer>().enabled = false; } } else { this.transform.GetChild(0).GetComponent <MeshRenderer>().enabled = false; sendDetection = true; } } }
// Update is called once per frame void Update() { if (functions.GetPauseMode() == false && functions.GetDialogueMode() == false) { enableControls(true, true); //Debug.Log("Frame "+frameNumber+" : "+transform.position.y); //Debug.Log("Gravity : "+gravity); //Toutes les 3 frames, on vérifie la position en Y du personnage afin de savoir s'il est en train de tomber ou non if (functions.IsMultiple(frameNumber, 3)) { if (poSwitch == true) { locationA = transform.position.y; poSwitch = false; } else { locationB = transform.position.y; poSwitch = true; } } //On vérifie la différence entre l'ancienne position du personnage et la nouvelle if ((poSwitch == true && locationB < locationA) || (poSwitch == false && locationA < locationB)) { isFalling = true; } else { isFalling = false; } characterFall = locationA - locationB; //si la valeur ci-dessus est négative, on la change en valeur positive pour la suite du script if (characterFall < 0.0f) { characterFall = characterFall * -1; } //Le personnage ne touche pas le sol //lors d'un saut, permet au personnage de rester en position de saut pendant le nombre de frames désiré avant de passer en position de chute if (frameAtJump != 0) { if ((frameAtJump + 25) == frameNumber) { animId = 4; frameAtJump = 0; } else { animId = 3; } anim.SetInteger("AnimPar", animId); } //Le personnage est en train de tomber else if (isFalling == true && IsFalling(characterFall, gravity)) { animId = 4; anim.SetInteger("AnimPar", animId); } else //Le personnage touche le sol { frameAtJump = 0; //Le personnage avance en marchant ou en courant selon si la touche shift (gauche ou droite) est activée if (Input.GetKey("d")) { horizontalAxis = 1.0f; } else if (Input.GetKey("q")) { horizontalAxis = -1.0f; } else //Le personnage ne bouge pas { horizontalAxis = 0.0f; } if (Input.GetKey("z") || Input.GetKey("up")) { verticalAxis = 1.0f; speed = 0.7f; if (Input.GetKey("right shift") || Input.GetKey("left shift")) { speed = 0.2f; animId = 2; } else { animId = 1; } anim.SetInteger("AnimPar", animId); } //Le personnage recule (toujours en marchant) else if (Input.GetKey("s") || Input.GetKey("down")) { verticalAxis = -1.0f; speed = 0.3f; animId = 2; } else //Le personnage ne bouge pas { verticalAxis = 0.0f; animId = 0; } anim.SetInteger("AnimPar", animId); moveDirection = transform.forward * verticalAxis * speed; } //Le personnage saute if (Input.GetKeyDown(KeyCode.Space)) { //le personnage ne peut sauter que s'il n'est pas en train de tomber if (IsFalling(characterFall, gravity) == false) { moveDirection.y += jumpHeight; animId = 3; anim.SetInteger("AnimPar", animId); frameAtJump = frameNumber; } } if (Input.GetKeyDown(KeyCode.F)) { if (fightScript.GetStartBattle() == false) { fightScript.SetStartBattle(true); } else { fightScript.SetStartBattle(false); } } //le personnage ne peut pivoter que s'il n'est pas en train de tomber if (IsFalling(characterFall, gravity) == false) { transform.Rotate(0, horizontalAxis * turnSpeed, 0); } //"controller.Move" permet d'enclencher le déplacement du personnage, "Time.deltaTime" fait en sorte qu'il y ait 60 frames par seconde moveDirection.y -= gravity; controller.Move(moveDirection); //Les 2 lignes suivantes donnent le contrôle de la rotation de la camera (et du personnage) à la souris //rotationY += Input.GetAxis("Mouse X") * turnSpeed; //transform.rotation = Quaternion.Euler(0, rotationY, 0); frameNumber++; } else if (functions.GetDialogueMode() == true) { enableControls(false, true); } else { enableControls(false, false); } }