Sign() public static method

public static Sign ( float f ) : float
f float
return float
コード例 #1
0
    int GetWrapedTable(int setSquare, int tempDir, int tableSize, int tableRows)
    {
        var tempSquare = (Math.Abs(tempDir) == 4) ? -1 * (int)Math.Sign(tempDir) : (Math.Abs(tempDir) % 5) * (int)Math.Sign(tempDir);

        if ((setSquare % tableRows) + tempSquare == -1 || (setSquare % tableRows) + tempSquare == tableRows)
        {
            tempSquare = (tableRows - 1) * ((((setSquare % tableRows) + tempSquare) == tableRows) ? -1 : 1);
        }

        setSquare += tempSquare;

        if (Math.Abs(tempDir) != 1 && Math.Abs(tempDir) != 0)
        {
            tempSquare = tableRows * (int)Math.Sign(tempDir);
            setSquare += tempSquare;
        }

        if (setSquare < 0)
        {
            setSquare = tableSize - Math.Abs(setSquare);
        }

        setSquare %= tableSize;

        return(setSquare);
    }
コード例 #2
0
ファイル: Maths.cs プロジェクト: Shophorn/encounter-suburb
    public static float Root3(float t)
    {
        const float pow = 1f / 3f;

        float sign = Mathf.Sign(t);
        float root = Mathf.Pow(sign * t, pow);

        return(sign * root);
    }
コード例 #3
0
        void Tick()
        {
            if (Event.current.type == EventType.Repaint)
            {
                float deltaTime = Time.realtimeSinceStartup - lastUpdate;

                // Right at the start of a transition the deltaTime will
                // not be reliable, so use a very small value instead
                // until the next repaint
                if (value == 0f || value == 1f)
                {
                    deltaTime = 0.001f;
                }
                deltaTime = Mathf.Clamp(deltaTime, 0.00001F, 0.1F);

                // Larger regions fade slightly slower
                deltaTime /= Mathf.Sqrt(Mathf.Max(lastRect.height, 100));

                lastUpdate = Time.realtimeSinceStartup;


                float targetValue = open ? 1F : 0F;
                if (!Mathf.Approximately(targetValue, value))
                {
                    value += deltaTime * animationSpeed * Mathf.Sign(targetValue - value);
                    value  = Mathf.Clamp01(value);
                    editor.Repaint();

                    if (!fancyEffects)
                    {
                        value = targetValue;
                    }
                }
                else
                {
                    value = targetValue;
                }
            }
        }
コード例 #4
0
ファイル: VoxelContour.cs プロジェクト: pinzeweifen/DCET
        public void WalkContour(int x, int z, int i, ushort[] flags, List <int> verts)
        {
            // Choose the first non-connected edge
            int dir = 0;

            while ((flags[i] & (ushort)(1 << dir)) == 0)
            {
                dir++;
            }

            int startDir = dir;
            int startI   = i;

            int area = voxelArea.areaTypes[i];

            int iter = 0;

                        #if ASTARDEBUG
            Vector3 previousPos;
            Vector3 currentPos;

            previousPos = ConvertPos(
                x,
                0,
                z
                );

            Vector3 previousPos2 = ConvertPos(
                x,
                0,
                z
                );
                        #endif

            while (iter++ < 40000)
            {
                //Are we facing a region edge
                if ((flags[i] & (ushort)(1 << dir)) != 0)
                {
                                        #if ASTARDEBUG
                    Vector3 pos = ConvertPos(x, 0, z) + new Vector3((voxelArea.DirectionX[dir] != 0) ? Mathf.Sign(voxelArea.DirectionX[dir]) : 0, 0, (voxelArea.DirectionZ[dir]) != 0 ? Mathf.Sign(voxelArea.DirectionZ[dir]) : 0) * 0.6F;
                    //int dir2 = (dir+1) & 0x3;
                    //pos += new Vector3 ((voxelArea.DirectionX[dir2] != 0) ? Mathf.Sign(voxelArea.DirectionX[dir2]) : 0,0,(voxelArea.DirectionZ[dir2]) != 0 ? Mathf.Sign(voxelArea.DirectionZ[dir2]) : 0)*1.2F;

                    //Debug.DrawLine (ConvertPos (x,0,z),pos,Color.cyan);
                    Debug.DrawLine(previousPos2, pos, Color.blue);
                    previousPos2 = pos;
                                        #endif

                    //Choose the edge corner
                    bool isBorderVertex = false;
                    bool isAreaBorder   = false;

                    int px = x;
                    int py = GetCornerHeight(x, z, i, dir, ref isBorderVertex);
                    int pz = z;

                    switch (dir)
                    {
                    case 0: pz += voxelArea.width;; break;

                    case 1: px++; pz += voxelArea.width; break;

                    case 2: px++; break;
                    }

                    /*case 1: px++; break;
                     *  case 2: px++; pz += voxelArea.width; break;
                     *  case 3: pz += voxelArea.width; break;
                     */

                    int r = 0;
                    CompactVoxelSpan s = voxelArea.compactSpans[i];

                    if (s.GetConnection(dir) != NotConnected)
                    {
                        int nx = x + voxelArea.DirectionX[dir];
                        int nz = z + voxelArea.DirectionZ[dir];
                        int ni = (int)voxelArea.compactCells[nx + nz].index + s.GetConnection(dir);
                        r = (int)voxelArea.compactSpans[ni].reg;

                        if (area != voxelArea.areaTypes[ni])
                        {
                            isAreaBorder = true;
                        }
                    }

                    if (isBorderVertex)
                    {
                        r |= RC_BORDER_VERTEX;
                    }
                    if (isAreaBorder)
                    {
                        r |= RC_AREA_BORDER;
                    }

                    verts.Add(px);
                    verts.Add(py);
                    verts.Add(pz);
                    verts.Add(r);

                    //Debug.DrawRay (previousPos,new Vector3 ((dir == 1 || dir == 2) ? 1 : 0, 0, (dir == 0 || dir == 1) ? 1 : 0),Color.cyan);

                    flags[i] = (ushort)(flags[i] & ~(1 << dir)); // Remove visited edges

                    dir = (dir + 1) & 0x3;                       // Rotate CW
                }
                else
                {
                    int ni = -1;
                    int nx = x + voxelArea.DirectionX[dir];
                    int nz = z + voxelArea.DirectionZ[dir];

                    CompactVoxelSpan s = voxelArea.compactSpans[i];

                    if (s.GetConnection(dir) != NotConnected)
                    {
                        CompactVoxelCell nc = voxelArea.compactCells[nx + nz];
                        ni = (int)nc.index + s.GetConnection(dir);
                    }

                    if (ni == -1)
                    {
                        Debug.LogWarning("Degenerate triangles might have been generated.\n" +
                                         "Usually this is not a problem, but if you have a static level, try to modify the graph settings slightly to avoid this edge case.");
                        return;
                    }
                    x = nx;
                    z = nz;
                    i = ni;

                    // & 0x3 is the same as % 4 (modulo 4)
                    dir = (dir + 3) & 0x3;                      // Rotate CCW

                                        #if ASTARDEBUG
                    currentPos = ConvertPos(
                        x,
                        0,
                        z
                        );

                    Debug.DrawLine(previousPos + Vector3.up * 0, currentPos, Color.blue);
                    previousPos = currentPos;
                                        #endif
                }

                if (startI == i && startDir == dir)
                {
                    break;
                }
            }

                        #if ASTARDEBUG
            Color col = new Color(Random.value, Random.value, Random.value);

            for (int q = 0, j = (verts.Count / 4) - 1; q < (verts.Count / 4); j = q, q++)
            {
                int i4 = q * 4;
                int j4 = j * 4;

                Vector3 p1 = ConvertPosWithoutOffset(
                    verts[i4 + 0],
                    verts[i4 + 1],
                    verts[i4 + 2]
                    );

                Vector3 p2 = ConvertPosWithoutOffset(
                    verts[j4 + 0],
                    verts[j4 + 1],
                    verts[j4 + 2]
                    );

                Debug.DrawLine(p1, p2, col);
            }
                        #endif
        }
コード例 #5
0
		public static float SignedAngle(Vector2 from, Vector2 to)
		{
			float num = Vector2.Angle(from, to);
			float num2 = Mathf.Sign(from.x * to.y - from.y * to.x);
			return num * num2;
		}