示例#1
0
    // Use this for initialization
    void Start()
    {
        dungeonFloor = DungeonGenerator.CreateFloor(64, 64, new Dungeon());
        RLBaseTile start = null;

        foreach (RLBaseTile t in dungeonFloor.Tiles)
        {
            if (t != null)
            {
                if (start == null && !t.GetTileType().BlocksMovement)
                {
                    start = t;
                }
                TileRenderer.BindTile(t);
            }
        }
        _actor = new SimpleActor(StatBlock.CreateInstance(baseStats, 3, 7, 9))
        {
            BasicMoveSkill      = move,
            fieldOfView         = new BresenhamFOV(),
            OnVisibilityChanged = (tile, visible) =>
            {
                if (visible)
                {
                    tile.SetCurrentlyVisibleToPlayer(true);
                    tile.SetEverSeenByPlayer(true);
                }
                else
                {
                    tile.SetCurrentlyVisibleToPlayer(false);
                }
            }
        };
        StatBlockDisplay.BindStatBlock(_actor.GetStats());
        start.SetActor(_actor);
        RLActorController actorController = Instantiate(ActorPrefab, transform);

        actorController.effectRenderer = effectRenderer;
        actorController.BindActor(_actor);
        InventoryDisplay.BindInventory(_actor);
        virtualCam.Follow = actorController.transform;
    }
示例#2
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {
            InventoryDisplay.gameObject.SetActive(!InventoryDisplay.gameObject.activeSelf);
        }

        if (Input.GetKeyDown(KeyCode.T))
        {
            _actor.AddItem(testItems[Random.Range(0, testItems.Length)]);
        }

        if (!CanMove)
        {
            return;
        }
        float horiz = Input.GetAxis("Horizontal");
        float vert  = Input.GetAxis("Vertical");

        const float tolerance  = 0.0001f;
        RLBaseTile  targetTile = null;
        int         x          = _actor.GetTile().GetDisplayPosition().x;
        int         y          = _actor.GetTile().GetDisplayPosition().y;

        if (Math.Abs(horiz) > tolerance)
        {
            targetTile = dungeonFloor.Tiles[(int)(x + Mathf.Sign(horiz)), y];
        }
        else if (Math.Abs(vert) > tolerance)
        {
            targetTile = dungeonFloor.Tiles[x, (int)(y + Mathf.Sign(vert))];
        }

        if (targetTile != null)
        {
            _actor.TryBasicMoveToTile(targetTile);
            CanMove = false;
            StartCoroutine(ReenableInput());
        }
    }