public void Dispense() { Point3 coordinates = m_componentBlockEntity.Coordinates; int data = Terrain.ExtractData(m_subsystemTerrain.Terrain.GetCellValue(coordinates.X, coordinates.Y, coordinates.Z)); int direction = DispenserBlock.GetDirection(data); DispenserBlock.Mode mode = DispenserBlock.GetMode(data); int num = 0; int slotValue; while (true) { if (num < SlotsCount) { slotValue = GetSlotValue(num); int slotCount = GetSlotCount(num); if (slotValue != 0 && slotCount > 0) { break; } num++; continue; } return; } int num2 = RemoveSlotItems(num, 1); for (int i = 0; i < num2; i++) { DispenseItem(coordinates, direction, slotValue, mode); } }
public override void Update() { int value = m_subsystemTerrain.Terrain.GetCellValue(m_componentBlockEntity.Coordinates.X, m_componentBlockEntity.Coordinates.Y, m_componentBlockEntity.Coordinates.Z); int data = Terrain.ExtractData(value); if (m_dispenseButton.IsClicked) { data = DispenserBlock.SetMode(data, DispenserBlock.Mode.Dispense); value = Terrain.ReplaceData(value, data); m_subsystemTerrain.ChangeCell(m_componentBlockEntity.Coordinates.X, m_componentBlockEntity.Coordinates.Y, m_componentBlockEntity.Coordinates.Z, value); } if (m_shootButton.IsClicked) { data = DispenserBlock.SetMode(data, DispenserBlock.Mode.Shoot); value = Terrain.ReplaceData(value, data); m_subsystemTerrain.ChangeCell(m_componentBlockEntity.Coordinates.X, m_componentBlockEntity.Coordinates.Y, m_componentBlockEntity.Coordinates.Z, value); } if (m_acceptsDropsBox.IsClicked) { data = DispenserBlock.SetAcceptsDrops(data, !DispenserBlock.GetAcceptsDrops(data)); value = Terrain.ReplaceData(value, data); m_subsystemTerrain.ChangeCell(m_componentBlockEntity.Coordinates.X, m_componentBlockEntity.Coordinates.Y, m_componentBlockEntity.Coordinates.Z, value); } DispenserBlock.Mode mode = DispenserBlock.GetMode(data); m_dispenseButton.IsChecked = (mode == DispenserBlock.Mode.Dispense); m_shootButton.IsChecked = (mode == DispenserBlock.Mode.Shoot); m_acceptsDropsBox.IsChecked = DispenserBlock.GetAcceptsDrops(data); if (!m_componentDispenser.IsAddedToProject) { base.ParentWidget.Children.Remove(this); } }
public void DispenseItem(Point3 point, int face, int value, DispenserBlock.Mode mode) { Vector3 vector = CellFace.FaceToVector3(face); Vector3 position = new Vector3((float)point.X + 0.5f, (float)point.Y + 0.5f, (float)point.Z + 0.5f) + 0.6f * vector; if (mode == DispenserBlock.Mode.Dispense) { float s = 1.8f; m_subsystemPickables.AddPickable(value, 1, position, s * (vector + m_random.Vector3(0.2f)), null); m_subsystemAudio.PlaySound("Audio/DispenserDispense", 1f, 0f, new Vector3(position.X, position.Y, position.Z), 3f, autoDelay: true); return; } float s2 = m_random.Float(39f, 41f); if (m_subsystemProjectiles.FireProjectile(value, position, s2 * (vector + m_random.Vector3(0.025f) + new Vector3(0f, 0.05f, 0f)), Vector3.Zero, null) != null) { m_subsystemAudio.PlaySound("Audio/DispenserShoot", 1f, 0f, new Vector3(position.X, position.Y, position.Z), 4f, autoDelay: true); } else { DispenseItem(point, face, value, DispenserBlock.Mode.Dispense); } }