using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic; using Sfs2X.Entities.Data; public class InviteManager { public const int MAX_TEAM_MENBERS = 2; private List list; private Dictionary dict; private ClanData clanData; private bool clanSet = false; private bool dataSet = false; public UnityEvent InitCompleted = new UnityEvent(); public UnityEvent SortUpdate = new UnityEvent (); public IntegerEvent StateUpdate = new IntegerEvent (); public IntegerEvent ActionUpdate = new IntegerEvent (); private int leader; private List teamList; public UnityEvent TeamUpdated = new UnityEvent(); public IntegerEvent TeamJoin = new IntegerEvent(); public IntegerEvent TeamLeft = new IntegerEvent(); public InviteManager() { list = new List (); dict = new Dictionary (); teamList = new List (); } public void Clear() { clanData = null; dict.Clear (); list.Clear (); clanSet = dataSet = false; } public void Init() { if(CheckInitCompleted()) { InitCompleted.Invoke (); return; } ClanManager.GetInstance ().GetClan (Session.GetInstance ().myUserData.clanId, (ClanData data) => { clanData = data; clanSet = true; if(!CheckInitCompleted()) Session.GetInstance().GetBattleSession().GetMessageManager().ClanInit(); }); } private bool CheckInitCompleted() { if(dataSet && clanSet) { InitCompleted.Invoke (); return true; } return false; } public void SetData(ISFSArray arr) { dict.Clear (); list.Clear (); if (clanData != null) { for(int i=0; i GetDataList() { return list; } public void Add(int id, InviteData.State state) { if (dict.ContainsKey (id)) { InviteData data = dict [id]; data.state = state; } else { InviteData data = new InviteData (); data.id = id; data.state = state; dict.Add (id, data); list.Add (data); } StateUpdate.Invoke (id); } public void Offline(int id) { if(dict.ContainsKey(id)) { InviteData data = dict [id]; data.state = InviteData.State.Offline; Sort (); StateUpdate.Invoke (id); } } public void Battle(int id) { if(dict.ContainsKey(id)) { InviteData data = dict [id]; data.state = InviteData.State.Battle; Sort (); StateUpdate.Invoke (id); } } public void Remove(int id) { if(dict.ContainsKey(id)) { InviteData data = dict [id]; dict.Remove (id); list.Remove (data); Sort (); StateUpdate.Invoke (id); } } public void Sort() { list.Sort (SortCompare); } private static int SortCompare(InviteData a, InviteData b) { if (a.state == b.state) return 0; if(a.state == InviteData.State.Online && (b.state == InviteData.State.Battle && b.state == InviteData.State.Offline)) { return -1; } else if(a.state == InviteData.State.Battle && b.state == InviteData.State.Offline) { return -1; } else if(a.state == InviteData.State.Battle && b.state == InviteData.State.Online) { return 1; } else if(a.state == InviteData.State.Offline && (b.state == InviteData.State.Battle && b.state == InviteData.State.Offline)) { return 1; } return 0; } private void SetInTeam(int id) { if(dict.ContainsKey(id)) { InviteData data = dict [id]; data.action = InviteData.Action.InTeam; ActionUpdate.Invoke (id); } } private void SetOutTeam(int id) { if(dict.ContainsKey(id)) { InviteData data = dict [id]; data.action = InviteData.Action.Invite; ActionUpdate.Invoke (id); } } public void TeamState(int leader, ISFSArray teamArr) { this.leader = leader; List oldList = teamList; teamList = new List (); if(teamArr != null) { for(int i=0; i GetTeamList() { return teamList; } private static InviteManager instance; public static InviteManager GetInstance() { if (instance == null) instance = new InviteManager (); return instance; } }