本文整理汇总了C#中Pawn.GetRoom方法的典型用法代码示例。如果您正苦于以下问题:C# Pawn.GetRoom方法的具体用法?C# Pawn.GetRoom怎么用?C# Pawn.GetRoom使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pawn
的用法示例。
在下文中一共展示了Pawn.GetRoom方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ThinkNode_ConditionalInPrison
/*
public ThinkNode_ConditionalInPrison() : base()
{
}
*/
protected override bool Satisfied( Pawn pawn )
{
return (
( pawn != null )&&
( pawn.GetRoom() != null )&&
( pawn.GetRoom().isPrisonCell )
);
}
示例2: ShouldStartEscaping
private bool ShouldStartEscaping( Pawn pawn )
{
if(
( !pawn.guest.IsPrisoner )||
( pawn.guest.HostFaction != Faction.OfPlayer )||
( pawn.guest.PrisonerIsSecure )
)
{
return false;
}
// Compare pawn mood to visibility to colonists and cameras
var breakOdds = pawn.EscapeProbability();
if( pawn.needs.mood.CurLevel > breakOdds )
{ // Pawn is happy enough not to chance it
return false;
}
var room = pawn.GetRoom();
if( room.TouchesMapEdge )
{ // Pawn is outside
return true;
}
// Try to find an exit path
var root = room.Regions[ 0 ];
var exitFound = false;
RegionTraverser.BreadthFirstTraverse(
root,
(from,to) =>
{
if( to.portal == null )
{
return true;
}
return (
( to.portal.FreePassage )||
( to.portal.PawnCanOpen( pawn) )
);
},
(reg) =>
{
if( !reg.Room.TouchesMapEdge )
{
return false;
}
exitFound = true;
return true;
},
MaxRegionsToCheckWhenEscapingThroughOpenDoors
);
return exitFound;
}
示例3: TryIssueJobPackage
public override ThinkResult TryIssueJobPackage( Pawn pawn )
{
if(
( pawn == null )||
( pawn.ownership == null )||
( pawn.ownership.OwnedBed == null )||
( pawn.GetRoom() == pawn.ownership.OwnedBed.GetRoom() )
)
{
return ThinkResult.NoJob;
}
return new ThinkResult(
new Job(
JobDefOf.Goto,
(TargetInfo) pawn.ownership.OwnedBed
),
this
);
}
示例4: LawBroken
public override bool LawBroken( Pawn pawn )
{
var hediffAlcohol = pawn.health.hediffSet.GetFirstHediffOfDef( HediffDefOf.Alcohol );
if( hediffAlcohol == null )
{ // Hasn't consumed alcohol recently
return false;
}
var room = pawn.GetRoom();
if( room != null )
{
foreach( var owner in room.Owners )
{
if( owner == pawn )
{ // Pawn is in their own room, leave them be
return false;
}
}
}
// Return pawn is drunk
return hediffAlcohol.CurStageIndex >= 3;
}
示例5: PawnCanOpen
public override bool PawnCanOpen( Pawn p, bool isEscaping )
{
if( cachedRooms.Count == 0 )
{
UpdateCompStatus();
}
if( isEscaping )
{ // Escaping pawns don't care about restrictions
return true;
}
if( this.parent.IsForbiddenToPass( p ) )
{ // Other factions don't care about forbidden doors
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsForbiddenToPass", this.parent.ThingID, p.NameStringShort ) );
return false;
}
// Check animals
if(
( p.RaceProps.Animal )&&
( !AllowAnimals )
)
{
return false;
}
// Check colonists
if(
( p.IsColonist )&&
( !AllowColonists )&&
( !p.IsPrisonerOfColony )&&
( !p.Drafted )&&
( !p.workSettings.WorkIsActive( WorkTypeDefOf.Warden ) )&&
( !p.workSettings.WorkIsActive( WorkTypeDefOf.Doctor ) )
)
{ // Colonists have been told not to use this door
return false;
}
if(
(
( p.IsColonist )||
( p.Faction == Faction.OfPlayer )
)&&
( !p.IsPrisoner )
)
{ // Colonists & colony animals
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsColonist or Faction.OfPlayer", this.parent.ThingID, p.NameStringShort ) );
return true;
}
// Check non-prisoner guests
if( p.IsGuestOfColony() )
{
if( AllowGuests )
{ // Guests can use this door
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsAllowedGuest", this.parent.ThingID, p.NameStringShort ) );
return true;
}
// Guests can't use this door
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsNotAllowedGuest", this.parent.ThingID, p.NameStringShort ) );
return false;
}
if( cachedRooms.NullOrEmpty() )
{
// No room cache, can't check
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} cachedRooms is null", this.parent.ThingID, p.NameStringShort ) );
return false;
}
var pawnRoom = p.GetRoom();
bool checkPrisoners = p.IsPrisonerOfColony;
bool checkSlaves = p.IsSlaveOfColony();
// Slaves supercede prisoners
checkPrisoners &= !checkSlaves;
// Check on prisoners
if(
( AllowPrisoners )&&
( checkPrisoners )
)
{
foreach( var room in cachedRooms )
{
// Don't worry about room pawn is leaving
if( room == pawnRoom )
{
continue;
}
if( !room.isPrisonCell )
{ // Prisoners are only valid for prison cells
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isPrisoner, room {2} !isPrisoncell", this.parent.ThingID, p.NameStringShort, room.ID ) );
return false;
}
}
// Room is valid for prisoners
//Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isPrisoner, all rooms are prison cells", this.parent.ThingID, p.NameStringShort ) );
return true;
}
// Check on slaves
if(
( AllowSlaves )&&
( checkSlaves )
)
{
foreach( var room in cachedRooms )
{
//.........这里部分代码省略.........