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); } }
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 }
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)); }
// 移動中に敵を追いかけているときの処理 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); } }
// 敵が見えているか 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); }
public PlayerCreator(PlayerDirector director) { this.director = director; }