public void FromBytesWorksAsExpected() { FloatNumber.FromBytes(new List <byte> { 0x00, 0xFF, 0x0A, 0x00, 0x00 }).ShouldBe(-10.0f); FloatNumber.FromBytes(new List <byte> { 0x81, 0x49, 0x0F, 0xDA, 0xA2 }).ShouldBe((float)Math.PI / 2); }
public static FloatNumber CreateValue(float value) { FloatNumber n = new FloatNumber { value = value }; return(n); }
public static FloatNumber CreateSequence() { FloatNumber n = new FloatNumber { type = NumberType.Sequence, sequence = new List <FloatNumber>() }; return(n); }
public static FloatNumber CreateRange(FloatNumber min, FloatNumber max) { FloatNumber n = new FloatNumber { type = NumberType.Range, rangeMin = min, rangeMax = max }; return(n); }
public static FloatNumber CreateDelta(float initialValue, FloatNumber delta) { FloatNumber n = new FloatNumber { type = NumberType.Delta, value = initialValue, delta = delta }; return(n); }
public FloatNumber Add(FloatNumber number) { if (type != NumberType.Sequence) { throw new InvalidOperationException("This method can only be used with a Sequence"); } sequence.Add(number); return(this); }
public ParticleGenerator(int sprite_pixel_row_, int sprite_pixel_col_, int sprite_h_, int sprite_w_, Color4 primary_color_, Color4 secondary_color_, float origin_row_, float origin_col_, FloatNumber dist_from_origin_, FloatNumber delta_row_, FloatNumber delta_col_, Number num_per_frame_, Number duration_of_particle_, int total_frames_) { sprite_pixel_row = sprite_pixel_row_; sprite_pixel_col = sprite_pixel_col_; sprite_h = sprite_h_; sprite_w = sprite_w_; primary_color = primary_color_; secondary_color = secondary_color_; origin_row = origin_row_; origin_col = origin_col_; dist_from_origin = dist_from_origin_; delta_row = delta_row_; delta_col = delta_col_; num_per_frame = num_per_frame_; duration_of_particle = duration_of_particle_; total_frames = total_frames_; }
public static FloatNumber CreateRange(float min, FloatNumber max) => CreateRange(CreateValue(min), max);
public static FloatNumber CreateRange(FloatNumber min, float max) => CreateRange(min, CreateValue(max));
/// <summary> /// Disassemble a calculator entry /// </summary> private DisassemblyItem DisassembleCalculatorEntry(ushort address, byte calcCode, out bool carryOn) { // --- Create the default disassembly item var item = new DisassemblyItem(address) { LastAddress = (ushort)(_offset - 1), Instruction = $".defb #{calcCode:X2}" }; var opCodes = new List <byte> { calcCode }; carryOn = true; // --- If we're in series mode, obtain the subsequent series value if (_seriesCount > 0) { var lenght = (calcCode >> 6) + 1; if ((calcCode & 0x3F) == 0) { lenght++; } for (var i = 0; i < lenght; i++) { var nextByte = Fetch(); opCodes.Add(nextByte); } item.Instruction = ".defb " + string.Join(", ", opCodes.Select(o => $"#{o:X2}")); item.HardComment = $"({FloatNumber.FromCompactBytes(opCodes)})"; _seriesCount--; return(item); } // --- Generate the output according the calculation op code switch (calcCode) { case 0x00: case 0x33: case 0x35: var jump = Fetch(); opCodes.Add(jump); var jumpAddr = (ushort)(_offset - 1 + (sbyte)jump); _output.CreateLabel(jumpAddr, null); item.Instruction = $".defb #{calcCode:X2}, #{jump:X2}"; item.HardComment = $"({s_CalcOps[calcCode]}: {GetLabelName(jumpAddr)})"; carryOn = calcCode != 0x33; break; case 0x34: _seriesCount = 1; item.HardComment = "(stk-data)"; break; case 0x38: item.HardComment = "(end-calc)"; carryOn = false; break; case 0x86: case 0x88: case 0x8C: _seriesCount = calcCode - 0x80; item.HardComment = $"(series-0{calcCode-0x80:X1})"; break; case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0xA4: var constNo = calcCode - 0xA0; item.HardComment = GetIndexedCalcOp(0x3F, constNo); break; case 0xC0: case 0xC1: case 0xC2: case 0xC3: case 0xC4: case 0xC5: var stNo = calcCode - 0xC0; item.HardComment = GetIndexedCalcOp(0x40, stNo); break; case 0xE0: case 0xE1: case 0xE2: case 0xE3: case 0xE4: case 0xE5: var getNo = calcCode - 0xE0; item.HardComment = GetIndexedCalcOp(0x41, getNo); break; default: var comment = s_CalcOps.ContainsKey(calcCode) ? s_CalcOps[calcCode] : $"calc code: #{calcCode:X2}"; item.HardComment = $"({comment})"; break; } return(item); }
private void TestFloat(List <byte> bytes, float value) { var convVal = FloatNumber.FromCompactBytes(bytes); Math.Abs(convVal - value).ShouldBeLessThanOrEqualTo((float)1.0e-12); }
public ParticleGenerator(int sprite_pixel_row_,int sprite_pixel_col_,int sprite_h_,int sprite_w_,Color4 primary_color_,Color4 secondary_color_, float origin_row_,float origin_col_,FloatNumber dist_from_origin_,FloatNumber delta_row_,FloatNumber delta_col_, Number num_per_frame_,Number duration_of_particle_,int total_frames_) { sprite_pixel_row = sprite_pixel_row_; sprite_pixel_col = sprite_pixel_col_; sprite_h = sprite_h_; sprite_w = sprite_w_; primary_color = primary_color_; secondary_color = secondary_color_; origin_row = origin_row_; origin_col = origin_col_; dist_from_origin = dist_from_origin_; delta_row = delta_row_; delta_col = delta_col_; num_per_frame = num_per_frame_; duration_of_particle = duration_of_particle_; total_frames = total_frames_; }