19 int num = (int)MathF.Floor((point.
X - radius) / 8f);
20 int num2 = (int)MathF.Floor((point.
Y - radius) / 8f);
21 int num3 = (int)MathF.Floor((point.
X + radius) / 8f);
22 int num4 = (int)MathF.Floor((point.
Y + radius) / 8f);
23 for (
int i = num; i <= num3; i++) {
24 for (
int j = num2; j <= num4; j++) {
26 for (
int k = 0; k < value.Count; k++) {
27 result.
Add(value.Array[k]);
35 Point2 point =
new((int)MathF.Floor(corner1.
X / 8f), (
int)MathF.Floor(corner1.
Y / 8f));
36 Point2 point2 =
new((int)MathF.Floor(corner2.
X / 8f), (
int)MathF.Floor(corner2.
Y / 8f));
41 for (
int i = num; i <= num3; i++) {
42 for (
int j = num2; j <= num4; j++) {
44 for (
int k = 0; k < value.Count; k++) {
45 result.
Add(value.Array[k]);
58 bodyRaycastResult.Ray = ray;
59 bodyRaycastResult.Distance =
float.MaxValue;
65 if (componentBody ==
null) {
72 bool skipVanilla_ =
false;
76 num2 = loader.BodyCountInRaycast(componentBody, ray, out
bool skip);
82 if (inflateAmount > 0f) {
84 boundingBox.Min -=
new Vector3(inflateAmount);
85 boundingBox.Max +=
new Vector3(inflateAmount);
95 && action(componentBody, num2.Value)) {
96 value.Distance = num2.Value;
97 value.ComponentBody = componentBody;
126 Point2 point =
new((int)MathF.Floor(position.
X / 8f), (
int)MathF.Floor(position.
Z / 8f));
132 value.Add(componentBody);
145 Point2 point =
new((int)MathF.Floor(position.
X / 8f), (
int)MathF.Floor(position.
Z / 8f));
147 if (point != point2) {
154 value.Add(componentBody);
static int Min(int x1, int x2)
static int Max(int x1, int x2)
bool IsRaycastTransparent
virtual BoundingBox BoundingBox
void RemoveBody(ComponentBody componentBody)
DynamicArray< ComponentBody > m_componentBodies
override void OnEntityRemoved(Entity entity)
Dictionary< Point2, DynamicArray< ComponentBody > > m_componentBodiesByArea
virtual void Update(float dt)
override void OnEntityAdded(Entity entity)
Dictionary< ComponentBody, Point2 > m_areaByComponentBody
void FindBodiesAroundPoint(Vector2 point, float radius, DynamicArray< ComponentBody > result)
virtual void UpdateBody(ComponentBody componentBody)
BodyRaycastResult? Raycast(Vector3 start, Vector3 end, float inflateAmount, Func< ComponentBody, float, bool > action)
void AddBody(ComponentBody componentBody)
Dictionary< ComponentBody, Point2 >.KeyCollection Bodies
void ComponentBody_PositionChanged(ComponentFrame componentFrame)
void FindBodiesInArea(Vector2 corner1, Vector2 corner2, DynamicArray< ComponentBody > result)
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
float? Intersection(BoundingBox box)
static float Distance(Vector3 v1, Vector3 v2)
static readonly Vector3 UnitX
ComponentBody ComponentBody