public void LaunchBullet(NetCmdPack pack) { NetCmdBullet cmd = (NetCmdBullet)pack.cmd; byte clientSeat, id; SceneRuntime.BuuletIDToSeat(cmd.BulletID, out clientSeat, out id); if (GetPlayer(clientSeat) == null) { return; } ScenePlayer sp = GetPlayer(clientSeat); if (sp.Launcher.LauncherType != cmd.LauncherType) { sp.Launcher.ChangeLauncher(cmd.LauncherType, true); } if (sp == null) { LogMgr.Log("不存在的玩家座位:" + clientSeat); return; } float elapsedTime = (Utility.GetTickCount() - pack.tick) * 0.001f + SceneRuntime.NetDelayTime; short degree = SceneRuntime.AngleInversion(cmd.Degree); SceneRuntime.BulletMgr.LaunchBullet(cmd.BulletID, sp.Launcher.LauncherType, sp.RateIndex, degree, elapsedTime, cmd.ReboundCount, cmd.LockFishID); sp.Launcher.LauncherBullet(cmd.Energy); // SceneRuntime.SceneLogic.LaunchBullet(clientSeat, sp.Launcher.LauncherType, sp.RateIndex); int gold = LauncherSetting.LauncherDataList[sp.Launcher.LauncherType].Consume * BulletSetting.BulletRate[sp.RateIndex]; ConsumeGold(clientSeat, gold, sp); }
public void LaunchBullet(ushort bulletID, byte launcherType, byte rateIndex, short angle, float time, byte reboundCount, ushort lockfishid /*, byte collidCount = 0, float pauseTime = 0, float speedScaling = 0*/) { byte clientSeat, id; SceneRuntime.BuuletIDToSeat(bulletID, out clientSeat, out id); Bullet bullet = new Bullet(); Vector3 startpos; Vector3 dir; float volume = 1; float curtime = Time.time; byte[] type = { 9, 9, 10, 11, 12 }; if (SceneRuntime.PlayerMgr.GetPlayer(clientSeat) == null) { return; } if (SceneRuntime.PlayerMgr.GetPlayer(clientSeat) == SceneRuntime.PlayerMgr.MySelf) { volume = 1; lastTime = curtime; GlobalAudioMgr.Instance.PlayOrdianryMusic((Audio.OrdianryMusic)type[launcherType], false, false, volume); } else { volume = 0.30f; if ((lastTime + 0.1f) < curtime) { GlobalAudioMgr.Instance.PlayOrdianryMusic((Audio.OrdianryMusic)type[launcherType], false, false, volume); } } SceneRuntime.GetBulletPosAndDir(clientSeat, angle, out dir, out startpos); SceneRuntime.PlayerMgr.ChangeLauncherAngle(dir, clientSeat); //改变炮台角度 bullet.Init(clientSeat, id, launcherType, rateIndex, startpos, dir, reboundCount, lockfishid); bullet.InitAngle(Utility.ShortToFlaot(angle)); //bullet.SetCollidData(collidCount, pauseTime, speedScaling); PlayerBullets pb = m_PlayerBullets[clientSeat]; if (pb != null) { Bullet findBullet; if (pb.BulletList.TryGetValue(id, out findBullet)) { Debug.Log("相同的子弹ID:" + id); findBullet.Destroy(); pb.BulletList.Remove(id); } if (time > 0) { bullet.Update(time); } pb.BulletList.Add(id, bullet); } }
public void LaunchSyncBullet(NetCmdPack pack) { NetCmdSyncBullet cmd = (NetCmdSyncBullet)pack.cmd; float elapsedTime = (Utility.GetTickCount() - pack.tick) * 0.001f + SceneRuntime.NetDelayTime; for (int i = 0; i < cmd.Bullets.Length; ++i) { SyncBulletData data = cmd.Bullets[i]; byte clientSeat, id; SceneRuntime.BuuletIDToSeat(data.BulletID, out clientSeat, out id); ScenePlayer sp = GetPlayer(clientSeat); if (sp == null) { //LogMgr.Log("不存在的玩家座位:" + clientSeat); return; } short degree = SceneRuntime.AngleInversion(data.Degree); SceneRuntime.BulletMgr.LaunchBullet(data.BulletID, data.BulletType, data.RateIdx, degree, data.Time * 0.001f + elapsedTime, data.ReboundCount, data.LockFishID /*, data.CollideCount, data.PauseTime * 0.001f, data.SpeedScaling * 0.001f*/); //int gold = LauncherSetting.LauncherDataList[data.BulletType].Consume * BulletSetting.BulletRate[data.RateIdx]; //ConsumeGold(clientSeat, gold, sp); } }
//处理网络命令 public bool Handle(NetCmdPack pack) { if (m_bRefreshScene) { //刷新场景中,过期的命令不处理 if (pack.cmd.CmdType == (byte)MainCmdType.CMD_MAIN_Game) { return(true); } else if (pack.cmd.GetCmdType() == NetCmdType.CMD_LC_ResetRoleInfo) { m_bRefreshScene = false; } } switch (pack.cmd.GetCmdType()) { case NetCmdType.CMD_FISH: m_FishMgr.LaunchFish(pack); break; case NetCmdType.CMD_SYNC_FISH: m_FishMgr.LaunchFishByAsycScene(pack); break; case NetCmdType.CMD_BULLET: NetCmdBullet cmd = (NetCmdBullet)pack.cmd; byte clientSeat, id; SceneRuntime.BuuletIDToSeat(cmd.BulletID, out clientSeat, out id); if (clientSeat == SceneRuntime.MyClientSeat) { uint time = Utility.GetTickCount() - bulletTick; SceneMain.Instance.bulletTime.AddTime(time); } m_PlayerMgr.LaunchBullet(pack); break; case NetCmdType.CMD_SYNC_BULLET: m_PlayerMgr.LaunchSyncBullet(pack); break; case NetCmdType.CMD_PLAYER_JOIN: PlayerJoin(pack); break; case NetCmdType.CMD_PLAYER_LEAVE: PlayerLeave(pack); break; case NetCmdType.CMD_CHANGE_LAUNCHER: m_PlayerMgr.ChangeLauncher(pack); break; case NetCmdType.CMD_CATCHED: m_SkillMgr.FishCatched(pack); break; case NetCmdType.CMD_CHANGE_RATE: m_PlayerMgr.ChangeRate(pack); break; case NetCmdType.CMD_SKILL_DISASTER_RESPONSE: m_SkillMgr.UseSkillDisaster(pack); break; case NetCmdType.CMD_SKILL_LOCK_RESPONSE: m_SkillMgr.UseSkillLock(pack); break; case NetCmdType.CMD_SKILL_FREEZE_RESPONSE: m_SkillMgr.UseSkillFreeze(pack); break; case NetCmdType.CMD_SKILL_LASER_RESPONSE: m_SkillMgr.LaunchLaser(pack); break; case NetCmdType.CMD_SKILL_LIGHTING_RESPONSE: m_SkillMgr.UseSkillLighting(pack); break; case NetCmdType.CMD_SKILL_TORNADO_RESPONSE: m_SkillMgr.UseSkillTornado(pack); break; case NetCmdType.CMD_FISH_PACKAGE: m_FishMgr.SetFishPackage(pack); break; case NetCmdType.CMD_BULLET_REDUCTION: m_SkillMgr.FishCatchedByFreeze(pack); break; case NetCmdType.CMD_REDUCTION: m_SkillMgr.Reduction(pack); break; case NetCmdType.CMD_CLEAR_SCENE: m_SkillMgr.ClearScene(pack); break; case NetCmdType.CMD_LAUNCH_LASER_FAILED: m_PlayerMgr.LaunchLaserFailed((NetCmdLaunchFailed)pack.cmd); break; case NetCmdType.CMD_SKILL_FAILLED: { m_LogicUI.GetSkillBar.SkillFail((NetCmdSkillFailed)pack.cmd); break; } default: return(false); } return(true); }