// Token: 0x06001C81 RID: 7297 RVA: 0x001847C0 File Offset: 0x001829C0 private void FindGrabPos() { if (grabDelay > 0) { grabDelay--; return; } IntVector2?intVector = null; int num = 0; while (num < 9 && intVector == null) { intVector = SharedPhysics.RayTraceTilesForTerrainReturnFirstSolid(room, BasePos, room.GetTilePosition(desiredGrabPos) + Custom.eightDirectionsAndZero[num] * 5); if (intVector != null && room.GetTile(intVector.Value + new IntVector2(0, 1)).Solid) { intVector = null; } num++; } if (intVector != null) { if (grabDest == null || GripPointAttractiveness(intVector.Value) > GripPointAttractiveness(grabDest.Value)) { MoveGrabDest(Custom.RestrictInRect(FloatBase + tentacleDir * Vector2.Distance(FloatBase, room.MiddleOfTile(intVector.Value)) * 0.5f, FloatRect.MakeFromVector2(room.MiddleOfTile(intVector.Value) - new Vector2(11f, 11f), room.MiddleOfTile(intVector.Value) + new Vector2(11f, 11f)))); sureOfFootingCounter = 0; } else { sureOfFootingCounter++; } } }
public bool RayTraceSky(Vector2 pos, Vector2 testDir) { Vector2 corner = Custom.RectCollision(pos, pos + testDir * 100000f, this.room.RoomRect).GetCorner(FloatRect.CornerLabel.D); if (SharedPhysics.RayTraceTilesForTerrainReturnFirstSolid(this.room, pos, corner) != null) { return(false); } if (corner.y >= this.room.PixelHeight - 5f) { return(true); } return(false); }
public override void NewRoom(Room room) { base.NewRoom(room); if (debugViz) { if (grabGoalSprites != null) { grabGoalSprites[0].RemoveFromRoom(); grabGoalSprites[1].RemoveFromRoom(); } grabGoalSprites = new DebugSprite[2]; grabGoalSprites[0] = new DebugSprite(new Vector2(0f, 0f), new FSprite("pixel", true), room); grabGoalSprites[0].sprite.scale = 10f; grabGoalSprites[0].sprite.color = new Color(1f, 0f, 0f); room.AddObject(grabGoalSprites[0]); grabGoalSprites[1] = new DebugSprite(new Vector2(0f, 0f), new FSprite("pixel", true), room); grabGoalSprites[1].sprite.scale = 10f; grabGoalSprites[1].sprite.color = new Color(0f, 5f, 0f); room.AddObject(grabGoalSprites[1]); } IntVector2 tilePosition = room.GetTilePosition(FloatBase + new Vector2(0f, -400f) + tentacleDir * 100f); IntVector2?intVector = SharedPhysics.RayTraceTilesForTerrainReturnFirstSolid(room, BasePos, tilePosition); if (intVector != null) { Vector2 newGrabDest = Custom.RestrictInRect(FloatBase, room.TileRect(intVector.Value).Grow(2f)); segments = SharedPhysics.RayTracedTilesArray(FloatBase, room.MiddleOfTile(intVector.Value)); if (segments.Count > 2) { segments.RemoveAt(segments.Count - 1); } MoveGrabDest(newGrabDest); for (int i = 0; i < tChunks.Length; i++) { tChunks[i].Reset(); } attachedAtTip = true; smoothedFootingSecurity = 1f; } }