//--------------------------------------------------------------------- // 玩家请求命中计算 public void c2sFishHit(uint et_player_rpcid, int bullet_objid, int fish_objid) { CLogicFish fish = (CLogicFish)mBaseFishLordMgr.getBaseEntity(fish_objid); if (fish == null) { return; } CLogicTurret turret = mScene.getTurret(et_player_rpcid); if (turret == null) { return; } CLogicBullet bullet = turret.getBullet(bullet_objid); if (bullet == null) { return; } // 通知其他模块鱼命中 mScene.getListener().onLogicSceneFishHit(et_player_rpcid, fish.FishVibId, bullet.getRate()); _calculateFishScore(et_player_rpcid, turret, fish, bullet.getRate(), bullet_objid); turret.removeBullet(bullet_objid); }
//--------------------------------------------------------------------- // 客户端请求手动发炮 public void c2sManualFire(int bullet_objid, float turret_angle, int turret_rate, int locked_fish_id) { if (!_canLockFish()) { locked_fish_id = -1; } // 扣币 int cur_gold = mScene.getListener().onLogicSceneGetPlayerGold(mPlayer.et_player_rpcid); if (cur_gold < turret_rate) { return; } cur_gold -= turret_rate; mScene.getListener().onLogicSceneSetPlayerGold(mPlayer.et_player_rpcid, cur_gold, -1, "TurretFire", turret_rate); mTurretAngle = turret_angle; mTurretRate = turret_rate; // 创建子弹 float level_cur_second = mScene.getLevel().getCurSecond(); CLogicBullet bullet = new CLogicBullet(mScene); bullet.create(mPlayer.et_player_rpcid, bullet_objid, mTurretRate, -1, getFirePos(), mTurretAngle, CBulletConstant.ManualSpeed); if (!mMapBullet.ContainsKey(bullet_objid)) { mMapBullet[bullet_objid] = bullet; } else { bullet.Dispose(); bullet = null; } // 服务端广播发炮 mScene.getProtocol().s2allcManualFire(mPlayer.et_player_rpcid, bullet_objid, turret_angle, turret_rate, locked_fish_id); }
//--------------------------------------------------------------------- // 客户端请求自动发炮 public void c2sAutoFire(Queue <_tBullet> que_bullet) { Queue <_tBullet> que_bullet2 = new Queue <_tBullet>(); foreach (var bullet_struct in que_bullet) { // 扣币 int cur_gold = mScene.getListener().onLogicSceneGetPlayerGold(mPlayer.et_player_rpcid); if (cur_gold < bullet_struct.turret_rate) { return; } cur_gold -= bullet_struct.turret_rate; mScene.getListener().onLogicSceneSetPlayerGold(mPlayer.et_player_rpcid, cur_gold, -1, "TurretFire", bullet_struct.turret_rate); mTurretAngle = bullet_struct.turret_angle; mTurretRate = bullet_struct.turret_rate; // 创建子弹 float level_cur_second = mScene.getLevel().getCurSecond(); CLogicBullet bullet = new CLogicBullet(mScene); bullet.create(mPlayer.et_player_rpcid, bullet_struct.bullet_objid, mTurretRate, -1, getFirePos(), mTurretAngle, getBulletSpeed()); if (!mMapBullet.ContainsKey(bullet_struct.bullet_objid)) { mMapBullet[bullet_struct.bullet_objid] = bullet; } else { bullet.Dispose(); bullet = null; } que_bullet2.Enqueue(bullet_struct); } // 服务端广播自动发炮 mScene.getProtocol().s2allcAutoFire(mPlayer.et_player_rpcid, que_bullet2); }
//--------------------------------------------------------------------- public void update(float elapsed_tm) { mfTotalSecond += elapsed_tm; if (mLogicBot != null) { mLogicBot.update(elapsed_tm); } if (mBufferPower) { mCurTmBufferPower += elapsed_tm; if (mCurTmBufferPower >= mMaxTmBufferPower) { mBufferPower = false; mCurTmBufferPower = 0.0f; mScene.getProtocol().s2allcEndPower(mPlayer.et_player_rpcid); } } foreach (var i in mMapBullet) { i.Value.update(elapsed_tm); } while (mQueDestroyedBullet.Count > 0) { int i = mQueDestroyedBullet.Dequeue(); if (mMapBullet.ContainsKey(i)) { CLogicBullet bullet = mMapBullet[i]; bullet.Dispose(); mMapBullet.Remove(i); } } }
//--------------------------------------------------------------------- // 客户端请求自动发炮 public void c2sAutoFire(Queue<_tBullet> que_bullet) { Queue<_tBullet> que_bullet2 = new Queue<_tBullet>(); foreach (var bullet_struct in que_bullet) { // 扣币 int cur_gold = mScene.getListener().onLogicSceneGetPlayerGold(mPlayer.et_player_rpcid); if (cur_gold < bullet_struct.turret_rate) { return; } cur_gold -= bullet_struct.turret_rate; mScene.getListener().onLogicSceneSetPlayerGold(mPlayer.et_player_rpcid, cur_gold, -1, "TurretFire", bullet_struct.turret_rate); mTurretAngle = bullet_struct.turret_angle; mTurretRate = bullet_struct.turret_rate; // 创建子弹 float level_cur_second = mScene.getLevel().getCurSecond(); CLogicBullet bullet = new CLogicBullet(mScene); bullet.create(mPlayer.et_player_rpcid, bullet_struct.bullet_objid, mTurretRate, -1, getFirePos(), mTurretAngle, getBulletSpeed()); if (!mMapBullet.ContainsKey(bullet_struct.bullet_objid)) { mMapBullet[bullet_struct.bullet_objid] = bullet; } else { bullet.Dispose(); bullet = null; } que_bullet2.Enqueue(bullet_struct); } // 服务端广播自动发炮 mScene.getProtocol().s2allcAutoFire(mPlayer.et_player_rpcid, que_bullet2); }