예제 #1
0
 public void UpdateRotation()
 {
     if (!this.pawn.Destroyed && !this.pawn.jobs.HandlingFacing)
     {
         if (this.pawn.pather.Moving)
         {
             if (this.pawn.pather.curPath != null && this.pawn.pather.curPath.NodesLeftCount >= 1)
             {
                 this.FaceAdjacentCell(this.pawn.pather.nextCell);
             }
         }
         else
         {
             Stance_Busy stance_Busy = this.pawn.stances.curStance as Stance_Busy;
             if (stance_Busy != null && stance_Busy.focusTarg.IsValid)
             {
                 if (stance_Busy.focusTarg.HasThing)
                 {
                     this.Face(stance_Busy.focusTarg.Thing.DrawPos);
                 }
                 else
                 {
                     this.FaceCell(stance_Busy.focusTarg.Cell);
                 }
             }
             else
             {
                 if (this.pawn.jobs.curJob != null)
                 {
                     LocalTargetInfo target = this.pawn.CurJob.GetTarget(this.pawn.jobs.curDriver.rotateToFace);
                     if (target.HasThing)
                     {
                         bool     flag     = false;
                         IntVec3  c        = default(IntVec3);
                         CellRect cellRect = target.Thing.OccupiedRect();
                         for (int i = cellRect.minZ; i <= cellRect.maxZ; i++)
                         {
                             for (int j = cellRect.minX; j <= cellRect.maxX; j++)
                             {
                                 if (this.pawn.Position == new IntVec3(j, 0, i))
                                 {
                                     this.Face(target.Thing.DrawPos);
                                     return;
                                 }
                             }
                         }
                         for (int k = cellRect.minZ; k <= cellRect.maxZ; k++)
                         {
                             for (int l = cellRect.minX; l <= cellRect.maxX; l++)
                             {
                                 IntVec3 intVec = new IntVec3(l, 0, k);
                                 if (intVec.AdjacentToCardinal(this.pawn.Position))
                                 {
                                     this.FaceAdjacentCell(intVec);
                                     return;
                                 }
                                 if (intVec.AdjacentTo8Way(this.pawn.Position))
                                 {
                                     flag = true;
                                     c    = intVec;
                                 }
                             }
                         }
                         if (flag)
                         {
                             if (DebugViewSettings.drawPawnRotatorTarget)
                             {
                                 this.pawn.Map.debugDrawer.FlashCell(this.pawn.Position, 0.6f, "jbthing", 50);
                                 GenDraw.DrawLineBetween(this.pawn.Position.ToVector3Shifted(), c.ToVector3Shifted());
                             }
                             this.FaceAdjacentCell(c);
                         }
                         else
                         {
                             this.Face(target.Thing.DrawPos);
                         }
                         return;
                     }
                     if (this.pawn.Position.AdjacentTo8Way(target.Cell))
                     {
                         if (DebugViewSettings.drawPawnRotatorTarget)
                         {
                             this.pawn.Map.debugDrawer.FlashCell(this.pawn.Position, 0.2f, "jbloc", 50);
                             GenDraw.DrawLineBetween(this.pawn.Position.ToVector3Shifted(), target.Cell.ToVector3Shifted());
                         }
                         this.FaceAdjacentCell(target.Cell);
                         return;
                     }
                     if (target.Cell.IsValid && target.Cell != this.pawn.Position)
                     {
                         this.Face(target.Cell.ToVector3());
                         return;
                     }
                 }
                 if (this.pawn.Drafted)
                 {
                     this.pawn.Rotation = Rot4.South;
                 }
             }
         }
     }
 }
예제 #2
0
 public void FaceTarget(LocalTargetInfo target)
 {
     if (target.IsValid)
     {
         if (target.HasThing)
         {
             Thing thing = (!target.Thing.Spawned) ? ThingOwnerUtility.GetFirstSpawnedParentThing(target.Thing) : target.Thing;
             if (thing != null && thing.Spawned)
             {
                 bool     flag     = false;
                 IntVec3  c        = default(IntVec3);
                 CellRect cellRect = thing.OccupiedRect();
                 for (int i = cellRect.minZ; i <= cellRect.maxZ; i++)
                 {
                     for (int j = cellRect.minX; j <= cellRect.maxX; j++)
                     {
                         if (pawn.Position == new IntVec3(j, 0, i))
                         {
                             Face(thing.DrawPos);
                             return;
                         }
                     }
                 }
                 for (int k = cellRect.minZ; k <= cellRect.maxZ; k++)
                 {
                     for (int l = cellRect.minX; l <= cellRect.maxX; l++)
                     {
                         IntVec3 intVec = new IntVec3(l, 0, k);
                         if (intVec.AdjacentToCardinal(pawn.Position))
                         {
                             FaceAdjacentCell(intVec);
                             return;
                         }
                         if (intVec.AdjacentTo8Way(pawn.Position))
                         {
                             flag = true;
                             c    = intVec;
                         }
                     }
                 }
                 if (flag)
                 {
                     if (DebugViewSettings.drawPawnRotatorTarget)
                     {
                         pawn.Map.debugDrawer.FlashCell(pawn.Position, 0.6f, "jbthing");
                         GenDraw.DrawLineBetween(pawn.Position.ToVector3Shifted(), c.ToVector3Shifted());
                     }
                     FaceAdjacentCell(c);
                 }
                 else
                 {
                     Face(thing.DrawPos);
                 }
             }
         }
         else if (pawn.Position.AdjacentTo8Way(target.Cell))
         {
             if (DebugViewSettings.drawPawnRotatorTarget)
             {
                 pawn.Map.debugDrawer.FlashCell(pawn.Position, 0.2f, "jbloc");
                 GenDraw.DrawLineBetween(pawn.Position.ToVector3Shifted(), target.Cell.ToVector3Shifted());
             }
             FaceAdjacentCell(target.Cell);
         }
         else if (target.Cell.IsValid && target.Cell != pawn.Position)
         {
             Face(target.Cell.ToVector3());
         }
     }
 }