public void Dispense() { Point3 coordinates = m_componentBlockEntity.Coordinates; int data = Terrain.ExtractData(Utils.Terrain.GetCellValue(coordinates.X, coordinates.Y, coordinates.Z)); int direction = FourDirectionalBlock.GetDirection(Utils.Terrain.GetCellValue(coordinates.X, coordinates.Y, coordinates.Z)); Driller(coordinates, direction); int num = 0; int slotValue; while (true) { if (num >= SlotsCount - 1) { return; } slotValue = GetSlotValue(num); int slotCount = GetSlotCount(num); if (slotValue != 0 && slotCount > 0) { break; } num++; } MachineMode mode = DrillerBlock.GetMode(data); if (mode == MachineMode.Shoot) { int num2 = RemoveSlotItems(num, 1); for (int i = 0; i < num2; i++) { DispenseItem(coordinates, direction, slotValue, mode); } } }
protected void DispenseItem(Point3 point, int face, int value, MachineMode mode) { Vector3 vector = CellFace.FaceToVector3(face); var vector2 = new Vector3(point) + new Vector3(0.5f) + 0.6f * vector; if (mode != 0) { if (Utils.SubsystemProjectiles.FireProjectile(value, vector2, 1f * m_random.UniformFloat(39f, 41f) * (vector + m_random.Vector3(0.025f, false) + new Vector3(0f, 0.05f, 0f)), Vector3.Zero, null) != null) { Utils.SubsystemAudio.PlaySound("Audio/DispenserShoot", 1f, 0f, vector2, 4f, true); } else { DispenseItem(point, face, value, MachineMode.Dispense); } } }
public static int SetMode(int data, MachineMode mode) { return((data & -9) | ((mode != 0) ? 8 : 0)); }
public static extern ZyanStatus Init(ref Decoder decoder, MachineMode machineMode, AddressWidth addressWidth);