コード例 #1
0
        protected override void RunReactive()
        {
            for (int i = 0; i < ReactedEntitiesCount; i++)
            {
                var entity   = ReactedEntities[i];
                var roomData = _world.GetComponent <RoomData> (entity);
                if (roomData.value.ContainsKey(RoomDataConstants.PlayerRole))
                {
                    var roles = Extensions.DeserializeToPlayerRoles(roomData.value[RoomDataConstants.PlayerRole] as byte[]);
                    _gameState.UpdateRoles(roles);

                    foreach (var playerRole in roles)
                    {
                        var actorNumber = playerRole.Key;
                        var role        = playerRole.Value;
                        if (_playerCache.Entities.TryGetValue(actorNumber, out var playerEntity))
                        {
                            var roleComponent = _world.EnsureComponent <Role> (playerEntity, out var isNew);
                            if (!isNew)
                            {
                                if (roleComponent.value != role)
                                {
                                    _world.MarkComponentAsUpdated <Role> (playerEntity);
                                }
                            }
                            else
                            {
                                _world.MarkComponentAsUpdated <Role> (playerEntity);
                            }
                            roleComponent.value = role;
                        }
                    }

                    stringBuilder.Clear();
                    stringBuilder.AppendLine("Roles");

                    var values = Enum.GetValues(typeof(PlayerRole)) as PlayerRole[];
                    for (int j = 1; j < values.Length; j++)
                    {
                        var role           = values[j];
                        var playerWithRole = _gameState.GetPlayerWithRole(role);

                        stringBuilder.Append($"{role} = {( playerWithRole == -1 ? "-" : playerWithRole.ToString() )}");
                        if (playerWithRole == _photonServer.LocalPlayer.ID)
                        {
                            stringBuilder.Append("(me)");
                        }

                        stringBuilder.AppendLine();
                    }

                    SceneDescription.UI.GameUI.Roles.text = stringBuilder.ToString();
                }
            }
        }
コード例 #2
0
 private void Try(PlayerRole newRole)
 {
     if (_photonServer.CurrentRoom != null && _photonServer.LocalPlayer != null)
     {
         var id = _photonServer.LocalPlayer.ID;
         if (_gameState.Roles.TryGetValue(id, out var role))
         {
             if (role != newRole)
             {
                 var playerWithRole = _gameState.GetPlayerWithRole(newRole);
                 if (playerWithRole == -1)
                 {
                     _photonServer.OpRaiseEvent(GameEventCode.ChangeRole, (byte)newRole, true, toServerOnly);
                 }
             }
         }
     }
 }
コード例 #3
0
        private void OnEventAction(EventData obj)
        {
            UnityEngine.Debug.Log("Event: " + obj.Code + " " + obj.Parameters.ToStringFull());

            switch (obj.Code)
            {
            case EventCode.Join:
                CreatePlayer((int)obj.Parameters[ParameterCode.ActorNr]);
                break;

            case EventCode.Leave:
                DeletePlayer((int)obj.Parameters[ParameterCode.ActorNr]);
                if (obj.Parameters.ContainsKey(ParameterCode.MasterClientId))
                {
                    var masterClient = (int)obj.Parameters[ParameterCode.MasterClientId];
                    if (masterClient == PhotonServer.LocalPlayer.ID)
                    {
                        var gamePlayer = _world.GetComponent <GamePlayer> (PlayerCache.Entities[masterClient]);
                        if (!gamePlayer.isMaster)
                        {
                            _world.CreateEntityWith <MakeMaster> (out _);
                            gamePlayer.isMaster = true;
                        }
                    }
                }
                break;

            case EventCode.PropertiesChanged:
                if (obj.Parameters.ContainsKey(ParameterCode.TargetActorNr) && (int)obj.Parameters[ParameterCode.TargetActorNr] == 0 && obj.Parameters.ContainsKey(ParameterCode.Properties))
                {
                    //todo update global state
                    var data = obj.Parameters[ParameterCode.Properties] as Hashtable;
                    _world.CreateEntityWith <RoomData> (out var roomData);
                    roomData.value = data;
                }
                break;

            case GameEventCode.ChangeRole:
            {
                var actorNumber = (int)obj.Parameters[ParameterCode.ActorNr];
                var newRole     = (PlayerRole)obj.Parameters[ParameterCode.Data];
                var otherPlayer = _gameState.GetPlayerWithRole(newRole);
                if (otherPlayer == -1)
                {
                    AssignRoleSystem.SetPlayerToRole(PhotonServer, _gameState, actorNumber, newRole);
                }
            }
            break;

            case GameEventCode.SpawnAsteroids:
            {
                var newAsteroids = obj.Parameters[ParameterCode.Data] as AsteroidDesc[];
                _world.CreateEntityWith <SpawnAsteroids> (out var spawnAsteroids);
                spawnAsteroids.value = newAsteroids;
            }
            break;

            case GameEventCode.KillAsteroids:
            {
                var asteroidIds = obj.Parameters[ParameterCode.Data] as int[];
                _world.CreateEntityWith <KillAsteroids> (out var killAsteroids);
                killAsteroids.value = asteroidIds;
            }
            break;

            case GameEventCode.DamageByAsteroids:
            {
                var asteroidIds = obj.Parameters[ParameterCode.Data] as int[];
                _world.CreateEntityWith <KillAsteroids> (out var killAsteroids);
                killAsteroids.value      = asteroidIds;
                killAsteroids.WithEffect = true;
            }
            break;

            case GameEventCode.ShootAsteroid:
            {
                var asteroidId = (int)obj.Parameters[ParameterCode.Data];
                if (asteroidId != -1)
                {
                    _world.CreateEntityWith <KillAsteroids> (out var killAsteroids);
                    killAsteroids.value      = new [] { asteroidId };
                    killAsteroids.WithEffect = true;
                }

                _world.CreateEntityWith <ShootRay> (out var shootRay);
                shootRay.AsteroidTarget = asteroidId;
            }
            break;

            case GameEventCode.ChangeShootCamera:
            {
                var target = (Vector3)obj.Parameters[ParameterCode.Data];
                _world.CreateEntityWith <ChangeShootTarget> (out var shootTarget);
                shootTarget.value = target;
            }
            break;
            }
        }