IEnumerator StartSpawnFoods() { while (true) { var spawnFoodCount = Constants.INIT_FOOD_COUNT - battle.IdToFoods.Count; // 获取最大食物 id PlayArray spawnFoods = new PlayArray(); var nextFoodId = battle.NextFoodId; for (int i = 0; i < spawnFoodCount; i++) { var foodId = nextFoodId + i; var foodPos = BattleHelper.RandomPos(); var food = new Food { Id = foodId, Type = i % 3, X = foodPos.X, Y = foodPos.Y }; spawnFoods.Add(food); } var eventData = new PlayObject { { "foods", spawnFoods }, { "nextFoodId", nextFoodId + spawnFoodCount } }; var client = LeanCloudUtils.GetClient(); client.SendEvent(Constants.SPAWN_FOOD_EVENT, eventData); yield return(new WaitForSeconds(Constants.SPWAN_FOOD_DURATION)); } }
void OnDestroy() { var client = LeanCloudUtils.GetClient(); client.OnPlayerRoomJoined -= OnPlayerRoomJoined; StopAllCoroutines(); }
void OnBornEvent(PlayObject eventData) { Debug.Log("on born event"); var client = LeanCloudUtils.GetClient(); // 初始化 UI ui.Init(); var playerList = client.Room.PlayerList; foreach (var player in playerList) { // 实例化球 var ball = NewBall(player); if (player.IsLocal) { var ballCtrl = ball.gameObject.AddComponent <BallController>(); ballCtrl.cameraTrans = cameraTrans; } else { ball.gameObject.AddComponent <BallSimulator>(); } } ui.UpdateList(); // 增加食物数据 var foods = eventData.GetPlayArray("foods"); SpawnFoods(foods); }
public void Init() { var client = LeanCloudUtils.GetClient(); playerInfoList = new List <PlayerInfoItem>(); ballInfoDict = new Dictionary <int, BallInfoBeh>(); StartCoroutine(Tick()); }
void OnDestroy() { var client = LeanCloudUtils.GetClient(); client.OnMasterSwitched -= Client_OnMasterSwitched; client.OnCustomEvent -= Client_OnCustomEvent; client.OnPlayerRoomLeft -= Client_OnPlayerRoomLeft; }
void OnApplicationQuit() { var client = LeanCloudUtils.GetClient(); if (client != null) { client.Close(); } }
void OnPlayerJoinedEvent(PlayObject eventData) { var client = LeanCloudUtils.GetClient(); var playerId = eventData.GetInt("pId"); var player = client.Room.GetPlayer(playerId); // 实例化一个新球 var ball = NewBall(player); ball.gameObject.AddComponent <BallSimulator>(); ui.UpdateList(); }
/// <summary> /// 房主进入房间时调用 /// </summary> public void InitGame() { battle = GetComponent <Battle>(); battle.IdToFoods = new Dictionary <int, FoodBeh>(); battle.IdToBalls = new Dictionary <int, BallBeh>(); // 初始化玩家 var client = LeanCloudUtils.GetClient(); NewPlayer(client.Player); // 开始定时生成小球 StartCoroutine(StartSpawnFoods()); }
void OnBallAndBallCollision(BallCollisionArgs args) { var ball1 = args.Ball1; var ball2 = args.Ball2; // 判断胜负 var weight1 = ball1.Player.CustomProperties.GetFloat("weight"); var weight2 = ball2.Player.CustomProperties.GetFloat("weight"); Player winner, loser; if (weight1 > weight2) { winner = ball1.Player; loser = ball2.Player; } else { winner = ball2.Player; loser = ball1.Player; } var winnerWeight = weight1 + weight2; var props = new PlayObject { { "weight", winnerWeight } }; // 设置胜利方 winner.SetCustomProperties(props); // 重置失败方 var loserWeight = Mathf.Pow(Constants.BORN_SIZE, 2); var pos = BattleHelper.RandomPos(); props = new PlayObject { { "pos", pos }, { "weight", loserWeight }, { "move", null } }; loser.SetCustomProperties(props); // 通知胜负情况 var client = LeanCloudUtils.GetClient(); var eventData = new PlayObject { { "winnerId", winner.ActorId }, { "loserId", loser.ActorId } }; client.SendEvent(Constants.KILL_EVENT, eventData); // 通知重生 eventData = new PlayObject { { "playerId", loser.ActorId } }; client.SendEvent(Constants.REBORN_EVENT, eventData); }
public void UpdateList() { var client = LeanCloudUtils.GetClient(); var playerList = client.Room.PlayerList; playerList.Sort((p1, p2) => { var w1 = p1.CustomProperties.GetFloat("weight"); var w2 = p2.CustomProperties.GetFloat("weight"); return((int)(w2 - w1)); }); for (int i = 0; i < playerList.Count; i++) { var player = playerList[i]; var playerInfoItem = playerInfoList[i]; var weight = player.CustomProperties.GetFloat("weight"); playerInfoItem.SetInfo(i + 1, player.UserId, (int)weight, player.IsLocal); } }
void Start() { Physics2D.gravity = Vector2.zero; IdToBalls = new Dictionary <int, BallBeh>(); IdToFoods = new Dictionary <int, FoodBeh>(); var client = LeanCloudUtils.GetClient(); if (client.Player.IsMaster) { var master = gameObject.AddComponent <Master>(); master.InitGame(); } client.OnMasterSwitched += Client_OnMasterSwitched; client.OnCustomEvent += Client_OnCustomEvent; client.OnPlayerRoomLeft += Client_OnPlayerRoomLeft; client.ResumeMessageQueue(); }
public async void OnJoinBtnClicked() { var roomId = roomIdInputField.text; if (string.IsNullOrEmpty(roomId)) { return; } roomId = $"unity_{roomId}"; var random = Random.Range(1, 1000000); var userId = random.ToString(); var client = LeanCloudUtils.InitClient(userId); await client.Connect(); await client.JoinOrCreateRoom(roomId); client.PauseMessageQueue(); SceneManager.LoadScene("Battle"); }
async void NewPlayer(Player player) { var weight = Mathf.Pow(Constants.BORN_SIZE, 2); var pos = BattleHelper.RandomPos(); var props = new PlayObject { { "weight", weight }, { "pos", pos } }; await player.SetCustomProperties(props); var client = LeanCloudUtils.GetClient(); // 打包内存中的食物数据 var foods = battle.GetFoods(); var eventData = new PlayObject { { "foods", foods } }; await client.SendEvent(Constants.BORN_EVENT, eventData, new SendEventOptions { TargetActorIds = new List <int> { player.ActorId } }); // 告知「其他玩家」有新玩家加入 var otherIds = new List <int>(); foreach (Player p in client.Room.PlayerList) { if (p == player) { continue; } otherIds.Add(p.ActorId); } eventData = new PlayObject { { "pId", player.ActorId } }; await client.SendEvent(Constants.PLAYER_JOINED_EVENT, eventData, new SendEventOptions { TargetActorIds = otherIds }); }
void SynchMove() { var client = LeanCloudUtils.GetClient(); var pos = new Vec2 { X = transform.localPosition.x, Y = transform.localPosition.y }; var dir = new Vec2 { X = horizontal, Y = vertical }; var move = new Move { Pos = pos, Dir = dir, Time = BattleHelper.Now }; var props = new PlayObject { { "move", move } }; client.Player.SetCustomProperties(props); }
void OnBallAndFoodCollision(FoodCollisionArgs args) { var ball = args.Ball; var food = args.FoodBeh; food.gameObject.SetActive(false); // 增加体重 var player = ball.Player; var weight = player.CustomProperties.GetFloat("weight") + Constants.FOOD_WEIGHT; var props = new PlayObject { { "weight", weight } }; player.SetCustomProperties(props); // 通知事件 var eventData = new PlayObject { { "pId", player.ActorId }, { "fId", food.Data.Id } }; var client = LeanCloudUtils.GetClient(); client.SendEvent(Constants.EAT_EVENT, eventData); }
void Start() { var client = LeanCloudUtils.GetClient(); client.OnPlayerRoomJoined += OnPlayerRoomJoined; }