예제 #1
0
    public void Init(Door.Key key)
    {
        KeyInstance = key;
        var renderer = GetComponentInChildren <MeshRenderer>();

        renderer.material.color = KeyInstance.color;
    }
예제 #2
0
    protected override void OnInit()
    {
        KeyInstance = ParentRoom.KeyPickup;

        var meshRenderer = GetComponentInChildren <MeshRenderer>();

        meshRenderer.material.color = KeyInstance.color;
        meshRenderer.material.SetColor("_EmissionColor", KeyInstance.color);
    }
예제 #3
0
    private void BuildLocks(WorldData data)
    {
        var firstCell = data.RoomMap[data.FirstRoom.MapPosition.x][data.FirstRoom.MapPosition.y];

        List <Room> processed           = new List <Room>();
        List <WorldData.RoomCell> rooms = new List <WorldData.RoomCell>();

        ProcessLocks(data.FirstRoom, ref processed, ref rooms);
        rooms.Add(firstCell);

        processed.Clear();

        for (int i = 0; i < Info.KeysCount; i++)
        {
            var key = Keys[i];
            Info.Keys.Push(new KeyInfo()
            {
                Key = key
            });
        }

        var bossCell = rooms[0];
        var furthest = FindFurthest(bossCell, ref processed, 0);
        var bossKey  = new Door.Key()
        {
            color = Color.red
        };

        bossCell.Reference.KeyLock = bossKey;
        furthest.Room.KeyPickup    = bossKey;

        List <Room> locked = new List <Room>();

        while (Info.Keys.Any())
        {
            processed.Clear();
            processed.AddRange(locked);

            var nextKey = Info.Keys.Pop();
            var next    = FindFurthest(bossCell, ref processed);

            if (furthest.Room.KeyLock != null ||
                next.Room.KeyPickup != null)
            {
                continue;
            }

            furthest.Room.KeyLock = nextKey.Key;
            next.Room.KeyPickup   = nextKey.Key;

            locked.Add(furthest.Room);

            furthest = next;
        }
    }
예제 #4
0
    public bool HasKey(Door.Key key)
    {
        return(Data.Pickups.Any(p =>
        {
            var k = p as KeyPickup;
            if (k != null)
            {
                return k.KeyInstance == key;
            }

            return false;
        }));
    }
예제 #5
0
 public void PickupKey(Door.Key keyPickup)
 {
     Keys.Add(keyPickup);
 }
예제 #6
0
 public bool HasKey(Door.Key key)
 {
     return(Keys.Contains(key));
 }