public void FeedBackPulse()
 {
     foreach (Thing current in this.Map.listerThings.AllThings)
     {
         if (current.GetType() == typeof(Bookshelf))
         {
             Bookshelf bookshelf = current as Bookshelf;
             if (bookshelf.MissingBooksList.Contains(def))
             {
                 if (bookshelf.StoredBooks.Count < 3)
                 {
                     bookshelf.MissingBooksList.Remove(def);
                     bookshelf.StoredBooks.Add(def);
                     if (Spawned)
                     {
                         Destroy();
                     }
                     break;
                 }
             }
         }
     }
     if (Spawned)
     {
         Destroy();
     }
 }
Ejemplo n.º 2
0
        public Toil TakeBookFromBookshelf(TargetIndex ind, Pawn reader, TargetIndex bookInd)
        {
            Toil takeBook = new Toil();

            takeBook.initAction = delegate
            {
                bool      flag      = true;
                Pawn      actor     = takeBook.actor;
                Bookshelf bookshelf = (Bookshelf)actor.jobs.curJob.GetTarget(ind).Thing;
                Thing     thing     = bookshelf.JobBook(reader);
                if (thing == null)
                {
                    actor.jobs.curDriver.EndJobWith(JobCondition.Incompletable);
                }
                else
                {
                    ReadableBooks readableBooks = thing as ReadableBooks;
                    readableBooks.currentReader = reader;
                    actor.carryTracker.TryStartCarry(readableBooks);
                    actor.jobs.curJob.targetB = actor.carryTracker.CarriedThing;
                }
                if (flag)
                {
                    if (this.pawn.Map.reservationManager.FirstReserverOf(bookshelf, bookshelf.Faction) == reader)
                    {
                        this.pawn.Map.reservationManager.Release(bookshelf, reader);
                    }
                }
            };
            takeBook.defaultCompleteMode = ToilCompleteMode.Delay;
            takeBook.defaultDuration     = 20;
            return(takeBook);
        }
Ejemplo n.º 3
0
        private void InterfaceDrop(ThingDef def, Bookshelf shelf)
        {
            Thing DroppedBook;

            shelf.StoredBooks.Remove(def);
            DroppedBook = ThingMaker.MakeThing(def);
            GenPlace.TryPlaceThing(DroppedBook, shelf.Position, this.Shelf.Map, ThingPlaceMode.Near);
        }
Ejemplo n.º 4
0
 public Toil ReadEnd(Pawn reader, TargetIndex bookInd, TargetIndex BookShelfInd)
 {
     return(new Toil
     {
         initAction = delegate
         {
             Bookshelf bookshelf = (Bookshelf)reader.jobs.curJob.GetTarget(BookShelfInd).Thing;
             ReadableBooks readableBooks = (ReadableBooks)reader.jobs.curJob.GetTarget(bookInd).Thing;
         },
         defaultCompleteMode = ToilCompleteMode.Instant
     });
 }
Ejemplo n.º 5
0
        public static Toil PlaceBookInShelf(TargetIndex book, TargetIndex shelf, Pawn pawn)
        {
            ReadableBooks bookint   = (ReadableBooks)pawn.jobs.curJob.GetTarget(book).Thing;
            Bookshelf     bookshelf = (Bookshelf)pawn.jobs.curJob.GetTarget(shelf).Thing;

            Log.Message("Trying to place book");
            Toil toil = new Toil();

            toil.defaultCompleteMode = ToilCompleteMode.Instant;
            toil.AddPreInitAction(delegate
            {
                bookint.Destroy(DestroyMode.Vanish);
                bookshelf.AddBookToLibrary(bookint.Tdef);
            });
            return(toil);
        }
Ejemplo n.º 6
0
        //      private ReadableBooks bookint;

        //       private Bookshelf bookshelf;

        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.FailOnDestroyedOrNull(TargetIndex.A);
            this.FailOnBurningImmobile(TargetIndex.B);
            if (!base.TargetThingA.IsForbidden(this.pawn))
            {
                this.FailOnForbidden(TargetIndex.A);
            }
            yield return(Toils_Reserve.Reserve(TargetIndex.B, 2));

            Toil toil = Toils_Reserve.Reserve(TargetIndex.A, 1);

            toil.AddFinishAction(delegate
            {
            });
            yield return(toil);

            Toil toil2 = null;

            toil2 = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnSomeonePhysicallyInteracting(TargetIndex.A);
            toil2.AddFinishAction(delegate
            {
            });
            yield return(toil2);

            this.pawn.CurJob.count = 1;
            yield return(Toils_Haul.StartCarryThing(TargetIndex.A));

            Toil toil3 = Toils_Haul.CarryHauledThingToCell(TargetIndex.B);

            toil3.AddFinishAction(delegate
            {
            });
            yield return(toil3);

            Toil toil4 = Bookshelf.PlaceBookInShelf(TargetIndex.A, TargetIndex.B, this.pawn);

            yield return(toil4);

            yield break;
        }
Ejemplo n.º 7
0
        public Toil ReadingBook(Pawn reader, int durationMultiplier, TargetIndex Ind, TargetIndex bookInd)
        {
            Toil          toil           = new Toil();
            List <string> text           = new List <string>();
            Bookshelf     thing          = null;
            ReadableBooks thingBook      = null;
            int           s              = 0;
            int           i              = 0;
            int           prog           = 0;
            int           oldprog        = 0;
            float         showTextFactor = 0;
            bool          tickOnce       = false;

            toil.tickAction = delegate
            {
                if (!tickOnce)
                {
                    thing         = (Bookshelf)reader.jobs.curJob.GetTarget(Ind).Thing;
                    thingBook     = (ReadableBooks)reader.jobs.curJob.GetTarget(bookInd).Thing;
                    this.tempbook = thingBook;
                    if (thingBook.PrepareText().Count > 0)
                    {
                        text = thingBook.PrepareText();
                    }
                    showTextFactor = thingBook.Tdef.TextSpeedShowFactor;
                    if (soul != null)
                    {
                        foreach (KeyValuePair <ThingDef, int> current in soul.readablesManager.ReadableProgressEntry)
                        {
                            if (current.Key.defName == thingBook.def.defName)
                            {
                                prog    = current.Value;
                                oldprog = prog;
                                s       = current.Value / 150;
                                Log.Message("Old Progression Found: " + prog.ToString());
                                break;
                            }
                        }
                    }
                    thingBook.TexChange = true;
                    tickOnce            = true;
                }
                if (thingBook.Tdef.SkillToLearn != null)
                {
                    this.pawn.skills.Learn(thingBook.Tdef.SkillToLearn, thingBook.Tdef.SkillGainFactor * 1f);
                }
                prog += 1;
                if (text.Count > 0)
                {
                    if (i > showTextFactor * 150)
                    {
                        if (text.Count > s)
                        {
                            MoteMaker.ThrowText(reader.TrueCenter() + new Vector3(0f, 0f, 0.7f), thingBook.Map, text.ElementAt(s), Color.green);
                            reader.needs.joy.CurLevel += 0.03f;
                            s++;
                            thingBook.ReadCorruptionTick(this.pawn, thingBook);
                            i = 0;
                        }
                    }
                    i++;
                }

                reader.Drawer.rotator.FaceCell(thingBook.Position);
            };
            toil.defaultCompleteMode = ToilCompleteMode.Delay;
            toil.FailOnDespawnedOrNull(TargetIndex.B);
            toil.defaultDuration = durationMultiplier;
            toil.AddFinishAction(delegate
            {
                if (soul != null)
                {
                    Dictionary <ThingDef, int> entries = soul.readablesManager.ReadableProgressEntry;
                    if (entries.ContainsKey(thingBook.def))
                    {
                        entries[thingBook.def] = prog;
                    }
                    else
                    {
                        Log.Message("Adding Entry");
                        entries.Add(thingBook.def, prog);
                    }
                }
                thingBook.PostReadEffectSelection(prog, oldprog);
                thingBook.TexChange = false;
                this.tempshelf      = thing;
                this.tempbook       = thingBook;
            });

            return(toil);
        }