본문 바로가기
프로그래밍/C#

퀘스트 시스템 feat linq lookup

by neive 2021. 9. 29.
728x90
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class QuestInfo
{
    public int m_Type;
}

public class QuestData : MonoBehaviour
{
    private Dictionary<string, QuestInfo> m_Dic = new Dictionary<string, QuestInfo>();

    private void Awake()
    {
        m_Dic.Add("Kill_Monster", new QuestInfo() { m_Type = 0 });
        m_Dic.Add("Kill_Monster_Daily", new QuestInfo() { m_Type = 0 });
        m_Dic.Add("Kill_Monster_BattlePass", new QuestInfo() { m_Type = 0 });
        m_Dic.Add("PlayTime", new QuestInfo() { m_Type = 1 });
        m_Dic.Add("PlayTime_Daily", new QuestInfo() { m_Type = 1 });
        m_Dic.Add("PlayTime_BattlePass", new QuestInfo() { m_Type = 1 });
        m_Dic.Add("StageClear", new QuestInfo() { m_Type = 2 });
        m_Dic.Add("StageClear_BattlePass", new QuestInfo() { m_Type = 2 });
        m_Dic.Add("StageClear_Event", new QuestInfo() { m_Type = 2 });
    }

    // Start is called before the first frame update
    void Start()
    {
        var lookup = m_Dic.ToLookup(arg => arg.Value.m_Type, arg => arg.Key);

        var type = 0;

        foreach (var tmp in lookup[type])
        {
            Debug.Log($"type {type} : {tmp}");
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

퀘스트 시스템을 만드는데 퀘스트 조건에

따라서 몬스터 한마리를 죽였을 때 연관된

퀘스트를 주르륵 처리해야할 때가 있다

 

그냥 심플하게 하자면 전체 퀘스트 리스

트를 루프로 돌면서 조건이 이거인가 체크

해서 맞으면 처리 처리 처리 하면 되겠지만

 

linq 와 함께 더 간지나게 제작해봅시다

 

설명은 생략 -_- linq 를 알 정도면 저 정도

는 쉽게 알아볼 수 있을테니;;;

 

ToLookup 이 기존의 Dictionary 를 내가

원하는 키와 값으로 재구성해주는 역할을

하는 것만 기억하면 끝

 

728x90

'프로그래밍 > C#' 카테고리의 다른 글

C# 가상함수(Virtual)와 오버라이드(override)  (0) 2022.01.14
C# Action<> 의 활용  (0) 2021.10.15
KeyCode.BackQuote = = `  (0) 2021.09.27
BigInteger x ratio or percent  (0) 2021.09.23
.Net 4.0  (0) 2021.09.14

댓글