using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace HeavenStudio.Util { public static class BitwiseUtils { /// /// Returns the value of the lowest set bit in the given integer. /// /// The integer to check. public static int FirstSetBit(int num) { return num & (-num); } /// /// Returns true if the wanted bit is set in the given integer. /// /// The integer to check. /// The bit(s) to check for. public static bool WantCurrent(int num, int want) { if (want <= 0) return false; return (num & want) == want; } /// /// Returns true if the wanted bit is set in the first integer, and not in the second. /// /// The first integer to check. /// The second integer to check. /// The bit(s) to check for. public static bool WantCurrentAndNotLast(int num1, int num2, int want) { if (want <= 0) return false; return ((num1 & want) == want) && ((num2 & want) != want); } /// /// Returns true if the wanted bit is not set in the first integer, but set in the second. /// /// The first integer to check. /// The second integer to check. /// The bit(s) to check for. public static bool WantNotCurrentAndLast(int num1, int num2, int want) { if (want <= 0) return false; return ((num1 & want) != want) && ((num2 & want) == want); } public static Color IntToRgb(int value) { var red = ( value >> 16 ) & 255; var green = ( value >> 8 ) & 255; var blue = ( value >> 0 ) & 255; return new Color(red/255f, green/255f, blue/255f); } public static int RgbToInt(Color color) { var red = (int)(color.r * 255); var green = (int)(color.g * 255); var blue = (int)(color.b * 255); return (red << 16) | (green << 8) | blue; } } }