Local player-specific preferences are managed here.
Esempio n. 1
0
        public override async Task OnConnectedAsync()
        {
            int playerId = _playerService.GetEmptyId();

            Console.WriteLine("Client Connected:" + this.Context.ConnectionId + " " + playerId);
            var newPlayer = PlayerDirector.Build(playerId, Context.ConnectionId);

            if (_playerService.GetCount() == 0)
            {                          // load map for first player
                _mapService.LoadMap(); // TODO: send map id from client side ant then load it?
            }

            if (!_playerService.AddPlayer(newPlayer))
            {
                // TODO: player limit exceeded
                Console.WriteLine("Player limit exceeded");
            }



            await Clients.Caller.SendAsync("ClientConnected", newPlayer, _mapService.GetMap()); // Sends back the newly created player and map to the owner

            Console.WriteLine(newPlayer.ToString());

            Console.WriteLine("Clients Count:" + _playerService.GetCount());


            if (_playerService.GetCount() > 1) // If there are other clients connected, notify them of the new player
            {
                await Clients.AllExcept(this.Context.ConnectionId).SendAsync("ReceiveNewClient", newPlayer);
            }
        }
Esempio n. 2
0
    private ParticleSystem mParticleSystem; // The player's particle system

    // Unity messages
    #region Unity Functions

    // Assign defaults
    private void Awake()
    {
        _this           = this;                                                                                    // Static reference to PlayerDirector
        mPlayer         = gameObject;                                                                              // Reference to player's object
        mParticleSystem = GetComponent <ParticleSystem>();                                                         // Reference to player's attached particle system
        mCurrentLane    = 0;                                                                                       // Initialize current lane to left lane
        mCurrentState   = 0;                                                                                       // Initialize current state to moving
        Vector3 newPos = new Vector3(mPlayer.transform.position.x, mPlayer.transform.position.y, MLeftLaneOffset); // Put player in left lane

        mPlayer.transform.position = newPos;                                                                       // Put player in left lane
        mInternalTimer             = 0;                                                                            // Initialize internal timer to 0 seconds
    }
Esempio n. 3
0
        private void LoadFactoryMethod()
        {
            StringType = new Dictionary <string, EntityType>();
            StringType.Add("221", EntityType.Player);
            StringType.Add("29", EntityType.Block);
            StringType.Add("155", EntityType.BlockCenter);
            StringType.Add("135", EntityType.BlockMid);
            StringType.Add("147", EntityType.BlockLeft);
            StringType.Add("123", EntityType.BlockRight);
            StringType.Add("112", EntityType.Platform);
            StringType.Add("88", EntityType.PlatformMid);
            StringType.Add("100", EntityType.PlatformLeft);
            StringType.Add("76", EntityType.PlatformRight);
            StringType.Add("162", EntityType.Spike);
            StringType.Add("61", EntityType.DamageObjectLow);
            StringType.Add("8", EntityType.Lava);
            StringType.Add("139", EntityType.LavaTop);
            StringType.Add("44", EntityType.DamageObjectHigh);
            StringType.Add("209", EntityType.ScoreObjectLow);
            StringType.Add("193", EntityType.ScoreObjectMid);
            StringType.Add("201", EntityType.ScoreObjectHigh);
            StringType.Add("55", EntityType.Door);
            StringType.Add("198", EntityType.Key);
            StringType.Add("65", EntityType.Exit);

            PlayerDirector       playerDirector       = new PlayerDirector();
            SimpleTileDirector   simpleTileDirector   = new SimpleTileDirector();
            ScoreObjectDirector  scoreObjectDirector  = new ScoreObjectDirector();
            DamageObjectDirector damageObjectDirector = new DamageObjectDirector();

            EntityTypeCreator = new Dictionary <EntityType, EntityCreator>();
            EntityTypeCreator.Add(EntityType.Player, new PlayerCreator(playerDirector));
            EntityTypeCreator.Add(EntityType.Block, new BlockCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.BlockCenter, new BlockCenterCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.BlockMid, new BlockMidCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.BlockLeft, new BlockLeftCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.BlockRight, new BlockRightCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.Platform, new PlatformCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.PlatformMid, new PlatformMidCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.PlatformLeft, new PlatformLeftCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.PlatformRight, new PlatformRightCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.Spike, new SpikeCreator(damageObjectDirector));
            EntityTypeCreator.Add(EntityType.DamageObjectLow, new DamageBlockLowCreator(damageObjectDirector));
            EntityTypeCreator.Add(EntityType.Lava, new LavaCreator(damageObjectDirector));
            EntityTypeCreator.Add(EntityType.LavaTop, new LavaTopCreator(damageObjectDirector));
            EntityTypeCreator.Add(EntityType.DamageObjectHigh, new DamageBlockHighCreator(damageObjectDirector));
            EntityTypeCreator.Add(EntityType.ScoreObjectLow, new ScoreObjectLowCreator(scoreObjectDirector));
            EntityTypeCreator.Add(EntityType.ScoreObjectMid, new ScoreObjectMidCreator(scoreObjectDirector));
            EntityTypeCreator.Add(EntityType.ScoreObjectHigh, new ScoreObjectHighCreator(scoreObjectDirector));
            EntityTypeCreator.Add(EntityType.Door, new DoorCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.Key, new KeyCreator(simpleTileDirector));
            EntityTypeCreator.Add(EntityType.Exit, new ExitCreator(simpleTileDirector));
        }
Esempio n. 4
0
    // 移動中に敵を追いかけているときの処理
    bool FightEnemy()
    {
        if (m_fightingEnemyPDirector != null)
        {
            // プレイヤが死んでいるか確認する
            if (m_fightingEnemyPDirector.PState == 2 || m_fightingEnemyPDirector.PState == 3)
            {
                m_nowEnemyLostTime        = 0f;
                FindEnemyFlag             = false;
                m_fightingEnemy           = null;
                m_fightingEnemyPDirector  = null;
                m_fightingEnemyAIDirector = null;
                return(false);
            }
        }
        else
        {
            // プレイヤが死んでいるか確認する
            if (m_fightingEnemyAIDirector.NowState == AIState.DEAD || m_fightingEnemyAIDirector.NowState == AIState.RESPAWN)
            {
                m_nowEnemyLostTime        = 0f;
                FindEnemyFlag             = false;
                m_fightingEnemy           = null;
                m_fightingEnemyPDirector  = null;
                m_fightingEnemyAIDirector = null;
                return(false);
            }
        }


        if (!CheckLostEnemy(m_fightingEnemy.position))    // 敵を見失っていないか
        {
            m_nowEnemyLostTime += Time.deltaTime;
            if (m_nowEnemyLostTime > m_enemyLostTime)  // 一定秒数以上見失っているか
            {
                m_nowEnemyLostTime        = 0f;
                FindEnemyFlag             = false;
                m_fightingEnemy           = null;
                m_fightingEnemyPDirector  = null;
                m_fightingEnemyAIDirector = null;
                return(false);
            }
            return(true);
        }
        else
        {
            m_nowEnemyLostTime = 0f;
            return(true);
        }
    }
Esempio n. 5
0
    // 敵が見えているか
    bool CheckFindEnemy()
    {
        for (int i = 0; i < m_enemyT.Count; ++i)
        {
            // AIからプレイヤまでのベクトル
            Vector3 vec = m_enemyT[i].position - MyObject.position;

            // プレイヤまでの距離が一定以内だったら
            if (visibleRange * visibleRange >= vec.sqrMagnitude)
            {
                vec.y = 0;
                // AIの視界内にプレイヤがいるかどうか
                if (Vector3.Angle(MyObject.forward, vec) <= visibleAngle)
                {
                    // プレイヤと自身の間に障害物があるか調べる
                    if (Physics.Linecast(MyObject.position + Odata.BulletOffset, m_enemyT[i].position + new Vector3(0, 1f, 0), layermask.value))
                    {
                        continue;
                    }
                    m_fightingEnemy = m_enemyT[i];
                    if (m_fightingEnemy.GetComponent <PlayerDirector>())
                    {
                        m_fightingEnemyPDirector  = m_fightingEnemy.GetComponent <PlayerDirector>();
                        m_fightingEnemyAIDirector = null;
                        if (m_fightingEnemyPDirector.PState == 2 || m_fightingEnemyPDirector.PState == 3)
                        {
                            m_fightingEnemy          = null;
                            m_fightingEnemyPDirector = null;
                            continue;
                        }
                    }
                    else if (m_fightingEnemy.GetComponent <AIDirector>())
                    {
                        m_fightingEnemyAIDirector = m_fightingEnemy.GetComponent <AIDirector>();
                        m_fightingEnemyPDirector  = null;
                        if (m_fightingEnemyAIDirector.NowState == AIState.DEAD || m_fightingEnemyAIDirector.NowState == AIState.RESPAWN)
                        {
                            m_fightingEnemy           = null;
                            m_fightingEnemyAIDirector = null;
                            continue;
                        }
                    }
                    FindEnemyFlag = true;
                    return(true);
                }
            }
        }

        return(false);
    }
Esempio n. 6
0
 public PlayerCreator(PlayerDirector director)
 {
     this.director = director;
 }