Home Game Development unity – How do you make this n :1 hexagon immediately turn green?

unity – How do you make this n :1 hexagon immediately turn green?

0
unity – How do you make this n :1 hexagon immediately turn green?

[ad_1]

I want to make the hexagon in the middle immediately green

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

public class Generatortrihex : MonoBehaviour
{
    [Tooltip("Prefab for hexagon")]
    [SerializeField] private GameObject HexagonPrefab;
    [Tooltip("Number of hexagonal layers")]
    [SerializeField] private uint Radius;
    [Tooltip("Multiplier for hexagon side length")]
    [SerializeField] private float HexSideMultiplier = 1;

    private const float sq3 = 1.7320508075688772935274463415059f;

    private void Start()
    {
        GenerateHexagonFloor();
    }

    void GenerateHexagonFloor()
    {
        // Point of the next hexagon to be spawned
        Vector2 currentPoint = transform.position;

        // Check if the HexagonPrefab has uniform scale
        if (!Mathf.Approximately(HexagonPrefab.transform.localScale.x, HexagonPrefab.transform.localScale.y))
        {
            Debug.LogError("HexagonPrefab has non-uniform scale: cannot determine its side. Aborting");
            return;
        }

        // Array defining the movement vectors for hexagon spawning
        Vector2[] mv = {
            new Vector2(1.5f, -sq3 * 0.5f),    // Down Right
            new Vector2(0, -sq3),               // Down
            new Vector2(-1.5f, -sq3 * 0.5f),    // Down Left
            new Vector2(-1.5f, sq3 * 0.5f),     // Up Left
            new Vector2(0, sq3),                // Up
            new Vector2(1.5f, sq3 * 0.5f)       // Up Right
        };

        int lmv = mv.Length;  // Length of the movement vector array
        float HexSide = HexagonPrefab.transform.localScale.x * HexSideMultiplier;  // Calculate hexagon side length

        int hn = 1;  // Initialize hexagon number counter

        // Loop through layers of hexagons (from center to outer layers)
        for (int mult = 0; mult <= Radius; mult++)
        {
            // Loop through each movement vector
            for (int j = 0; j < lmv; j++)
            {
                // Loop to instantiate hexagons in the current layer
                for (int i = 0; i < mult; i++, hn++)
                {
                    GameObject hexagon = Instantiate(HexagonPrefab, currentPoint, Quaternion.identity, transform);
                    Tile newTile = hexagon.GetComponent<Tile>();
                    if (newTile != null)
                    {
                        newTile.Init();
                        if (mult == 0) newTile.OnFill();
                    }

                    hexagon.name = string.Format("Hex n: {0}", hn);
                    currentPoint += mv[j] * HexSide;
                }

                // Special case for the last movement vector (Up)
                if (j == 4)
                {
                    GameObject hexagon = Instantiate(HexagonPrefab, currentPoint, Quaternion.identity, transform);
                    Tile newTile = hexagon.GetComponent<Tile>();
                    if (newTile != null)
                    {
                        newTile.Init();
                    }

                    hexagon.name = string.Format("Hex n: {0}", hn);
                    currentPoint += mv[j] * HexSide;
                    hn++;

                    if (mult == Radius)
                        break;  // Finished if it's the last layer
                }
            }
        }
    }
}

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

public class Tile : MonoBehaviour
{
    [SerializeField] private SpriteRenderer spriteRenderer;


    [SerializeField] private Transform[] checkPoint;
    private float radCheckPoint = 0.1f;

 
    [SerializeField] private Color emptyColor;

    [SerializeField] private Color fillColor;

    [SerializeField] private Color checkColor_empty;

    [SerializeField] private Color checkColor_fill;

    [SerializeField] private Color selectColor_empty;

    [SerializeField] private Color selectColor_fill;

    [SerializeField] private Color avaliableColor;
    private bool isAvaliable;
    public int layer;

    public bool isEmpty;

    private List<Tile> checkTiles = new List<Tile>();


    public void Init()
    {

        spriteRenderer.color = emptyColor;
        isEmpty = true;


    }


    public void OnFill()
    {

        if (!isEmpty)
            return;


        spriteRenderer.color = fillColor;

        
        isEmpty = false;
       
    }

  
    public void OnCheck()
    {

        if (isEmpty)
        {
            spriteRenderer.color = checkColor_empty;
        }
        else
        {
            spriteRenderer.color = checkColor_fill;
        }
    }

   
    public void OffCheck()
    {
    
        if (isEmpty)
        {
            spriteRenderer.color = emptyColor;
        }
        else
        {
            spriteRenderer.color = fillColor;
        }
    }


    private bool CheckFillTile()
    {
        if (checkTiles.Count < 1)
            return true;


        foreach (Tile t in checkTiles)
        {
            if (t.GetFill())
                return true;
        }

        return false;
    }

    public void Avaliable()
    {
        if (!isEmpty)
            return;

        spriteRenderer.color = avaliableColor;
        isAvaliable = true;
    }

    public bool GetFill()
    {
        return !isEmpty;
    }

    
    private void OnMouseDown()
    {

        if (isEmpty && !CheckFillTile())
            return;


        OnFill();
    }

   
    private void OnMouseEnter()
    {

        if (isEmpty)
        {
            spriteRenderer.color = selectColor_empty;
        }
        else
        {
            spriteRenderer.color = selectColor_fill;
        }

       
        for (int i = 0; i < checkPoint.Length; i++)
        {
            RaycastHit2D hit = Physics2D.CircleCast(checkPoint[i].position, radCheckPoint, Vector2.zero);

            if (hit.transform != null)
            {
                if (hit.transform.GetComponent<Tile>() != null)
                {

                    var tileScript = hit.transform.GetComponent<Tile>();

                    tileScript.OnCheck();

                    
                    checkTiles.Add(tileScript);
                }
            }
        }
    }

    
    private void OnMouseExit()
    {
        if (isEmpty)
        {
            if (isAvaliable)
                spriteRenderer.color = avaliableColor;
            else
                spriteRenderer.color = emptyColor;
        }
        else
        {
            spriteRenderer.color = fillColor;
        }

        
        if (checkTiles.Count < 1)
            return;

        foreach (Tile t in checkTiles)
        {
            t.OffCheck();
        }
    }
}

[ad_2]

Previous article 12 Things To Know Before Playing
Next article Marvel’s Spider-Man 2 will get its next game update in early 2024
Hello there! My name is YoleeTeam, and I am thrilled to welcome you to AmazonianGames.com. As the premier destination for all things related to Amazon Games' universe, we are dedicated to providing you with the most exciting and immersive gaming experiences out there. From captivating visuals to exhilarating gameplay, our website is packed with comprehensive insights, updates, and reviews to keep you ahead of the game. Whether you're a seasoned gamer or new to the scene, I am here to guide you through this virtual frontier. If you have any questions or suggestions, feel free to reach out to me at john@yoleesolutions.com. Embark on your Amazon gaming journey today with AmazonianGames.com and let the adventure begin!