UNITY - INITIAL - Path decision

0

I'm doing a point and click strategy game. I can make the user select the unit, it generates a grid based on how many houses the unit can walk and DELETE the houses that have locks (like trees and mountains). However, look at the result:

Consideringthatthisunitwalks3units,itcouldnothaveavailableforselectionthehouseshighlightedbelow.

IsearchedforPathfinding,butIdonotknowifthewayImadethepathblocksarecompatible.

CURSORCODE

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class cursorSelection : MonoBehaviour {

    public string unidadeSelecionada = "nenhuma";

    private int botaoAndar = 0; 
    private int botaoInfo = 0;
    private int acabaTurno = 0;

    public GameObject ninjaHolder;
    public GameObject samuraiHolder;
    public GameObject spearmanHolder;
    public GameObject archerHolder;

    public GameObject alvoLocal;


    public bool todosJogaram = false;
    public bool cliqueBloqueado = false;
    public bool escolherLocal = false;
    
    


    // LISTA DE Unidades INT
    // 0 - nenhum
    // 1 - ninja
    // 2 - samurai
    // 3 - spearman
    // 4 - archer
    //
    // LISTA de ACABATURNO
    // 0 - Faltam movimentos
    // 1 - Movimentos encerrados

    private void OnTriggerStay2D(Collider2D other)
    {
       
        if (Input.GetMouseButtonDown(0) && cliqueBloqueado == false)
        {
           mostraMenu(other.name);            
        }

        
    }

    private void Update()
    {
       if (Input.GetMouseButtonDown(1))
        {
            cliqueBloqueado = false;
            escondeMenu();
        }


    }

    public void escondeMenu()
    {
        GameObject[] enemies = GameObject.FindGameObjectsWithTag("alvoslocais");
        foreach (GameObject enemy in enemies)
            GameObject.Destroy(enemy);



    }

    public void mostraMenu(string unidade_selecionada)
    {
        
    
        switch (unidade_selecionada)
        {
            case "samurai":
                samuraiHolder = GameObject.Find("samurai");                        
                mostraMovimento(samuraiHolder);
                unidadeSelecionada = unidade_selecionada;
                cliqueBloqueado = true;
                Debug.Log("entrou samurai");
                
                break;

            case "ninja":
                Debug.Log("entrou ninja");
                break;

            case "spearman":
                Debug.Log("entrou spear");
                break;

            case "archer":
                Debug.Log("entrou archer");
                break;


        }
    }

    public void checaSeTodosJogaram()
    {
        
    }

    public void mostraMovimento(GameObject personagem)
    {
        float numMovimento = 0;
       
        switch (personagem.name) {
            case "samurai":
           numMovimento = personagem.gameObject.GetComponent<samuraiMove>().valorMovimento;
                
                break;

            /*case "ninja":

                numMovimento = personagem.gameObject.GetComponent<ninjaMove>().valorMovimento;*/

        }


            
    
     
        

        int contadorInterno = 0;
        GameObject TESTE;

        for (int j = 0; j <= numMovimento; j++)
        {
            int u = 0;
            int i = 0;
            int o = 0;
            int p = 0;

            //Cria o quadrante 1
            while (u <= (numMovimento - j)) 
              {
                TESTE = Instantiate(alvoLocal, new Vector3(personagem.transform.position.x + j, personagem.transform.position.y + u, 0), Quaternion.identity);
                
                u++;
               
              }

            //Cria o quadrante 2
            while (i <= (numMovimento - (j+1)))
            {

                TESTE = Instantiate(alvoLocal, new Vector3(personagem.transform.position.x - (j+1), personagem.transform.position.y + i, 0), Quaternion.identity);
                
             
                i++;
               
    
            }

            //Cria o quadrante 3
            while (o < (numMovimento - (j + 1)))
            {
                TESTE = Instantiate(alvoLocal, new Vector3(personagem.transform.position.x - (j+1) , personagem.transform.position.y - (o +1), 0), Quaternion.identity); //direita
              
                o++;
                
            }

            //Cria o quadrante 4
            while (p < (numMovimento - (j)))
            {
                TESTE = Instantiate(alvoLocal, new Vector3(personagem.transform.position.x + (j), personagem.transform.position.y - (p + 1), 0), Quaternion.identity); //direita
               
                p++;

            }

            contadorInterno = contadorInterno - 1;
        }
        escolherLocal = true;
    }

    



    }

  

CODE IN EACH "TARGET"

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class checaImpedidor : MonoBehaviour
{
    public cursorSelection unidadeHolder;
   
    private void OnTriggerEnter2D(Collider2D other)
    {

        if (other.tag == "terrenobloqueio")
        {
            GameObject.Destroy(gameObject);
        }


    }

   /* private void Update()
    {
        unidadeHolder = GameObject.Find("cursorNormal").GetComponent<cursorSelection>();
        if (Input.GetMouseButtonDown(0) && unidadeHolder.)
        {
            GameObject.Find(""+unidadeHolder.unidadeSelecionada+ "").transform.position = new Vector3(this.transform.position.x, this.transform.position.y, 0);
        }
    }*/
}

UNITY CODE

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class samuraiMove : MonoBehaviour {

    public bool podeAndar;

    public int experienciaXP = 0;
    public int valorAtaque = 3;
    public int valorDefesa = 5;
    public int valorDano = 5;
    public int valorMovimento = 3;

    // Use this for initialization
    void Start () {
       
    }
	
	// Update is called once per frame
	void Update () {
        
		
	}


}

Many thanks.

    
asked by anonymous 07.11.2018 / 19:44

0 answers