49 public float Speed {
get;
set; }
51 public float Range {
get;
set; }
68 bool ignoreHeightDifference,
69 bool raycastDestination,
74 && destination.HasValue) {
94 public virtual void Stop() {
123 float num3 = (m_componentCreature.ComponentBody.CollisionVelocityChange *
new Vector3(1f, 0f, 1f)).LengthSquared() > 0f
124 && m_componentCreature.ComponentBody.StandingOnValue.HasValue
158 value3.Y = Math.
Clamp(value3.
Y, -0.5f, 0.5f);
170 &&
m_random.Float(0f, 1f) < 0.05f) {
182 m_componentCreature.ComponentBody.IsSmoothRiseEnabled = num2 >= 1f || vector.Y >= -0.1f;
184 && (vector.
Y < -0.5f || vector.
Y > 1f)) {
186 &&
m_random.Float(0f, 1f) < 0.05f) {
204 position +
new Vector3(0f, 0.5f, 0f),
231 m_componentCreature.ComponentLocomotion.TurnOrder +=
m_turnOrder;
250 bool isTerrainSafeToGo =
false;
251 bool skipVanilla =
false;
255 modLoader.IsTerrainSafeToGo(
this, position, direction, out isTerrainSafeToGo, out skipVanilla);
260 return isTerrainSafeToGo;
266 ?
new Vector3(direction.
X, 0f, direction.
Z)
271 ?
new Vector3(direction.
X, 0f, direction.
Z)
273 for (
int i = -1; i <= 1; i++) {
274 for (
int j = -1; j <= 1; j++) {
281 for (
int num = 0; num >= -2; num--) {
297 bool isBlockBeneathDangerous =
true;
300 for (
int num3 = 0; num3 >= -num2 && vector2.Y + num3 >= 0; num3--) {
309 isBlockBeneathDangerous =
false;
313 if (isBlockBeneathDangerous) {
326 float num =
float.MaxValue;
342 Vector2 v = destination.XZ - position.
XZ;
344 if (componentBody !=
null
346 float num = 0.72f * (componentBody.BoxSize.X +
m_componentCreature.ComponentBody.BoxSize.X) + 0.5f;
353 return new Vector3(position.
X + v3.
X * num2, destination.
Y, position.
Z + v3.
Y * num2);
367 return v1.Value + v2.Value;
377 return v1.Value + v2.Value;
static int Min(int x1, int x2)
static float Saturate(float x)
static int Max(int x1, int x2)
static float DegToRad(float degrees)
static float Lerp(float x1, float x2, float f)
virtual bool ShouldAvoid(int value)
virtual bool IsCollidable_(int value)
virtual bool ShouldAvoidBlock(Block block, int cellValue)
Vector3? m_lastStuckCheckPosition
SubsystemTime m_subsystemTime
DynamicArray< ComponentBody > m_nearbyBodies
virtual Vector3 AvoidNearestBody(Vector3 position, Vector3 destination)
ComponentBody DoNotAvoidBody
static ? Vector3 CombineNullables(Vector3? v1, Vector3? v2)
double m_lastStuckCheckTime
bool IgnoreHeightDifference
SubsystemBodies m_subsystemBodies
static ? Vector2 CombineNullables(Vector2? v1, Vector2? v2)
double m_nextBodiesUpdateTime
virtual bool IsTerrainSafeToGo(Vector3 position, Vector3 direction)
地形是否安全可通行
virtual void Update(float dt)
static bool DrawPilotDestination
virtual ComponentBody FindNearestBodyInFront(Vector3 position, Vector2 direction)
override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap)
virtual void SetDestination(Vector3? destination, float speed, float range, bool ignoreHeightDifference, bool raycastDestination, bool takeRisks, ComponentBody doNotAvoidBody)
SubsystemTerrain m_subsystemTerrain
ComponentCreature m_componentCreature
static int ExtractContents(int value)
static int ToCell(float x)
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static float Dot(Vector2 v1, Vector2 v2)
static readonly Vector2 Zero
static float DistanceSquared(Vector2 v1, Vector2 v2)
static Vector2 Normalize(Vector2 v)
static float Angle(Vector2 v1, Vector2 v2)
static Vector3 Clamp(Vector3 v, float min, float max)
static Vector3 Normalize(Vector3 v)
static float Dot(Vector3 v1, Vector3 v2)
static Vector2 NearestPoint(Segment2 s, Vector2 p)