// plicflix para Unity WebGL. Ponha em Assets/Plicflix/Plicflix.cs, junto com // Assets/Plugins/WebGL/Plicflix.jslib. Crie um GameObject chamado "Plicflix" na // primeira cena e adicione este componente. Guia: https://developers.plicflix.com/docs/MOTORES // // Plicflix.I.Progresso(30, "Carregando o mundo…"); // Plicflix.I.Entrar("/api/plicflix/entrar"); // o SEU servidor troca o token // Plicflix.I.AoEntrou += json => { ...; Plicflix.I.Pronto(); }; // Plicflix.I.AoSairDoJogo += salvarEDepois => { Salvar(); salvarEDepois(); }; // Plicflix.I.Onde("{\"texto\":\"Taverna\",\"area\":\"cidade/taverna\"}"); using System; using System.Runtime.InteropServices; using UnityEngine; public class Plicflix : MonoBehaviour { public static Plicflix I { get; private set; } /// Entrou: o JSON que o SEU servidor devolveu (ou, sem servidor, o do Plicflix.jogador()). public event Action AoEntrou; public event Action AoFalhou; /// O jogador tocou em "Sair": salve e chame a ação recebida (tem 4,5 s). public event Action AoSairDoJogo; /// "Ir até o amigo": recebe o JSON do destino; responda com FoiPara(ok, motivo). public event Action AoPedirIrPara; #if UNITY_WEBGL && !UNITY_EDITOR [DllImport("__Internal")] static extern int PlicflixDentro(); [DllImport("__Internal")] static extern void PlicflixProgresso(int pct, string texto); [DllImport("__Internal")] static extern void PlicflixPronto(); [DllImport("__Internal")] static extern void PlicflixErro(string texto); [DllImport("__Internal")] static extern void PlicflixOnde(string json); [DllImport("__Internal")] static extern void PlicflixAbrirAmigos(); [DllImport("__Internal")] static extern void PlicflixSair(); [DllImport("__Internal")] static extern void PlicflixEntrar(string url, string objeto); [DllImport("__Internal")] static extern void PlicflixJogador(string objeto); [DllImport("__Internal")] static extern void PlicflixAoSair(string objeto); [DllImport("__Internal")] static extern void PlicflixSaiuPronto(); [DllImport("__Internal")] static extern void PlicflixAoIrPara(string objeto); [DllImport("__Internal")] static extern void PlicflixFoiPara(int ok, string motivo); #else // no Editor e fora da web, nada acontece (o jogo roda normal, sem plicflix) static int PlicflixDentro() => 0; static void PlicflixProgresso(int pct, string texto) { } static void PlicflixPronto() { } static void PlicflixErro(string texto) { } static void PlicflixOnde(string json) { } static void PlicflixAbrirAmigos() { } static void PlicflixSair() { } static void PlicflixEntrar(string url, string objeto) { } static void PlicflixJogador(string objeto) { } static void PlicflixAoSair(string objeto) { } static void PlicflixSaiuPronto() { } static void PlicflixAoIrPara(string objeto) { } static void PlicflixFoiPara(int ok, string motivo) { } #endif void Awake() { if (I != null) { Destroy(gameObject); return; } I = this; DontDestroyOnLoad(gameObject); if (Dentro) { PlicflixAoSair(gameObject.name); PlicflixAoIrPara(gameObject.name); } } /// O jogo foi aberto pelo plicflix? public bool Dentro => PlicflixDentro() == 1; public void Progresso(int pct, string texto) => PlicflixProgresso(pct, texto); public void Pronto() => PlicflixPronto(); public void Erro(string texto) => PlicflixErro(texto); /// json: {"texto":"Taverna","area":"cidade/taverna","ponto":{"cena":"taverna","x":3,"y":9}} public void Onde(string json) => PlicflixOnde(json); public void AbrirAmigos() => PlicflixAbrirAmigos(); public void Sair() => PlicflixSair(); /// O SEU servidor troca o token (recomendado). Resposta em AoEntrou. public void Entrar(string urlDoSeuServidor) => PlicflixEntrar(urlDoSeuServidor, gameObject.name); /// Jogo sem servidor: só para mostrar o nome e salvar local (não protege nada de valor). public void Jogador() => PlicflixJogador(gameObject.name); public void FoiPara(bool ok, string motivo = "") => PlicflixFoiPara(ok ? 1 : 0, motivo); // ---- chamados pelo Plicflix.jslib (SendMessage) ---- void AoEntrar(string json) => AoEntrou?.Invoke(json); void AoReceberJogador(string json) => AoEntrou?.Invoke(json); void AoFalharEntrada(string erro) => AoFalhou?.Invoke(erro); void AoSair() { if (AoSairDoJogo == null) { PlicflixSaiuPronto(); return; } AoSairDoJogo.Invoke(() => PlicflixSaiuPronto()); } void AoIrPara(string json) { if (AoPedirIrPara == null) { FoiPara(false, "Este jogo ainda não leva até outra pessoa."); return; } AoPedirIrPara.Invoke(json); } }