Пример #1
0
    public void DoSparks(Thing WideBoy)
    {
        if (Find.TickManager.TicksGame <= lastSparkTick + ProspectingUtility.RndBits(95, 165))
        {
            return;
        }

        lastSparkTick = Find.TickManager.TicksGame;
        var NumSparks = ProspectingUtility.RndBits(1, 3);

        for (var i = 0; i < NumSparks; i++)
        {
            FleckMaker.ThrowMicroSparks(WideBoy.Position.ToVector3(), WideBoy.Map);
        }
    }
Пример #2
0
    public void CheckBreakdown(Thing WideBoy)
    {
        if (Find.TickManager.TicksGame <= lastBreakCheck)
        {
            return;
        }

        lastBreakCheck = Find.TickManager.TicksGame + ProspectingUtility.RndBits(7500, 90000);
        var miningSkill = 0;

        if (lastDriller > 0)
        {
            var interactCell = WideBoy.InteractionCell;
            if (WideBoy.Map != null)
            {
                var list = interactCell.GetThingList(WideBoy.Map);
                if (list.Count > 0)
                {
                    foreach (var thing in list)
                    {
                        if (thing is not Pawn pawn || pawn.thingIDNumber != lastDriller)
                        {
                            continue;
                        }

                        miningSkill = Math.Max(0,
                                               Math.Min(20, pawn.skills.GetSkill(SkillDefOf.Mining).Level));
                        break;
                    }
                }
            }
        }

        var breakChance = 20 - (int)(miningSkill / 2f);

        if (ProspectingUtility.Rnd100() >= breakChance || WideBoy.IsBrokenDown())
        {
            return;
        }

        var compBreak = WideBoy.TryGetComp <CompBreakdownable>();

        compBreak?.DoBreakdown();
    }