public override void PostMake()
 {
     base.PostMake();
     powerComp      = GetComp <CompPowerTrader>();
     refuelableComp = GetComp <CompRefuelable>();
     outputComp     = GetComp <CompOutputAdjustable>();
 }
コード例 #2
0
 protected override bool TryCastShot()
 {
     if (burstShotsLeft > 1)
     {
         RatkinSoundDefOf.RK_Charge.PlayOneShot(new TargetInfo(caster.Position, caster.Map, false));
         if (verbProps.consumeFuelPerShot > 0f)
         {
             CompRefuelable compGunlance = EquipmentSource.TryGetComp <CompGunlanceFuel>();
             if (compGunlance != null)
             {
                 compGunlance.ConsumeFuel(verbProps.consumeFuelPerShot);
             }
         }
         AttachableThing_GunlanceIgnition ignition = ThingMaker.MakeThing(GunlanceDefOf.GunlancePreIgnition, null) as AttachableThing_GunlanceIgnition;
         ignition.AttachTo(CasterPawn);
         GenSpawn.Spawn(ignition, CasterPawn.Position, CasterPawn.Map, caster.Rotation, WipeMode.Vanish, false);
     }
     else
     {
         CasterPawn.GetAttachment(GunlanceDefOf.GunlancePreIgnition).Destroy();
         AttachableThing_AfterIgnition ignition = ThingMaker.MakeThing(GunlanceDefOf.GunlanceAfterIgnition, null) as AttachableThing_AfterIgnition;
         ignition.AttachTo(CasterPawn);
         GenSpawn.Spawn(ignition, CasterPawn.Position, CasterPawn.Map, caster.Rotation, WipeMode.Vanish, false);
         RatkinSoundDefOf.RK_WyvernFire.PlayOneShot(new TargetInfo(caster.Position, caster.Map, false));
         MakeExplosion();
     }
     return(true);
 }
コード例 #3
0
        public override void PostSpawnSetup(bool respawningAfterLoad)
        {
            base.PostSpawnSetup(respawningAfterLoad);
            if (Props.dependsOnPower)
            {
                powerComp = this.parent.GetComp <CompPowerTrader>();
            }
            if (Props.dependsOnFuel)
            {
                fuelComp = this.parent.GetComp <CompRefuelable>();
            }
            if (Props.dependsOnGas)
            {
                gasComp = GetGasComp();
            }
            if (Props.flickable)
            {
                compFlickable = this.parent.GetComp <CompFlickable>();
            }
            if (!Props.dependsOnFuel && !Props.dependsOnPower)
            {
                active = true;
            }

            tempControlComp       = this.parent.GetComp <CompTempControl>();
            this.position         = this.parent.Position;
            this.map              = this.parent.Map;
            this.proxyHeatManager = this.map.GetComponent <ProxyHeatManager>();
            if (Props.dependsOnPower || Props.dependsOnFuel || Props.dependsOnGas || Props.flickable)
            {
                this.proxyHeatManager.compTemperaturesToTick.Add(this);
            }

            this.MarkDirty();
        }
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     powerComp      = GetComp <CompPowerTrader>();
     refuelableComp = GetComp <CompRefuelable>();
     outputComp     = GetComp <CompOutputAdjustable>();
 }
コード例 #5
0
        public override void Resolve(ResolveParams rp)
        {
            Map map = BaseGen.globalSettings.map;

            refuelables.Clear();
            foreach (IntVec3 item in rp.rect)
            {
                List <Thing> thingList = item.GetThingList(map);
                for (int i = 0; i < thingList.Count; i++)
                {
                    CompRefuelable compRefuelable = thingList[i].TryGetComp <CompRefuelable>();
                    if (compRefuelable != null && !refuelables.Contains(compRefuelable))
                    {
                        refuelables.Add(compRefuelable);
                    }
                }
            }
            for (int j = 0; j < refuelables.Count; j++)
            {
                float fuelCapacity = refuelables[j].Props.fuelCapacity;
                float amount       = Rand.Range(fuelCapacity / 2f, fuelCapacity);
                refuelables[j].Refuel(amount);
            }
            refuelables.Clear();
        }
コード例 #6
0
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     this.stoneComp         = this.parent.GetComp <CompExtinguishable>();
     this.refuelableComp    = this.parent.GetComp <CompRefuelable>();
     this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
 }
コード例 #7
0
        private void checkRefuelNeeded()
        {
            refuelNeeded    = false;
            refuelNeededNow = false;
            List <Thing> list = this.map.listerThings.ThingsInGroup(ThingRequestGroup.Refuelable);

            foreach (Thing thing in list)
            {
                CompRefuelable refuel = thing.TryGetComp <CompRefuelable>();
                if (refuel == null)
                {
                    continue;
                }
                if (!refuel.HasFuel)
                {
                    refuelNeeded    = true;
                    refuelNeededNow = true;
                    return;
                }
                if (!refuel.IsFull)
                {
                    refuelNeeded = true;
                    continue;
                }
            }
        }
コード例 #8
0
 static void Prefix(CompRefuelable __instance, ref Thing fuelThing)
 {
     if (Util.IsCarbonThing(fuelThing))
     {
         fuelThing.stackCount *= 3;
     }
 }
コード例 #9
0
        public override void SpawnSetup(Map map, bool respawningAfterLoad)
        {
            //this needs to be called before base.SpawnSetup for the init implementation of droneSkillsRecord in Building_DroneStation
            refuelableComp = GetComp <CompRefuelable>();

            base.SpawnSetup(map, respawningAfterLoad);
        }
コード例 #10
0
        private static bool CanRefuel(Pawn pawn, Thing t, bool forced)
        {
            CompRefuelable compRefuelable = t.TryGetComp <CompRefuelable>();

            if (compRefuelable == null || compRefuelable.IsFull || !compRefuelable.allowAutoRefuel || !compRefuelable.ShouldAutoRefuelNow)
            {
                return(false);
            }
            if (t.IsForbiddenForPrisoner(pawn) || !pawn.CanReserve(t, 1, -1, null, forced))
            {
                return(false);
            }

            if (Traverse.Create(typeof(RefuelWorkGiverUtility)).Method("FindBestFuel", new[] { pawn, t }).GetValue <Thing>() == null)
            {
                ThingFilter fuelFilter = t.TryGetComp <CompRefuelable>().Props.fuelFilter;
                JobFailReason.Is("NoFuelToRefuel".Translate(fuelFilter.Summary));
                return(false);
            }
            if (t.TryGetComp <CompRefuelable>().Props.atomicFueling&& Traverse.Create(typeof(RefuelWorkGiverUtility)).Method("FindAllFuel", new[] { pawn, t }).GetValue <List <Thing> >() == null)
            {
                ThingFilter fuelFilter2 = t.TryGetComp <CompRefuelable>().Props.fuelFilter;
                JobFailReason.Is("NoFuelToRefuel".Translate(fuelFilter2.Summary));
                return(false);
            }
            return(true);
        }
コード例 #11
0
        public override void PostMake()
        {
            base.PostMake();

            refuelableComp = GetComp <CompRefuelable>();
            refuelableComp.Refuel(extension.GetDronesOnSpawn(refuelableComp));
        }
コード例 #12
0
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     this.powerComp         = this.parent.GetComp <CompPowerTrader>();
     this.refuelableComp    = this.parent.GetComp <CompRefuelable>();
     this.breakdownableComp = this.parent.GetComp <CompBreakdownable>();
 }
コード例 #13
0
 public override void PostMake()
 {
     base.PostMake();
     extension       = def.GetModExtension <DefModExtension_DroneStation>();
     refuelableComp  = GetComp <CompRefuelable>();
     compPowerTrader = GetComp <CompPowerTrader>();
 }
コード例 #14
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     powerComp         = GetComp <CompPowerTrader>();
     refuelableComp    = GetComp <CompRefuelable>();
     breakdownableComp = GetComp <CompBreakdownable>();
 }
 public static bool Prefix(CompRefuelable __instance, List <Thing> fuelThings)
 {
     if (__instance is CompTowerFoodRefuelable)
     {
         if (__instance.Props.atomicFueling)
         {
             Log.Error("Refuel in Tower shouldn't be atomic");
         }
         float remains = (__instance.TargetFuelLevel - __instance.Fuel) / __instance.Props.FuelMultiplierCurrentDifficulty;
         while (remains > float.Epsilon && fuelThings.Count > 0)
         {
             Thing thing     = fuelThings.Pop <Thing>();
             float nutrition = FoodUtility.GetNutrition(thing, thing.def);
             if (nutrition < float.Epsilon)
             {
                 continue;
             }
             int curNum = Mathf.CeilToInt(remains / nutrition);
             curNum = Math.Min(curNum, thing.stackCount);
             ForceAddFuel(__instance, curNum * nutrition);
             thing.SplitOff(curNum).Destroy(DestroyMode.Vanish);
             remains -= curNum * nutrition;
         }
         return(false);
     }
     return(true);
 }
コード例 #16
0
ファイル: Quest_Laboratory.cs プロジェクト: SwimUp/moreevents
        private void DoDestroyDestroyable()
        {
            foreach (var itemPos in destroyableItems)
            {
                List <Thing> items = itemPos.GetThingList(Site.Map);

                foreach (var item in items)
                {
                    CompRefuelable compRefuelable = item.TryGetComp <CompRefuelable>();
                    if (compRefuelable != null)
                    {
                        float refuelInt = Mathf.Clamp(compRefuelable.Fuel - compRefuelable.Props.fuelCapacity, 0, compRefuelable.Props.fuelCapacity);

                        compRefuelable.Refuel(refuelInt);
                    }

                    CompBreakdownable compBreakdownable = item.TryGetComp <CompBreakdownable>();
                    if (compBreakdownable != null)
                    {
                        compBreakdownable.DoBreakdown();
                    }

                    if (item.def.CanHaveFaction)
                    {
                        item.SetFaction(Faction.OfPlayer);
                    }
                }
            }
        }
コード例 #17
0
        public static void ShouldBeLitNow_Postfix(ref bool __result, CompGlower __instance)
        {
            if (__result)
            {
                return;
            }

            if (!__instance.parent.Spawned)
            {
                return;
            }
            if (!FlickUtility.WantsToBeOn(__instance.parent))
            {
                return;
            }
            Comp.VoidNetPort compPowerTrader = __instance.parent.TryGetComp <Comp.VoidNetPort>();
            if (compPowerTrader != null && !compPowerTrader.PowerOn)
            {
                __result = true;
                return;
            }
            CompRefuelable compRefuelable = __instance.parent.TryGetComp <CompRefuelable>();

            if (compRefuelable != null && !compRefuelable.HasFuel)
            {
                return;
            }
            CompSendSignalOnCountdown compSendSignalOnCountdown = __instance.parent.TryGetComp <CompSendSignalOnCountdown>();

            if (compSendSignalOnCountdown != null && compSendSignalOnCountdown.ticksLeft <= 0)
            {
                return;
            }
            return;
        }
コード例 #18
0
        public override void Resolve(ResolveParams rp)
        {
            Map map = BaseGen.globalSettings.map;

            SymbolResolver_Refuel.refuelables.Clear();
            CellRect.CellRectIterator iterator = rp.rect.GetIterator();
            while (!iterator.Done())
            {
                List <Thing> thingList = iterator.Current.GetThingList(map);
                for (int i = 0; i < thingList.Count; i++)
                {
                    CompRefuelable compRefuelable = thingList[i].TryGetComp <CompRefuelable>();
                    if (compRefuelable != null && !SymbolResolver_Refuel.refuelables.Contains(compRefuelable))
                    {
                        SymbolResolver_Refuel.refuelables.Add(compRefuelable);
                    }
                }
                iterator.MoveNext();
            }
            for (int j = 0; j < SymbolResolver_Refuel.refuelables.Count; j++)
            {
                float fuelCapacity = SymbolResolver_Refuel.refuelables[j].Props.fuelCapacity;
                float amount       = Rand.Range(fuelCapacity / 2f, fuelCapacity);
                SymbolResolver_Refuel.refuelables[j].Refuel(amount);
            }
            SymbolResolver_Refuel.refuelables.Clear();
        }
コード例 #19
0
ファイル: hatch.cs プロジェクト: shiuanyue/Rimworld_mods
        private void UnburrowTurret()
        {
            SoundDefOf.DropPod_Open.PlayOneShot(new TargetInfo(this.Position, this.Map, false));
            Map     map = base.Map;
            IntVec3 loc = this.Position;
            float   HPp = (float)this.HitPoints / (float)this.MaxHitPoints;

            if (insideStuff)
            {
                Thing thing = GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named(insideman), this.Stuff), loc, map, WipeMode.Vanish);
                thing.SetFaction(Faction.OfPlayer, null);
                thing.HitPoints = (int)Math.Ceiling(thing.MaxHitPoints * HPp);
                if (insidefuel >= 0)
                {
                    CompRefuelable refuelableComp = ((ThingWithComps)thing).GetComp <CompRefuelable>();
                    refuelableComp.ConsumeFuel(9999);
                    refuelableComp.Refuel((insidefuel / refuelableComp.Props.FuelMultiplierCurrentDifficulty));
                }
            }
            else
            {
                Thing thing = GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named(insideman), null), loc, map, WipeMode.Vanish);
                thing.SetFaction(Faction.OfPlayer, null);
                thing.HitPoints = (int)Math.Ceiling(thing.MaxHitPoints * HPp);
                if (insidefuel >= 0)
                {
                    CompRefuelable refuelableComp = ((ThingWithComps)thing).GetComp <CompRefuelable>();
                    refuelableComp.ConsumeFuel(9999);
                    refuelableComp.Refuel((insidefuel / refuelableComp.Props.FuelMultiplierCurrentDifficulty));
                }
            }
        }
コード例 #20
0
        private bool CanRefuel(Pawn pawn, Thing t, bool mustBeAutoRefuelable)
        {
            CompRefuelable compRefuelable = t.TryGetComp <CompRefuelable>();

            if (compRefuelable == null || compRefuelable.IsFull)
            {
                return(false);
            }
            if (mustBeAutoRefuelable && !compRefuelable.ShouldAutoRefuelNow)
            {
                return(false);
            }
            if (t.IsForbidden(pawn) || !pawn.CanReserveAndReach(t, PathEndMode.Touch, pawn.NormalMaxDanger(), 1))
            {
                return(false);
            }
            if (this.FindBestFuel(pawn, t) == null)
            {
                ThingFilter fuelFilter = t.TryGetComp <CompRefuelable>().Props.fuelFilter;
                JobFailReason.Is("NoFuelToRefuel".Translate(new object[]
                {
                    fuelFilter.Summary
                }));
                return(false);
            }
            CompMountable compMountable = t.TryGetComp <CompMountable>();

            if (compMountable != null && compMountable.IsMounted)
            {
                return(false);
            }

            return(true);
        }
コード例 #21
0
 public override void SpawnSetup(Map map, bool respawningAfterLoad)
 {
     base.SpawnSetup(map, respawningAfterLoad);
     flick = GetComp <CompFlickable>();
     power = GetComp <CompPowerTrader>();
     fuel  = GetComp <CompRefuelable>();
 }
コード例 #22
0
        public override Job JobOnThing(Pawn pawn, Thing thing, bool forced = false)
        {
            IBillGiver billGiver = thing as IBillGiver;

            if (billGiver != null && ThingIsUsableBillGiver(thing) && billGiver.BillStack.AnyShouldDoNow && billGiver.UsableForBillsAfterFueling())
            {
                LocalTargetInfo target = thing;
                bool            ignoreOtherReservations = forced;
                if (pawn.CanReserve(target, 1, -1, null, ignoreOtherReservations) && !thing.IsBurning() && !thing.IsForbidden(pawn))
                {
                    CompRefuelable compRefuelable = thing.TryGetComp <CompRefuelable>();
                    if (compRefuelable != null && !compRefuelable.HasFuel)
                    {
                        if (!RefuelWorkGiverUtility.CanRefuel(pawn, thing, forced))
                        {
                            return(null);
                        }
                        return(RefuelWorkGiverUtility.RefuelJob(pawn, thing, forced));
                    }
                    billGiver.BillStack.RemoveIncompletableBills();
                    return(StartOrResumeBillJob(pawn, billGiver));
                }
            }
            return(null);
        }
        public static void ForceAddFuel(CompRefuelable __instance, float value)
        {
            var fuelField = typeof(CompRefuelable).GetField("fuel", BindingFlags.NonPublic | BindingFlags.Instance);

            fuelField.SetValue(__instance, (float)fuelField.GetValue(__instance) + value * __instance.Props.FuelMultiplierCurrentDifficulty);
            __instance.parent.BroadcastCompSignal("Refueled");
        }
コード例 #24
0
        public override void CompTick()
        {
            base.CompTick();
            ticker++;
            if (ticker >= Props.scuttlePollInTicks)
            {
                ticker = 0;

                if (compRefuelable == null)
                {
                    compRefuelable = parent.TryGetComp <CompRefuelable>();
                }

                if (compRefuelable == null || !BlackFuelUtil.CarbonThingsExist || compRefuelable.IsFull)
                {
                    return;
                }
                if (parent.IsForbidden(parent.Faction))
                {
                    return;
                }

                CompFlickable compFlickable = parent.GetComp <CompFlickable>();
                if (compFlickable != null && !compFlickable.SwitchIsOn)
                {
                    return;
                }

                if (!compRefuelable.ShouldAutoRefuelNow)
                {
                    return;
                }

                Thing fuelThing = FindFuelInAnyScuttle();
                if (fuelThing != null)
                {
                    // should I check if the item is forbidden first? Core hopper logic doesn't seem to...
                    int fuelNeeded     = compRefuelable.GetFuelCountToFullyRefuel();
                    int fuelThingValue = fuelThing.stackCount;

                    if (BlackFuelUtil.IsCarbonThing(fuelThing))
                    {
                        fuelNeeded     /= 3;
                        fuelThingValue *= 3;
                    }

                    if (fuelThingValue <= fuelNeeded)
                    {
                        compRefuelable.Refuel(fuelThingValue);
                        fuelThing.Destroy();
                    }
                    else
                    {
                        compRefuelable.Refuel(fuelThingValue);
                        fuelThing.stackCount -= fuelNeeded;
                    }
                }
            }
        }
コード例 #25
0
        // Methods

        public override void Initialize(CompProperties props)
        {
            base.Initialize(props);
            refuelComp     = parent.GetComp <CompRefuelable>();
            powerTradeComp = parent.GetComp <CompPowerTrader>();
            flickComp      = parent.GetComp <CompFlickable>();
            defaultTexPath = parent.def.graphicData.texPath;
        }
コード例 #26
0
ファイル: Building_CoilGun.cs プロジェクト: Epicguru/RimForge
        public void ReplaceFuelProps(CompRefuelable comp)
        {
            var props    = comp.Props;
            var newProps = props.CloneObject();

            newProps.fuelFilter = new ThingFilter();
            comp.props          = newProps;
        }
コード例 #27
0
 static void Postfix(CompRefuelable __instance)
 {
     Refueling = false;
     if (__instance is CompRefuelable_Multi)
     {
         (__instance as CompRefuelable_Multi).controller.CheckFuelList();
     }
 }
コード例 #28
0
 private static void FuelRemove20Percent()
 {
     foreach (Thing item in Find.CurrentMap.thingGrid.ThingsAt(UI.MouseCell()))
     {
         CompRefuelable compRefuelable = item.TryGetComp <CompRefuelable>();
         compRefuelable?.ConsumeFuel(compRefuelable.Props.fuelCapacity * 0.2f);
     }
 }
コード例 #29
0
 /// <summary>
 /// Returns the number of Drones that should be availibale on Spawn.
 /// </summary>
 public int GetDronesOnSpawn(CompRefuelable fuelcomp = null)
 {
     if (spawnWithFullDrones)
     {
         return((int)(fuelcomp?.Props.fuelCapacity ?? maxNumDrones));
     }
     return(Mathf.Clamp(spawnWithDrones, 0, (int)(fuelcomp?.Props.fuelCapacity ?? maxNumDrones)));
 }
コード例 #30
0
 public override void SpawnSetup(Map map, bool blabla)
 {
     base.SpawnSetup(map, blabla);
     powerComp         = GetComp <CompPowerTrader>();
     refuelableComp    = GetComp <CompRefuelable>();
     breakdownableComp = GetComp <CompBreakdownable>();
     powerComp         = GetComp <CompPowerTrader>();
     consoleDef        = DefDatabase <ThingDef> .GetNamed("ET_Console");
 }