0

I have 19 circles in a big circle

I need to write this algorithm

"in case of clicking on a centralized circle (the around circles rotate around it)"

not only rotating (about the around circles - the circle should equal/assigned to it`s following circle)

check this image : https://i.stack.imgur.com/JJ3FE.png

I wrote a complex lines of codes , but not worked

void OnMouseDown()
{
    if (gameObject.tag == "dynball")
    {
        if (isNotBanned(int.Parse(gameObject.name)))
        {
            change();
        }
    }
}
    void change()
{
    if (int.Parse(gameObject.name) == 4 || int.Parse(gameObject.name) == 5)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 8 || int.Parse(gameObject.name) == 9 || int.Parse(gameObject.name) == 10)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 13 || int.Parse(gameObject.name) == 14)
    {
        tmp = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 5] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 1] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 4] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 3];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) + 3] = GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1];
        GameObject.FindGameObjectsWithTag("dynball")[int.Parse(gameObject.name) - 1] = tmp;
    }
    Debug.Log("I am here");
}
Ahmed Mohsen
  • 433
  • 1
  • 6
  • 19

2 Answers2

0

Cache your variables man, there are so many method calls to FindGameObjectsWithTag(...) and int.Parse(...) that i'm surprised this doesn't crash Unity

GameObject[] dynballs;
int gName;

void Start()
{
    gName = int.Parse(gameObject.name);
}

void OnMouseDown()
{
    if (gameObject.tag == "dynball")
    {
        if (isNotBanned(int.Parse(gameObject.name)))
        {
            change();
        }
    }
}
    void change()
{
    dynballs = GameObject.FindGameObjectsWithTag("dynball");
    if (int.Parse(gameObject.name) == 4 || int.Parse(gameObject.name) == 5)
    {
        tmp = dynballs[gName - 4];
        dynballs[gName - 4] = dynballs[gName - 3];
        dynballs[gName - 3] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 5];
        dynballs[gName + 5] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 8 || int.Parse(gameObject.name) == 9 || int.Parse(gameObject.name) == 10)
    {
        tmp = dynballs[int.Parse(gameObject.name) - 5];
        dynballs[gName - 5] = dynballs[gName - 4];
        dynballs[gName - 4] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 5];
        dynballs[gName + 5] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    if (int.Parse(gameObject.name) == 13 || int.Parse(gameObject.name) == 14)
    {
        tmp = dynballs[gName - 5];
        dynballs[gName - 5] = dynballs[gName - 4];
        dynballs[gName - 3] = dynballs[gName + 1];
        dynballs[gName + 1] = dynballs[gName + 4];
        dynballs[gName + 4] = dynballs[gName + 3];
        dynballs[gName + 3] = dynballs[gName - 1];
        dynballs[gName - 1] = tmp;
    }
    Debug.Log("I am here");
}

But anyways, iv'e answered a similar question here and here, you might find the answers useful

Community
  • 1
  • 1
maraaaaaaaa
  • 7,749
  • 2
  • 22
  • 37
-1

use transform.rotateAround or quaternion.slerp

LumbusterTick
  • 1,067
  • 10
  • 21
  • that`s easy , I don`t need to rotate only I need the around circles to be shifted to right or left check this image http://i.imgur.com/DZBYkCq.png – Ahmed Mohsen Sep 09 '15 at 07:01
  • then just use transform + offset(in each direction u want or use angles) of inner cirlce – LumbusterTick Sep 09 '15 at 07:11
  • it will shown that is is shifted for the gamer but , in my game logic I have to assign every circle to it`s following one – Ahmed Mohsen Sep 09 '15 at 08:11