public void TransferItem([NotNull] Thing item, [NotNull] BeltItemContainer other) { _container.Remove(item); _thingCounter.Remove(item); other.AddItem(item); _parentComponent.OnItemTransfer(item, other._parentComponent); }
private void DoBeltTick() { if (PowerComponent.PowerOn) { // Power is on -> do work // ---------------------- // phase == offline if (BeltPhase == Phase.Offline) { // Turn on, incl. 'system online' glow _beltPhase = Phase.Active; GlowerComponent.Lit = true; // Check if there is anything on the belt: yes? -> add it to our container //foreach (var target in Find.Map.thingGrid.ThingsListAt(parent.Position)) foreach (var target in Find.Map.thingGrid.ThingsAt(parent.Position)) { // Check and make sure this is not a Pawn, and not the belt itself ! if ((target.def.category == EntityCategory.Item) && (target != parent)) { ItemContainer.AddItem(target, BeltSpeed / 2); } } //glowerComp.def.glowColor = new ColorInt(255,200,0,0); // Hum ... that changes ALL the belt ... not what I want ... return; } // phase == active if (BeltPhase != Phase.Active) { return; } // Active 'yellow' color GlowerComponent.Lit = true; // in principle not required (should be already ON ...) ItemContainer.Tick(); PostItemContainerTick(); if (!ItemContainer.WorkToDo) { return; } foreach (var thing in ItemContainer.ThingsToMove) { // Alright, I have something to move. Where to ? var beltDest = GetDestinationForThing(thing); MoveThingTo(thing, beltDest); } } else { // Power off -> reset everything // Let's be smart: check this only once, set the item to 'Unforbidden', and then, let the player choose what he wants to do // i.e. forbid or unforbid them ... if (BeltPhase != Phase.Active) { return; } GlowerComponent.Lit = false; _beltPhase = Phase.Offline; ItemContainer.DropAll(parent.Position, true); } }