protected override void OnCleanUp() { FlowMgr.RemoveConduitUpdater(this.OnConduitUpdate); NetworkMgr.RemoveFromNetworks(this.OutputCell2, this.OutputItem2, true); base.OnCleanUp(); }
protected virtual void OnConduitUpdate(float data) { if (!FlowMgr.HasConduit(this.InputCell) || !FlowMgr.HasConduit(this.OutputCell)) { } else { ConduitFlow.Conduit conduit = FlowMgr.GetConduit(this.InputCell); ConduitFlow.ConduitContents contents = conduit.GetContents(FlowMgr); float massSrc = Mathf.Min(contents.mass, this.DesiredFlow); if (massSrc > 0) { int disease_count = (int)((massSrc / contents.mass) * contents.diseaseCount); var massMoved = FlowMgr.AddElement(this.OutputCell, contents.element, massSrc, contents.temperature, contents.diseaseIdx, disease_count); MassMoved += massMoved; if (massMoved > 0) { FlowMgr.RemoveElement(this.InputCell, massMoved); DesiredFlow -= massMoved; } } } this.UpdateAnim(); }
protected override void OnCleanUp() { FlowMgr.RemoveConduitUpdater(this.OnConduitUpdate); NetworkMgr.RemoveFromNetworks(this.OutputCell2, this.OutputItem2, true); //if (this.partitionerEntry.IsValid() && (GameScenePartitioner.Instance != null)) // GameScenePartitioner.Instance.Free(ref this.partitionerEntry); base.OnCleanUp(); }
protected override void OnSpawn() { try { base.OnSpawn(); Validate(); InputCell = this.Building.GetUtilityInputCell(); OutputCell1 = this.Building.GetUtilityOutputCell(); OutputCell2 = Grid.OffsetCell(Grid.PosToCell(transform.GetPosition()), this.Building.GetRotatedOffset(OutputPort2Info.offset)); OutputItem2 = new FlowUtilityNetwork.NetworkItem(this.ConduitType, Endpoint.Source, OutputCell2, gameObject); NetworkMgr.AddToNetworks(OutputCell2, OutputItem2, true); this.GetComponent <ConduitConsumer>().isConsuming = false; FlowMgr.AddConduitUpdater(OnConduitUpdate); #region no idea what these do, just copy from game codes ElementFilter.OnSpawn() //((KSelectable)((Component)this).GetComponent<KSelectable>()).SetStatusItem(Db.Get().StatusItemCategories.Main, TemperatureFilterProcess.filterStatusItem, (object)this); //this.UpdateConduitExistsStatus(); this.UpdateConduitBlockedStatus(); //ScenePartitionerLayer layer = (ScenePartitionerLayer)null; //switch (this.ConduitType) //{ // case ConduitType.Gas: // layer = GameScenePartitioner.Instance.gasConduitsLayer; // break; // case ConduitType.Liquid: // layer = GameScenePartitioner.Instance.liquidConduitsLayer; // break; // case ConduitType.Solid: // layer = GameScenePartitioner.Instance.solidConduitsLayer; // break; //} //if (layer == null) // return; //this.partitionerEntry = GameScenePartitioner.Instance.Add("TemperatureFilterProcessConduitExists", this.gameObject, OutputCell2, layer, (System.Action<object>)(data => this.UpdateConduitExistsStatus())); #endregion } catch (Exception ex) { KelmenUtils.Log("TemperatureFilterProcess.OnSpawn", ex); throw ex; } }
//void UpdateConduitExistsStatus() //{ // bool outputCell2IsConnected = RequireOutputs.IsConnected(this.OutputCell2, this.ConduitType); // StatusItem outputConduit2Status; // var buildingStatus = Db.Get().BuildingStatusItems; // switch (this.ConduitType) // { // case ConduitType.Gas: // outputConduit2Status = buildingStatus.NeedGasOut; // break; // case ConduitType.Liquid: // outputConduit2Status = buildingStatus.NeedLiquidOut; // break; // case ConduitType.Solid: // outputConduit2Status = buildingStatus.NeedSolidOut; // break; // default: // throw new ArgumentOutOfRangeException(); // } // bool outputConduit2StatusIsEmpty = (this.OutputConduit2StatusGuid != Guid.Empty); // if (outputCell2IsConnected != outputConduit2StatusIsEmpty) // return; // this.OutputConduit2StatusGuid = this.Selectable.ToggleStatusItem(outputConduit2Status, this.OutputConduit2StatusGuid, !outputCell2IsConnected); //} void UpdateConduitBlockedStatus() { bool outputConduit2IsEmpty = FlowMgr.IsConduitEmpty(this.OutputCell2); bool blockageDetected = (this.ConduitBlockedStatusItemGuid != Guid.Empty); if (outputConduit2IsEmpty != blockageDetected) { return; } StatusItem blockedMultiples = Db.Get().BuildingStatusItems.ConduitBlockedMultiples; this.ConduitBlockedStatusItemGuid = this.Selectable.ToggleStatusItem(blockedMultiples, this.ConduitBlockedStatusItemGuid, !outputConduit2IsEmpty); }
protected override void OnSpawn() { base.OnSpawn(); Building component = GetComponent <Building>(); InputCell = component.GetUtilityInputCell(); OutputCell = component.GetUtilityOutputCell(); FlowMgr.AddConduitUpdater(OnConduitUpdate); DataOnSpawn(); this.UpdateAnim(); this.OnCmpEnable(); }
void OnConduitUpdate(float data) { try { bool setActive = false; this.UpdateConduitBlockedStatus(); if (this.Operation.IsOperational) { var inputContent = FlowMgr.GetContents(InputCell); if ((inputContent.mass > 0) && (inputContent.element != SimHashes.Vacuum)) { var filterData = this; int outputCellIdx = filterData.GetOutputRouteIdx(inputContent.temperature, this.OutputCell1, this.OutputCell2); if (FlowMgr.IsConduitEmpty(outputCellIdx)) { var outputContent = FlowMgr.GetContents(outputCellIdx); /// ConduitFlow.AddElement() included these (similar) chks: /// (outputContent.mass >= this.ConduitMassMax) /// (!inputContent.element.Equals(outputContent.element)) /// float elementMoved = FlowMgr.AddElement(outputCellIdx , inputContent.element, inputContent.mass, inputContent.temperature, inputContent.diseaseIdx, inputContent.diseaseCount); if (elementMoved > 0) { FlowMgr.RemoveElement(this.InputCell, elementMoved); } } //else //{ // /// partial transfer not catered in (core) ElementFilter.OnConduitTick, don't break core design. //} } } this.Operation.SetActive(setActive, false); } catch (Exception ex) { KelmenUtils.Log("TemperatureFilterProcess.OnConduitUpdate", ex); throw ex; } }
protected override void OnSpawn() { try { base.OnSpawn(); InputCell = Building.GetUtilityInputCell(); OutputCell1 = Building.GetUtilityOutputCell(); OutputCell2 = Grid.OffsetCell(Grid.PosToCell(transform.GetPosition()), Building.GetRotatedOffset(OutputPort2Info.offset)); OutputItem2 = new FlowUtilityNetwork.NetworkItem(this.ConduitType, Endpoint.Source, OutputCell2, gameObject); NetworkMgr.AddToNetworks(OutputCell2, OutputItem2, true); FlowMgr.AddConduitUpdater(OnConduitUpdate); } catch (Exception ex) { KelmenUtils.Log("SolidTemperatureFilterProcess.OnSpawn", ex); throw ex; } }
void OnConduitUpdate(float data) { try { if (!this.Operation.IsOperational) { return; } if (FlowMgr.HasConduit(InputCell) && FlowMgr.HasConduit(OutputCell1) && FlowMgr.HasConduit(OutputCell2) && FlowMgr.IsConduitFull(InputCell) //&& FlowMgr.IsConduitEmpty(OutputCell1) && FlowMgr.IsConduitEmpty(OutputCell2) ) { } else { return; } var inputContent = FlowMgr.GetPickupable(FlowMgr.GetContents(InputCell).pickupableHandle); //var inputContent = FlowMgr.RemovePickupable(InputCell); if (inputContent == null) { return; } var inputContent2 = inputContent.PrimaryElement; if (inputContent2 == null) { return; } var filterData = this; int outputCellIdx = filterData.GetOutputRouteIdx(inputContent2.Temperature, this.OutputCell1, this.OutputCell2); if (outputCellIdx == OutputCell1) { if (FlowMgr.IsConduitFull(OutputCell1)) { return; } else //if (outputCellIdx == OutputCell2) if (FlowMgr.IsConduitFull(OutputCell2)) { return; } } //var outputTgt = FlowMgr.GetContents(outputCellIdx); //if (outputTgt.pickupableHandle.IsValid()) // return; inputContent = FlowMgr.RemovePickupable(InputCell); FlowMgr.AddPickupable(outputCellIdx, inputContent); this.Operation.SetActive(false); } catch (Exception ex) { KelmenUtils.Log("SolidTemperatureFilterProcess.OnConduitUpdate", ex); throw ex; } }
protected override void OnCleanUp() { FlowMgr.RemoveConduitUpdater(OnConduitUpdate); MassMoved = 0; base.OnCleanUp(); }