/// <summary> /// Tries to receive some amount of slurry. /// </summary> /// <param name="slurryReceived">The slurry received.</param> /// <returns></returns> public float TryReceiveSlurry(float slurryReceived) { var used = Mathf.Min(RefuelableComp.TargetFuelLevel - RefuelableComp.Fuel, slurryReceived); RefuelableComp.Refuel(used); return(used); }
public void TryLaunch(int destinationTile) { var arrivalAction = CurrentArrivalAction; if (arrivalAction != null) { arrivalAction.source = parent; } // Play sounds var verb = Turret.CurrentEffectiveVerb; if (verb.verbProps.soundCast != null) { verb.verbProps.soundCast.PlayOneShot(new TargetInfo(parent.Position, parent.Map)); } if (verb.verbProps.soundCastTail != null) { verb.verbProps.soundCastTail.PlayOneShotOnCamera(parent.Map); } // Make active artillery strike thing var activeArtilleryStrike = (ActiveArtilleryStrike)ThingMaker.MakeThing(ThingDefOf.VFES_ActiveArtilleryStrike); activeArtilleryStrike.missRadius = ArtilleryStrikeUtility.FinalisedMissRadius(Turret.CurrentEffectiveVerb.verbProps.ForcedMissRadius, Props.maxForcedMissRadiusFactor, parent.Tile, destinationTile, Props.worldTileRange); // Simulate an attack if (ChangeableProjectile != null) { activeArtilleryStrike.shellDef = ChangeableProjectile.Projectile; activeArtilleryStrike.shellCount = 1; ChangeableProjectile.Notify_ProjectileLaunched(); } else { activeArtilleryStrike.shellDef = verb.GetProjectile(); for (int j = 0; j < verb.verbProps.burstShotCount; j++) { activeArtilleryStrike.shellCount++; if (verb.verbProps.consumeFuelPerShot > 0 && RefuelableComp != null) { RefuelableComp.ConsumeFuel(verb.verbProps.consumeFuelPerShot); } } } NonPublicMethods.Building_TurretGun_BurstComplete(Turret); var artilleryStrikeLeaving = (ArtilleryStrikeLeaving)SkyfallerMaker.MakeSkyfaller(ThingDefOf.VFES_ArtilleryStrikeLeaving, activeArtilleryStrike); artilleryStrikeLeaving.startCell = parent.Position; artilleryStrikeLeaving.edgeCell = FacingEdgeCell; artilleryStrikeLeaving.rotation = CurAngle; artilleryStrikeLeaving.destinationTile = destinationTile; artilleryStrikeLeaving.arrivalAction = arrivalAction; artilleryStrikeLeaving.groupID = Find.TickManager.TicksGame; GenSpawn.Spawn(artilleryStrikeLeaving, parent.Position, parent.Map); }
public void DrainMood(float amount) { //Mood oldMood = CurMoodCategory; if (isConscious && !goingRogue) { float minFuel = 1f; if (RefuelableComp.Fuel - amount < minFuel) { amount = RefuelableComp.Fuel - minFuel; } RefuelableComp.ConsumeFuel(amount); UpdateGlower(); } }