Beispiel #1
0
    // 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++;
            }
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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;
        }
    }