Jump to content

Photo

SpinDir()


  • Please log in to reply
7 replies to this topic

#1 Mero

Mero

    Touch Fluffy Tail

  • Banned
  • Real Name:Tamamo No Mae
  • Location:Rainbow Factory

Posted 11 February 2013 - 03:03 PM

It doesn't do what it says, but rather simply swap DIR_LEFT with DIR_UP. Is this intentional and I'm misunderstanding it's purpose or what?

CODE
//Converts directions to go round in a circle rather than U, D, L, R
int SpinDir(int dir) {
    if(dir == DIR_DOWN || dir == DIR_RIGHT)
        return dir;
    else if(dir == DIR_LEFT)
        return DIR_UP;
    else if(dir == DIR_UP)
        return DIR_LEFT;
    return -1;
}


#2 tox_von

tox_von

    Zelda Addict

  • Members
  • Real Name:Redgor
  • Location:Toxicville , Simcity

Posted 11 February 2013 - 05:52 PM

i think you need like mirrored directions post here sort them

http://www.purezc.co...showtopic=57951

or this?

QUOTE
// Converts a counterclockwise degree angle (from -180 to 180) into one of the eight
// standard directions (DIR_UP etc.) used by ZC.
int AngleDir8(float angle) {
if (angle <= 157.5 && angle > 112.5)
return DIR_LEFTDOWN;
else if (angle <= 112.5 && angle > 67.5)
return DIR_DOWN;
else if (angle <= 67.5 && angle > 22.5)
return DIR_RIGHTDOWN;
else if (angle <= 22.5 && angle > -22.5)
return DIR_RIGHT;
else if (angle <= -22.5 && angle > -67.5)
return DIR_RIGHTUP;
else if (angle <= -67.5 && angle > -112.5)
return DIR_UP;
else if (angle <= -112.5 && angle > -157.5)
return DIR_LEFTUP;
else
return DIR_LEFT;
}

Edited by tox_von, 11 February 2013 - 07:02 PM.


#3 Mero

Mero

    Touch Fluffy Tail

  • Banned
  • Real Name:Tamamo No Mae
  • Location:Rainbow Factory

Posted 11 February 2013 - 07:28 PM

I don't need anything, I need the function to work as it should or rather as it says. icon_unsettled.gif

edit: Either that, or for someone to explain it's use and purpose. icon_smile.gif

Edited by LordVolcanon, 11 February 2013 - 07:46 PM.


#4 tox_von

tox_von

    Zelda Addict

  • Members
  • Real Name:Redgor
  • Location:Toxicville , Simcity

Posted 11 February 2013 - 09:29 PM

CODE
if(dir == DIR_DOWN || dir == DIR_RIGHT)
        return dir;
    else if(dir == DIR_LEFT)
        return DIR_UP;
    else if(dir == DIR_UP)
        return DIR_LEFT;


left becomes up becomes left if there is no sorting thats why its always left.

this is what i mean in code link always goes to the left.

CODE

import "std.zh"

int a = 0;

ffc script new_script
{
    void run()
    {
    
       while(true)
       {  
          Link->Dir = SpinA(a);
          Waitframe();
       }
    }
}


//Converts directions to go round in a circle rather than U, D, L, R
int SpinA(int dir) {
    if(dir == DIR_DOWN || dir == DIR_RIGHT)
        return dir;
    else if(dir == DIR_LEFT)
        return DIR_UP;
    else if(dir == DIR_UP)
        return DIR_LEFT;
    return -1;
}
  

Edited by tox_von, 11 February 2013 - 10:02 PM.


#5 Mero

Mero

    Touch Fluffy Tail

  • Banned
  • Real Name:Tamamo No Mae
  • Location:Rainbow Factory

Posted 11 February 2013 - 10:05 PM

Left, Up, Down, Right is not around in a circle either way though.
Is it suppose to be UP, LEFT, DOWN, RIGHT and I've discovered a std.zh bug?

#6 Gleeok

Gleeok

    It's dangerous to dough alone, bake this.

  • Members
  • Real Name:Pillsbury
  • Location:Magical Land of Dough

Posted 11 February 2013 - 10:46 PM

I don't think I've ever seen that one; looks pretty shaky.

Maybe:
CODE

int SpinDir(int dir) {
  if(dir & 3) {
    dir %= 3;
    dir++;
  }
  return dir;
}



edit: Actually, is SpinDir() supposed to map dir to angle.. or what?
In that case it should be something like:
CODE

int SpinDir(int dir) {
  if(dir == 0) dir = 3
  else if(dir == 3) dir = 0;
  return dir;
}


int dirAngle = SpinDir(dir) * 90;

....though I think this should work for diagonals? ..

#7 tox_von

tox_von

    Zelda Addict

  • Members
  • Real Name:Redgor
  • Location:Toxicville , Simcity

Posted 12 February 2013 - 12:04 AM

bottom one just made link always go right in my example.
top one made him go up.

and bottom one is missing:

dont you need to break the loop when it first changes it? i coudnt get exit to work and break only works with while and for loops.

Edited by tox_von, 12 February 2013 - 12:04 AM.


#8 Mero

Mero

    Touch Fluffy Tail

  • Banned
  • Real Name:Tamamo No Mae
  • Location:Rainbow Factory

Posted 12 February 2013 - 10:44 AM

Just might of figured it out. It's may not just bugged, but the explanation is backwards.

Fixed Version:
CODE
//Converts directions going round in a circle "U, L, D, R" to U, D, L, R. Useful getting the perpendiculars of a direction.
int SpinDir(int dir) {
    if(dir == DIR_UP || dir == DIR_RIGHT)
        return dir;
    else if(dir == DIR_LEFT)
        return DIR_DOWN;
    else if(dir == DIR_DOWN)
        return DIR_LEFT;
    return -1;
}

Usuage:
CODE
SpinDir((dir+1)%4); //CCW Perpendicular Direction
SpinDir((dir+3)%4); //CW Perpendicular Direction



0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users