Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Video Chat user list update #204

Open
AliceOfSNU opened this issue Feb 20, 2022 · 2 comments · May be fixed by #205
Open

Video Chat user list update #204

AliceOfSNU opened this issue Feb 20, 2022 · 2 comments · May be fixed by #205
Assignees

Comments

@AliceOfSNU
Copy link
Collaborator

현재 상황

  • user가 나가면 모든 유저가 채널에서 나갔다 들어와서 list 업데이트 하는 상황

작업 계획

  • AliceOfSNU(한준) grid layout 사용하여 유저별 video panel 추가 삭제하는 작업 맡고,
  • Gyu1291(순규)님이 agora user joined/left 관련 콜백에 대한 event 정의 해주시는 작업.

일정

  • due 27일
@AliceOfSNU
Copy link
Collaborator Author

AliceOfSNU commented Feb 20, 2022

event 기반 코딩 예제
Voice.cs
` // events
public Action<int, bool> OnPlayerVoiceChangedHandler = null;

    public void OnPlayerVoiceChanged(int actorNr, bool state)
    {
        if (OnPlayerVoiceChangedHandler != null)
        {
            OnPlayerVoiceChangedHandler.Invoke(actorNr, state);
        }
    }

    public void RemoveListener(Action<int, bool> action)
    {
        if(OnPlayerVoiceChangedHandler != null)
        {
            OnPlayerVoiceChangedHandler -= action;
        }
    }

    public void AddListener(Action<int, bool> action)
    {
        OnPlayerVoiceChangedHandler -= action;
        OnPlayerVoiceChangedHandler += action;
    }`

Action, Action<T1, T2>, Action<T1, T2... Tn> 은 주로 On어쩌고저쩌고 Handler로 naming되며,
명시된 parameter type (T)를 인자로 받고 리턴값이 void인 함수들을 event의 listener로 추가할 수 있음
(AddListener, RemoveListener 참고)

해당 Handler는 .Invoke를 통해, 그 handler 에 assign 된 action들을 모두 invoke할 수 있음(OnPlayerVoiceChanged)
이때 invoke될 함수들의 parameter를 set 해줌. Invoke(T1 param1, T2 param2);

join, leave 두가지 상황에 대한 이벤트가 있다고 하면, 이들을 위해 OnUserJoinedHandler, OnUserLeftHandler를 정의하는대신
OnUserStatusChangedHandler만 정의하고, action parameter로 enum PlayerStatus {Joined, Left} 를 주는 방법이 있음

추가자료: 새로운 UI 시스템의 BindEvent 참조
UIBase.cs
UIEvent의 종류별로(click. enter, exit, drag) 분기

`public static void BindEvent(GameObject go, Action action, UIEvents.UIEvent type = UIEvents.UIEvent.Click)
{
UIEventHandler evt = go.GetComponent();
if(evt is null)
{
Debug.Log("<color = red> Deprecation warning: XReal UI convention requires you to attach UIEventHandler script to " +
"interactable UI elements. But we will attach it for you for now. ");
evt = go.AddComponent();
}

        switch (type)
        {
            case UIEvents.UIEvent.Enter:
                evt.OnEnterHandler -= action;
                evt.OnEnterHandler += action;
                break;
            case UIEvents.UIEvent.Click:
                evt.OnClickHandler -= action;
                evt.OnClickHandler += action;
                break;
            case UIEvents.UIEvent.Exit:
                evt.OnExitHandler -= action;
                evt.OnExitHandler += action;
                break;
            case UIEvents.UIEvent.Drag:
                evt.OnDragHandler -= action;
                evt.OnDragHandler += action;
                break;
        }
    }`

@tehokim tehokim self-assigned this Feb 26, 2022
@tehokim
Copy link
Collaborator

tehokim commented Feb 26, 2022

  1. 유저 입장
  • 6명 full이면 별다른 action 없음
  • 6명 미만이면 맨 마지막에 생성
  1. 유저 pin
  • pin 최대 2개
  • pin 하면 pin 한 순서대로 맨 앞 정렬
  • unpin하면 unpin되어 있는 유저 화면 중 가장 앞으로(pin된 것 중 마지막 뒤에)
  1. 유저 퇴장
  • 내 페이지 밖 유저 퇴장하면 action 없음
  • 페이지 안 유저 퇴장하면 그 사람 빼고 자동 정렬

@tehokim tehokim linked a pull request Feb 27, 2022 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants