2023-05-28 11:44:55 +02:00

146 lines
3.9 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Events;
//We might change the language in this script, so let's use the localization
using RPGTALK.Localization;
public class DemoScript : MonoBehaviour {
//The speed that our 'hero' will run
public float speed = 10f;
//A few variables to move/animate this guy
Rigidbody2D rigid;
Animator anim;
SpriteRenderer render;
//The user can move the hero?
public bool controls;
//We will sometimes initialize the talk by script, so let's keep a instance of the current RPGTalk
public RPGTalk rpgTalk;
//A canvas that will be shown asking for the player's name
public GameObject askWho;
//The input that the player should write its name
public InputField myName;
//A wall to desappear and a particle to play when that happens
public GameObject wall;
public GameObject particle;
//We want to specify callbacks to different parts of the conversation
public UnityEvent OnIKnowYou, OnByWall;
public RPGTalkLanguage languageEN, languagePT;
// Get the right references...
void Start () {
rigid = GetComponent<Rigidbody2D> ();
anim = GetComponent<Animator> ();
render = GetComponent<SpriteRenderer> ();
//In the tagsDemo scene, we want to do something when we make a choice...
rpgTalk.OnMadeChoice += OnMadeChoice;
}
// Update is called once per frame
void Update () {
//skip the Talk to the end if the player hit Return
if(Input.GetKeyDown(KeyCode.Return)){
rpgTalk.EndTalk ();
}
//if the user have the controls
if (controls) {
//let's move around!
float moveX = Input.GetAxis ("Horizontal");
float moveY = Input.GetAxis ("Vertical");
rigid.MovePosition (new Vector2 (transform.position.x + moveX * speed, transform.position.y + moveY * speed));
//Not the best way to do it but... change the animator
if (moveX > 0) {
anim.SetBool ("side", true);
anim.SetBool ("top", false);
anim.SetBool ("bottom", false);
render.flipX = true;
anim.speed = 1;
} else if (moveX < 0) {
anim.SetBool ("side", true);
anim.SetBool ("top", false);
anim.SetBool ("bottom", false);
render.flipX = false;
anim.speed = 1;
} else if (moveY < 0) {
anim.SetBool ("side", false);
anim.SetBool ("top", false);
anim.SetBool ("bottom", true);
anim.speed = 1;
} else if (moveY > 0) {
anim.SetBool ("side", false);
anim.SetBool ("top", true);
anim.SetBool ("bottom", false);
anim.speed = 1;
} else {
anim.speed = 0;
}
} else {
anim.speed = 0;
}
}
//the player cant move
public void CancelControls(){
controls = false;
}
//give back the controls to player
public void GiveBackControls(){
controls = true;
}
//Open the screen to enter Player's name
public void WhoAreYou(){
askWho.SetActive(true);
myName.Select ();
}
//This callback will be called by RPGTalk after the first talk ends with the "FunnyGuy"
//Here, we will change the value of a variable in RPGTalk to be the name of the player
//And then, we will start a new talk =D
public void IKnowYouNow(){
askWho.SetActive (false);
rpgTalk.variables [0].variableValue = myName.text;
rpgTalk.NewTalk ("17", "25", rpgTalk.txtToParse, OnIKnowYou);
}
//Let's get rid of that wall. This function was called by RPGTalk bacause the function above
//setted it to be its callback.
public void ByeWall(){
wall.SetActive (false);
particle.SetActive (true);
Invoke ("FunnyGuyEnd", 2f);
}
//After the wall exploded, let the Funny Guy end his talking
void FunnyGuyEnd(){
rpgTalk.NewTalk ("26", "29", rpgTalk.txtToParse, OnByWall);
}
//In the TagsDemo scene, when we make a choice let's find out what we chose
//and change the current language based on it
void OnMadeChoice(string questionId, int choiceID){
if (choiceID == 0) {
LanguageSettings.actualLanguage = languageEN;
} else {
LanguageSettings.actualLanguage = languagePT;
}
}
}