Desenvolvimento

18 ago, 2016

Pokemon GO – O passo a passo para fazer o seu – Parte 03

Publicidade

Dando sequência a nossa série sobre criar o seu próprio Pokemon GO (que você pode conferir aqui), vamos ver a terceira e última parte, que traz logo de cara a 5ª etapa, sobre a geração de monstros no mapa.

Etapa 5: Gerando Monstros no Mapa (Parte B)

Enquanto somos capazes de converter os dados de longitude e latitude para o mundo do jogo, é hora de criar alguns dados do monstro fictício no servidor de análise. Vá para o seu painel e crie um monstro chamado classe.

poke26

Insira a coluna: Location with data type Geopoint

poke27

Insira algum monstro próximo a você.

poke28

Os monstros fictícios estão definidos e estão só esperando você chamar. Então, crie um MonsterSpawn GameObject com script Spawn. Coloque nele LocationManager GameObject (para utilizar os dados GPS) M pré-estabelecido Monster para desovar um monstro.

poke29

É hora de trazer os dados do monstro fictício ao seu programa:

void Start () {
	monsterXZCoordination = new List<double[]>();
	monsterLL = new List<double[]> ();
	var query = ParseObject.GetQuery ("Monster");
//you can use WhereWithinGeoBox or WhereNear or WhereWithinDistance to simulate pkmgo serach range
playerlon = locationManager.GetComponent<LocationManager>().getLon();
playerlat = locationManager.GetComponent<LocationManager>().getLat();
query.FindAsync ().ContinueWith (t => {
	IEnumerable<ParseObject> results = t.Result;
	foreach (var result in results) {
		ParseGeoPoint temp = result.Get<ParseGeoPoint>("Location");
		double[] tempxz = GeoDistance.convertXZ(playerlon,playerlat,temp.Longitude,temp.Latitude);
		double[] trueLL = {temp.Longitude,temp.Latitude};
		monsterLL.Add(trueLL);
		monsterXZCoordination.Add(tempxz);
	}
	spawn = true;
	});

}

O código acima obtém o resultado um por um e converter os dados GeoPoint para ser as coordenadas do mundo XYZ e empurra o resultado para a Lista. Depois de adicionar o resultado obtido, Spawn se torna verdade para permitir que o programa gere o monstro.

void Update () {

	playerlon = locationManager.GetComponent<LocationManager>().getLon();
	playerlat = locationManager.GetComponent<LocationManager> ().getLat ();
	DebugConsole.Log (locationManager.GetComponent<LocationManager>().getLon().ToString());
	if (spawn == true) {
		monsterSpawn ();
	}
	if (monster.Count != 0) {
		if (playerlon != lastlon || playerlat != lastlat) {

			updateMonstersPosition ();
		}

	}
	lastlat = playerlon;
	lastlon = playerlat;

}
void monsterSpawn(){
	DebugConsole.Log ("HIHIHI");
	for (int i = 0; i < monsterXZCoordination.Count; i++) {
		GameObject temp = Instantiate (m, new Vector3 ((float)monsterXZCoordination [i][0], 0.07f, (float)monsterXZCoordination [i][1]), new Quaternion (0, 0, 0, 0)) as GameObject;

		DebugConsole.Log (temp.transform.position.ToString());
		monster.Add (temp);
	}
	spawn = false;
}
void updateMonstersPosition(){
	for (int i = 0; i < monster.Count; i++) {
		double[] tempxz = GeoDistance.convertXZ(playerlon,playerlat,monsterLL[i][0],monsterLL[i][1]);
		monster [i].gameObject.transform.position = new Vector3 ((float)tempxz[0],0.07f,(float)tempxz[1]);
		DebugConsole.Log (monster [i].gameObject.transform.position.ToString ());

	}
}

Após os Monstros serem gerados, eles vão manter a atualização quando os dados do GPS do jogador forem atualizados. Testes. O monstro é gerado nas coordenadas corretas XYZ com seus dados, latitude e longitude.

poke30

Testar em movimento:

poke31

poke32

poke33

poke34

O cálculo é bastante preciso. O monstro vai continuar atualizando a posição correta quando o jogador se move.

É isso! Espero que tenha gostado!