/// <returns>
    /// Result other than 0 means that this point lies directly on a border between two neighbouring cells.
    /// And thus it must be determined to which of the cells this point will fall into. This method provides an index offset to solve just that.
    /// </returns>
    public static int IsPointBetweenCells(FLOAT point, INT width, FLOAT worldSize)
    {
        float cellSize      = worldSize / (float)width;
        float cellFraction  = (point % cellSize) / cellSize;
        bool  isMiddlePoint = AboutEqual(cellFraction, 1f);

        return(isMiddlePoint ? (point < 0f?-1:1) : 0);
    }
    /// <summary>  </summary>
    public static void GetPositionInsideCell
    (
        FLOAT point, INT numCells, FLOAT worldSize,
        out int lowerCell, out int upperCell, out float normalizedPositionBetweenThoseTwoPoints
    )
    {
        float cellSize     = worldSize / (float)numCells;
        float cellFraction = point / cellSize;

        lowerCell = cellSize < 0f ? (int)math.ceil(cellFraction) : (int)math.floor(cellFraction);
        upperCell = lowerCell < 0 ? lowerCell - 1 : lowerCell + 1;
        normalizedPositionBetweenThoseTwoPoints = (point - (float)lowerCell * cellSize) / cellSize;
    }
Example #3
0
 public D2D1_BRUSH_PROPERTIES(FLOAT opacity, D2D1_MATRIX_3X2_F transform)
 {
     this.opacity   = opacity;
     this.transform = transform;
 }
 public static float2 Index2dToPoint(INT2 i2, FLOAT stepX, FLOAT stepY) => Index2dToPoint(i2.x, i2.y, stepX, stepY);
 /// <summary> Point from 2d indices </summary>
 public static float2 Index2dToPoint(INT x, INT y, FLOAT stepX, FLOAT stepY) => new float2
 {
     x = (float)x * stepX, y = (float)y * stepY
 };
 /// <summary> System.Math.Round( value, System.MidpointRounding.AwayFromZero ) equivalent </summary>
 public static float MidpointRoundingAwayFromZero(FLOAT value, FLOAT step) => (float)MidpointRoundingAwayFromZero(value / step) * step;
 /// <summary> System.Math.Round( value, System.MidpointRounding.AwayFromZero ) equivalent </summary>
 public static int MidpointRoundingAwayFromZero(FLOAT value) => (int)(value + (value < 0f ? -0.5f : 0.5f));
Example #8
0
            private static FIELD CreateNewField(BinaryReader br, int index, int fieldOffset, int dataOrDataOffset, GffFieldType fieldType)
            {
                FIELD data;

                switch (fieldType)
                {
                case GffFieldType.BYTE:
                    data = new BYTE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CHAR:
                    data = new CHAR(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.WORD:
                    data = new WORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.SHORT:
                    data = new SHORT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD:
                    data = new DWORD(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT:
                    data = new INT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DWORD64:
                    data = new DWORD64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.INT64:
                    data = new INT64(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.FLOAT:
                    data = new FLOAT(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.DOUBLE:
                    data = new DOUBLE(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoString:
                    data = new CExoString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.ResRef:
                    data = new ResRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.CExoLocString:
                    data = new CExoLocString(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.VOID:
                    data = new VOID(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Struct:
                    int lbl_index = br.ReadInt32();
                    data = new STRUCT(br, br.ReadInt32(), lbl_index);
                    break;

                case GffFieldType.List:
                    data = new LIST(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Orientation:
                    data = new Orientation(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.Vector:
                    data = new Vector(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                case GffFieldType.StrRef:
                    data = new StrRef(br, fieldOffset + dataOrDataOffset * 12);
                    break;

                default:
                    throw new Exception(string.Format("UNEXPECTED FIELD TYPE \"{0}\", IN STRUCT INDEX \"{1}\"", fieldType, index));
                }

                return(data);
            }
 public static float MidpointRoundingAwayFromZero(FLOAT value, FLOAT step) => NativeGrid.MidpointRoundingAwayFromZero(value, step);
Example #10
0
 public static object ParseExcelType(string str, string type)
 {
     if (INT.Equals(type))
     {
         if (string.IsNullOrEmpty(str))
         {
             return(0);
         }
         return(int.Parse(str));
     }
     else if (NUMBER.Equals(type))
     {
         if (string.IsNullOrEmpty(str))
         {
             return(0);
         }
         return(LockStepConst.ParseInLevelInt(str));
     }
     else if (FLOAT.Equals(type))
     {
         if (string.IsNullOrEmpty(str))
         {
             return(0);
         }
         return(float.Parse(str));
     }
     else if (STRING.Equals(type))
     {
         return(str);
     }
     else if (BOOL.Equals(type))
     {
         return("true".Equals(str.ToLower()));
     }
     else if (LINT.Equals(type))
     {
         string[]   p      = str.SplitStringBySplits();
         List <int> result = new List <int>(p.Length);
         for (int i = 0; i < p.Length; i++)
         {
             if (string.IsNullOrEmpty(str))
             {
                 result.Add(0);
             }
             else
             {
                 result.Add(int.Parse(p[i]));
             }
         }
         return(result);
     }
     else if (LNUMBER.Equals(type))
     {
         string[]   p      = str.SplitStringBySplits();
         List <int> result = new List <int>(p.Length);
         for (int i = 0; i < p.Length; i++)
         {
             if (string.IsNullOrEmpty(str))
             {
                 result.Add(0);
             }
             else
             {
                 result.Add(LockStepConst.ParseInLevelInt(p[i]));
             }
         }
         return(result);
     }
     else if (LFLOAT.Equals(type))
     {
         string[]     p      = str.SplitStringBySplits();
         List <float> result = new List <float>(p.Length);
         for (int i = 0; i < p.Length; i++)
         {
             if (string.IsNullOrEmpty(str))
             {
                 result.Add(0);
             }
             else
             {
                 result.Add(float.Parse(p[i]));
             }
         }
         return(result);
     }
     else if (LSTRING.Equals(type))
     {
         string[]      p      = str.SplitStringBySplits();
         List <string> result = new List <string>(p.Length);
         for (int i = 0; i < p.Length; i++)
         {
             result.Add(p[i]);
         }
         return(result);
     }
     else if (LBOOL.Equals(type))
     {
         string[]    p      = str.SplitStringBySplits();
         List <bool> result = new List <bool>(p.Length);
         for (int i = 0; i < p.Length; i++)
         {
             result.Add("true".Equals(str));
         }
         return(result);
     }
     return(null);
 }
 public static int MidpointRoundingAwayFromZero(FLOAT value) => NativeGrid.MidpointRoundingAwayFromZero(value);
 public static int IsPointBetweenCells(FLOAT point, INT width, FLOAT worldSize) => NativeGrid.IsPointBetweenCells(point, width, worldSize);
 public static void GetPositionInsideCell(FLOAT point, INT numCells, FLOAT worldSize, out int lowerCell, out int upperCell, out float normalizedPositionBetweenThoseTwoPoints) => NativeGrid.GetPositionInsideCell(point, numCells, worldSize, out lowerCell, out upperCell, out normalizedPositionBetweenThoseTwoPoints);
 public static float2 Index2dToPoint(INT2 i2, FLOAT stepX, FLOAT stepY) => NativeGrid.Index2dToPoint(i2, stepX, stepY);
 public static float2 Index2dToPoint(INT x, INT y, FLOAT stepX, FLOAT stepY) => NativeGrid.Index2dToPoint(x, y, stepX, stepY);