コード例 #1
0
        /// <summary>
        ///     Ticks this instance.
        /// </summary>
        public override void Tick()
        {
            base.Tick();

            if (!Refuelable.HasFuel)
            {
                return;
            }

            if (_innerState != ChamberState.Active)
            {
                return;
            }
            if (_timer <= 0)
            {
                try
                {
                    EjectPawn();
                }
                catch (Exception e)
                {
                    Log.Error($"unable to eject pawns from chamber!\ncaught exception {e.GetType().Name}\n{e}");
                }//make sure an exception while ejecting a pawn doesn't put the chamber in a bad state
                _currentUse = ChamberUse.Tf;//this should be the default
                _innerState = ChamberState.WaitingForPawn;
                _timer      = 0;
                return;
            }

            if (PowerCompTrader?.PowerOn == false)
            {
                return;
            }


            if (!Flickable.SwitchIsOn)
            {
                return;
            }
            Refuelable.Notify_UsedThisTick();
            _timer -= 1;
            switch (_currentUse)
            {
            case ChamberUse.Mutation:
                CheckMutationProgress();
                break;

            case ChamberUse.Tf:
                CheckTfMutationProgress();
                break;

            case ChamberUse.Merge:
            default:
                break;
            }
        }
コード例 #2
0
        void TryRefillFromTank()
        {
            var tank = FindMutagenTankComp();

            if (tank == null)
            {
                return;
            }

            var refuelAmount = Mathf.Min(Refuelable.TargetFuelLevel - Refuelable.Fuel, tank.Fuel);

            Refuelable.Refuel(refuelAmount);
            tank.ConsumeFuel(refuelAmount);
        }
コード例 #3
0
        /// <summary>
        ///     Ticks this instance.
        /// </summary>
        public override void Tick()
        {
            base.Tick();

            if (_innerState != ChamberState.Active)
            {
                return;
            }
            if (_timer <= 0)
            {
                try
                {
                    EjectPawn();
                }
                catch (Exception e)
                {
                    Log.Error($"unable to eject pawns from chamber!\ncaught exception {e.GetType().Name}\n{e}");
                }//make sure an exception while ejecting a pawn doesn't put the chamber in a bad state
                _currentUse = ChamberUse.Tf;//this should be the default
                _innerState = ChamberState.WaitingForPawn;
                _timer      = 0;
                return;
            }


            if (!Refuelable.HasFuel)
            {
                if (_hasFuelLast)
                {
                    TryRefillFromTank();
                }
                else if (this.IsHashIntervalTick(REFUEL_CHECK_TIMER))
                {
                    TryRefillFromTank();
                }
                _hasFuelLast = false;
                return;
            }
            else
            {
                _hasFuelLast = true;
            }
            if (!Flickable.SwitchIsOn)
            {
                return;
            }
            Refuelable.Notify_UsedThisTick();
            _timer -= 1;
        }
コード例 #4
0
 public RefuelableProperties(ScriptContext context, Actor self)
     : base(context, self)
 {
     refuelable = self.Trait <Refuelable>();
 }