Esempio n. 1
0
    public bool Load(BaseData data)
    {
        if (data == null)
        {
            return(false);
        }

        ClearMap();

        entrance_position = new Vector2Int(data.entrance_x, data.entrance_y);
        exit_position     = new Vector2Int(data.exit_x, data.exit_y);

        size.x = data.width;
        size.y = data.height;
        for (int x = 0; x < data.base_pieces_by_id.GetLength(0); x++)
        {
            for (int y = 0; y < data.base_pieces_by_id.GetLength(1); y++)
            {
                BaseData.BasePieceData piece_data = data.base_pieces_by_id[x, y];
                if (piece_data != null && piece_data.id > 0)
                {
                    PlacePiece(Database.base_pieces.GetBasePieceFromID(piece_data.id), piece_data.position, piece_data.facing);
                }
            }
        }

        for (int i = 0; i < data.triggerables.Length; i++)
        {
            TriggerBasePiece     trigger     = triggers[data.triggers[i].position];
            TriggerableBasePiece triggerable = triggerables[data.triggerables[i].position];

            trigger_to_triggerable.Add(trigger, triggerable);
            triggerable_to_trigger.Add(triggerable, trigger);
        }

        foreach (BaseData.EnemyGroupData enemy in data.enemy_group_by_id)
        {
            if (enemy != null && enemy.id > 0)
            {
                PlaceEnemy(Database.enemy_groups.GetEnemyGroupFromID(enemy.id), enemy.position, enemy.facing);
            }
        }

        map_valid = ValidateMap();

        return(true);
    }
Esempio n. 2
0
    public bool Load(BaseData data)
    {
        if (data == null || !data.map_valid)
        {
            return(false);
        }
        loaded_map = data;

        pieces         = new Dictionary <Vector2Int, BasePiece>();
        enemies        = new List <Enemy>();
        killed_enemies = new List <Enemy>();

        entrance_position = new Vector2Int(data.entrance_x, data.entrance_y);

        exit_position = new Vector2Int(data.exit_x, data.exit_y);

        size.x = data.width;
        size.y = data.height;
        for (int x = 0; x < data.base_pieces_by_id.GetLength(0); x++)
        {
            for (int y = 0; y < data.base_pieces_by_id.GetLength(1); y++)
            {
                BaseData.BasePieceData piece_data = data.base_pieces_by_id[x, y];
                if (piece_data != null && piece_data.id > 0)
                {
                    Vector2Int position = new Vector2Int(x, y);
                    BasePiece  piece    = SpawnBasePiece(Database.base_pieces.GetBasePieceFromID(piece_data.id), piece_data.position, piece_data.facing);
                    piece.Init(false);
                    pieces.Add(piece_data.position, piece);
                    piece.position = piece_data.position;
                    piece.facing   = piece_data.facing;
                    if (position == exit_position)
                    {
                        exit = piece.GetComponentInChildren <Exit>();
                    }
                }
            }
        }


        // Connect Traps to Triggers
        for (int i = 0; i < data.triggers.Length && i < data.triggerables.Length; i++)
        {
            TriggerableBasePiece triggerable = (TriggerableBasePiece)pieces[data.triggerables[i].position];
            TriggerBasePiece     trigger     = (TriggerBasePiece)pieces[data.triggers[i].position];
            triggerable.SetTriggerHitbox(trigger.trigger_hitbox);
        }

        foreach (BaseData.EnemyGroupData enemy_data in data.enemy_group_by_id)
        {
            if (enemy_data != null && enemy_data.id > 0)
            {
                EnemyGroup group = SpawnEnemyGroup(Database.enemy_groups.GetEnemyGroupFromID(enemy_data.id), enemy_data.position, enemy_data.facing);

                enemies.AddRange(group.SpawnEnemies());
            }
        }

        foreach (Enemy enemy in enemies)
        {
            enemy.on_die_event.AddListener((Enemy e) => NoteEnemyDeath(e));
        }

        character.transform.position = (Vector3)entrance_position.ToVector3Int(Vector3Axis.y) * scale * block_size;

        return(true);
    }