GameMode.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. const GameStatesStatic = require('GameStates');
  2. cc.Class({
  3. extends: cc.Component,
  4. properties: {
  5. MyArrivedTime: [],
  6. RivalArrivedTime: [],
  7. fadeInAndOutTag: false,
  8. bHasAddScore: false,
  9. bHasOverPosition: false,
  10. isEndGame: false,//游戏是否已经结束
  11. isSeverJaveDis: 0,//服务器在这里记录标枪的数据,判断输赢
  12. isClientJaveDis: 0,
  13. _severValue: 0,//服务器的数据,判断输赢
  14. _clientValue: 0,
  15. _inputIndex: 0,//传入的数据次数
  16. isUploaded: false,
  17. finishDeltavalue: 50,//其他项目 平局delta差值
  18. bikeDeltaValue: 50,//骑车项目 平局delta差值
  19. },
  20. SyncJaveEndAddScore: function () {
  21. //服务器统一计算,谁的值大,给谁加分
  22. if (this.isSeverJaveDis - this.isClientJaveDis >= 0) {
  23. var Hero = cc.find('Hero');
  24. this.addScore(Hero, this.isSeverJaveDis, true);
  25. } else {
  26. var Rivel = cc.find('Rivel');
  27. this.addScore(Rivel, this.isClientJaveDis, true);
  28. var data = { FunctionName: 'addScore', PlayerName: 'Rival', value: this.isClientJaveDis };
  29. this.SynchronizationFun(data);
  30. }
  31. },
  32. SynchronizationFun: function (data) {
  33. var str = JSON.stringify(data);
  34. // cc.log("让我们不动33333",str);
  35. if (str.trim().length <= 0) {
  36. return
  37. }
  38. // cc.log("让我们不动4444",str);
  39. qqNetwork.send(qqNetwork.game2Room.gameData, JSON.stringify({ str: str }));
  40. },
  41. CheckPlayersDistance: function (bFromServer) {
  42. var GameStates = cc.find('Canvas').getComponent('GameStates');
  43. // cc.log('我是gamemode里面的check'+GameStates.EnterStartLinePlayersArray.length);
  44. if (GameStates.EnterStartLinePlayersArray.length > 1) return;
  45. // cc.log('GameStates.EnterStartLinePlayersArray.length=',GameStates.EnterStartLinePlayersArray.length)
  46. // var Hero = cc.find('Hero');
  47. // var Rivel = cc.find('Rivel');
  48. // cc.log("Hero.x - Rivel.x ====第1次打印====="+(Hero.position.x - Rivel.position.x));
  49. this.OverPosition();
  50. },
  51. OverPosition: function () {
  52. if (this.bHasOverPosition) {
  53. return;
  54. }
  55. this.bHasOverPosition = true;
  56. var GameMode = cc.find('Canvas').getComponent('GameMode');
  57. var GameStates = cc.find('Canvas').getComponent('GameStates');
  58. var Hero = cc.find('Hero');
  59. var Rivel = cc.find('Rivel');
  60. var HeroControl = Hero.getComponent('HeroControl');
  61. var RivelControl = Rivel.getComponent('HeroControl');
  62. var PlayerStateScript = Hero.getComponent("PlayerState");
  63. PlayerStateScript.TouchControlEnableTouch = false;
  64. // var data = {FunctionName: 'FadeInAndOut'};
  65. // GameMode.SynchronizationFun(data);
  66. // cc.log("FadeInAndOut!!!!!!!!!!!!atOverPositionInGameMode");
  67. this.schedule(function () {
  68. // cc.log("我是来自GameMode的OverPosition里面的schedule11111");
  69. GameStates.EnterStartLinePlayersArray = [];
  70. }.bind(this), 5, 0);
  71. // this.scheduleOnce(function () {
  72. // // cc.log("我是来自GameMode的OverPosition里面的schedule22222");
  73. // }, 5);
  74. // cc.log('========='+cc.find("Shade").getComponent('Shade').FadeTag);
  75. // cc.log('我是对应的moves to'+GameStates.StartLinePositionX);
  76. cc.find("Shade").getComponent('Shade').FadeInAndOut(function () {
  77. var CurrentLevel = GameStates.strCureentLevel;
  78. if ('LongJump' == CurrentLevel || 'Javelin' == CurrentLevel) {
  79. HeroControl.resetHero();
  80. RivelControl.resetHero();
  81. var data = { FunctionName: 'resetHero' };
  82. this.SynchronizationFun(data);
  83. }
  84. cc.find('Canvas').getComponent('GameMode').bHasOverPosition = false;
  85. // cc.log(GameStates.strCureentLevel+"==========comeIn=======GameMode");
  86. // cc.log("拉人过去了 大于3000",cc.find('Canvas').getComponent('GameStates').StartLinePositionX);
  87. Hero.setPositionX(GameStates.StartLinePositionX - 30);
  88. // cc.log('hero moves to '+GameStates.StartLinePositionX+' and Rivel move to '+GameStates.StartLinePositionX);
  89. Rivel.setPositionX(GameStates.StartLinePositionX);
  90. // cc.log(cc.find('Hero').position.x+'========moves to========='+cc.find('Rivel').position.x);
  91. HeroControl.StopPlayerAllSchedule();
  92. // RivelControl.StopPlayerAllSchedule();
  93. var data = { FunctionName: 'StopPlayerAllSchedule' };
  94. this.SynchronizationFun(data);
  95. // cc.log("我向对方发送请求StopPlayerAllSchedule");
  96. // cc.log(GameStates.bServer+'是不是服务器');
  97. if (GameStates.bServer) {
  98. // cc.log("i am server and 第1次打印");
  99. this.schedule(function () {
  100. // cc.log("i am server and i 第2次打印");
  101. this.PlayersStartToRun();
  102. }.bind(this), 2, 0);
  103. // this.scheduleOnce(function () {
  104. // // cc.log('i am server and 第3次打印')
  105. // }, 2);
  106. }
  107. // });
  108. }.bind(this, GameMode, Rivel, HeroControl, RivelControl, GameMode, GameStates));
  109. },
  110. Transport: function () {
  111. // cc.log('GameMode Transport');
  112. this.unschedule(this.UnScheduleFadeIn);
  113. var Hero = cc.find('Hero');
  114. var Rivel = cc.find('Rivel');
  115. var HeroControl = Hero.getComponent('HeroControl');
  116. var RivelControl = Rivel.getComponent('HeroControl');
  117. this.fadeInAndOutTag = false;
  118. var PlayerState = cc.find("Hero").getComponent("PlayerState");
  119. PlayerState.TouchControlEnableTouch = false;
  120. cc.find("Shade").getComponent('Shade').FadeInAndOut(function () {
  121. this.fadeInAndOutTag = true;
  122. Hero.setPositionX(cc.find('Canvas').getComponent('GameStates').StartLinePositionX - 30);
  123. Rivel.setPositionX(cc.find('Canvas').getComponent('GameStates').StartLinePositionX);
  124. HeroControl.node.stopAllActions();
  125. RivelControl.node.stopAllActions();
  126. }.
  127. bind(this), function () {
  128. this.schedule(function () {
  129. cc.find('Canvas').getComponent('GameStates').EnterStartLinePlayersArray = [];
  130. }.bind(this), 5, 0);
  131. this.schedule(function () {
  132. cc.find('Canvas').getComponent('GameStates').CurrentProgress = GameStatesStatic.GameProgress.LongJump;
  133. HeroControl.javelinTag = false;
  134. RivelControl.javelinTag = false;
  135. HeroControl.CameraNode.parent = Hero;
  136. if (cc.find('Canvas').getComponent('GameStates').bServer) {
  137. this.schedule(function () {
  138. this.PlayersStartToRun();
  139. }.bind(this), 1, 0);
  140. }
  141. }.bind(this), cc.find('Canvas').getComponent('GameStates').ReadyToRunDuration, 0);
  142. }.bind(this));
  143. },
  144. UnScheduleFadeIn: function () {
  145. var GameStates = cc.find('Canvas').getComponent('GameStates');
  146. var EnterStartLinePlayersArray = GameStates.EnterStartLinePlayersArray;
  147. if (EnterStartLinePlayersArray.length == 2) {
  148. // cc.log('GameMode Unschedule');
  149. this.unschedule(this.UnScheduleFadeIn);
  150. this.unschedule(this.Transport);
  151. var Hero = cc.find('Hero');
  152. var Rivel = cc.find('Rivel');
  153. var HeroControl = Hero.getComponent('HeroControl');
  154. var RivelControl = Rivel.getComponent('HeroControl');
  155. HeroControl.javelinTag = false;
  156. RivelControl.javelinTag = false;
  157. HeroControl.CameraNode.parent = Hero;
  158. // HeroControl.StopPlayerAllSchedule();
  159. // RivelControl.StopPlayerAllSchedule();
  160. // var data = {FunctionName: 'StopPlayerAllSchedule'};
  161. // this.SynchronizationFun(data);
  162. // cc.log("我向对方发送请求StopPlayerAllSchedule");
  163. Hero.setPositionX(GameStates.StartLinePositionX - 30);
  164. Rivel.setPositionX(GameStates.StartLinePositionX);
  165. this.schedule(function () {
  166. GameStates.EnterStartLinePlayersArray = [];
  167. }.bind(this), 5, 0);
  168. if (GameStates.bServer) {
  169. this.schedule(function () {
  170. this.PlayersStartToRun();
  171. }.bind(this), 2, 0);
  172. }
  173. var data = { FunctionName: 'UnScheduleFadeIn' };
  174. this.SynchronizationFun(data);
  175. }
  176. },
  177. PlayersStartToRun: function () {
  178. if (this.isEndGame) {
  179. // console.log("PlayersStartToRun 游戏已经结束!");
  180. return;
  181. }
  182. // console.log("PlayersStartToRun.......From.......GameMode...");
  183. // cc.log("起跑");
  184. var Hero = cc.find('Hero');
  185. var Rivel = cc.find('Rivel');
  186. Hero.getComponent('HeroControl').playAudioByName('StartGun');//项目开始时哨声
  187. //项目开始时,UI比分淡出
  188. if (cc.find('UIPKScore')) {
  189. cc.find('UIControl').getComponent('GameUI').hideMiddlePKScore();
  190. }
  191. var PlayerStateScript = Hero.getComponent("PlayerState");
  192. PlayerStateScript.TouchControlEnableTouch = false;
  193. var HeroControl = Hero.getComponent('HeroControl');
  194. var RivelControl = Rivel.getComponent('HeroControl');
  195. HeroControl.HeroIsStop = false;
  196. RivelControl.HeroIsStop = false;
  197. // console.log(11);
  198. HeroControl.ResetSpeed_noType();
  199. RivelControl.ResetSpeed_noType();
  200. // cc.log("被拉过来的起点位置 开始跑",cc.find('Canvas').getComponent('GameStates').StartLinePositionX);
  201. var data = { FunctionName: 'PlayersStartToRun' };
  202. this.SynchronizationFun(data);
  203. },
  204. SyncPositionXRange: function (PlayerNode, CurrentPositionX) {
  205. return;
  206. if (Math.abs(CurrentPositionX - PlayerNode.position.x - 40) > cc.find('Canvas').getComponent('GameStates').bSyncPositionXRange) {
  207. PlayerNode.setPositionX(CurrentPositionX + 40);
  208. }
  209. },
  210. //slam todo
  211. //平局加分
  212. drawAddScrore(CurrentPlayerNode) {
  213. //判断两个人的分数 完美解决
  214. var Hero = cc.find('Hero');
  215. var Rivel = cc.find('Rivel');
  216. var PlayerStateHero = Hero.getComponent("PlayerState");
  217. var PlayerStateRivel = Rivel.getComponent("PlayerState");
  218. var GameStates = cc.find('Canvas').getComponent('GameStates');
  219. var CurrentLevel = GameStates.strCureentLevel;
  220. // var PlayerState = CurrentPlayerNode.getComponent("PlayerState");
  221. var UIControl = cc.find("UIControl").getComponent("UIControl");
  222. Hero.getComponent('HeroControl').playAudioByName("Cheers");
  223. PlayerStateHero.TerminalPoint += 1;
  224. PlayerStateRivel.TerminalPoint += 1;
  225. UIControl.GameUI.setTopMyScore(PlayerStateHero.TerminalPoint);
  226. UIControl.GameUI.setTopRivalScore(PlayerStateRivel.TerminalPoint);
  227. if (CurrentPlayerNode.name == 'Hero' && 'RideBike' == CurrentLevel) {
  228. Hero.getComponent('HeroControl').downBikeHero("Hero");
  229. var data = { FunctionName: 'downBikeHero', EndPositionX: Hero.x, isCollision: false, isStop: false };
  230. cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
  231. }
  232. var Level = cc.find('Level');
  233. Level.getComponent('LevelControl').displayTimerMiddlePKScore(cc.find('Hero'));
  234. this.PlayWinAudio();
  235. //console.log('PlayerStateHero', PlayerStateHero.TerminalPoint, PlayerStateRivel.TerminalPoint);
  236. setTimeout(function () {
  237. if (('Javelin' == CurrentLevel) && (PlayerStateHero.TerminalPoint == PlayerStateRivel.TerminalPoint)) {
  238. //console.log('平局时候,CurrentLevel ==', CurrentLevel);
  239. Hero.getComponent('HeroControl').resets();
  240. var data = { FunctionName: 'resetHerojavelin' };
  241. cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
  242. }
  243. }.bind(this), 1000);
  244. if (CurrentPlayerNode.name == 'Hero'&&'LongJump' == CurrentLevel) {
  245. Hero.getComponent('HeroControl').FromLongJumpToHurdle();
  246. }
  247. },
  248. oldAddScore(CurrentPlayerNode) {
  249. // console.log('当前是谁加分:', CurrentPlayerNode.name)
  250. if (this.bHasAddScore == false) {
  251. var PlayerState = CurrentPlayerNode.getComponent("PlayerState");
  252. var UIControl = cc.find("UIControl").getComponent("UIControl");
  253. if (CurrentPlayerNode.name == "Hero") {
  254. cc.find('Hero').getComponent('HeroControl').playAudioByName("Cheers");
  255. UIControl.GameUI.setTopMyScore(PlayerState.TerminalPoint += 1);
  256. this.PlayWinAudio();
  257. } else {
  258. UIControl.GameUI.setTopRivalScore(PlayerState.TerminalPoint += 1);
  259. this.PlayWinAudio();
  260. }
  261. this.scheduleOnce(function () {
  262. var Level = cc.find('Level');
  263. Level.getComponent('LevelControl').displayTimerMiddlePKScore(cc.find('Hero'));
  264. }, 0.1);
  265. this.bHasAddScore = true;
  266. // 判断两个人的分数 完美解决
  267. var Hero = cc.find('Hero');
  268. var Rivel = cc.find('Rivel');
  269. var PlayerStateHero = Hero.getComponent("PlayerState");
  270. var PlayerStateRivel = Rivel.getComponent("PlayerState");
  271. //从跳远项目跳转到跨栏项目
  272. var GameStates = cc.find('Canvas').getComponent('GameStates');
  273. var CurrentLevel = GameStates.strCureentLevel;
  274. // cc.log("两个分数",PlayerStateHero.TerminalPoint,PlayerStateRivel.TerminalPoint);
  275. // console.log('标枪重置CurrentLevel', CurrentLevel);
  276. if (('Javelin' == CurrentLevel)&& (PlayerStateHero.TerminalPoint == PlayerStateRivel.TerminalPoint)) {
  277. setTimeout(function () {
  278. console.log('标枪重置');
  279. cc.find('Hero').getComponent('HeroControl').resets();
  280. var data = { FunctionName: 'resetHerojavelin' };
  281. cc.find('Canvas').getComponent('GameMode').SynchronizationFun(data);
  282. }.bind(this), 1000);
  283. }
  284. if ('LongJump' == CurrentLevel) {
  285. cc.find('Hero').getComponent('HeroControl').FromLongJumpToHurdle();
  286. }
  287. }
  288. },
  289. addScore: function (CurrentPlayerNode, inputValue, isServer, deltaValue) {
  290. if (!deltaValue) {
  291. deltaValue = 0;
  292. // console.log('deltaValue 为空, 设为 =', deltaValue);
  293. }
  294. //记录谁传入的值
  295. if (isServer) {
  296. this._severValue = Number(inputValue);
  297. } else {
  298. this._clientValue = Number(inputValue);
  299. }
  300. var Hero = cc.find('Hero');
  301. var Rivel = cc.find('Rivel');
  302. let distance = Math.abs(Hero.position.x - Rivel.position.x);
  303. //console.log('CurrentPlayerNode.name', CurrentPlayerNode.name, 'inputValue==', inputValue, 'distance=', distance);
  304. //如果只传入一个值
  305. if (distance > 300) {//hero rivel相差 基础是40
  306. this.oldAddScore(CurrentPlayerNode);
  307. //console.log('CurrentPlayerNode ====', CurrentPlayerNode.name);
  308. if (CurrentPlayerNode.name == 'Hero') {
  309. var data = { FunctionName: 'callBackAddScore', value: 1 };
  310. this.SynchronizationFun(data);
  311. } else if (CurrentPlayerNode.name == 'Rivel') {
  312. var data = { FunctionName: 'callBackAddScore', value: -1 };
  313. this.SynchronizationFun(data);
  314. }
  315. } else {//如果加了两个
  316. if (this._inputIndex < 1) {
  317. this._inputIndex++;
  318. } else {
  319. this._inputIndex = 0;//重置为0
  320. //调用加分
  321. let judgementValue = this._severValue - this._clientValue;
  322. //console.log('severValue-clientValue = ', judgementValue);
  323. //如果值相差小于0.5(可变),平局
  324. if (judgementValue > deltaValue) {
  325. //服务器胜利
  326. var data = { FunctionName: 'callBackAddScore', value: 1 };
  327. this.SynchronizationFun(data);
  328. // console.log('服务器胜利');
  329. this.oldAddScore(Hero);
  330. } else if (judgementValue < -deltaValue) {
  331. //客户端的胜利
  332. var data = { FunctionName: 'callBackAddScore', value: -1 };
  333. this.SynchronizationFun(data);
  334. // console.log('客户端的胜利');
  335. this.oldAddScore(Rivel);
  336. } else if (judgementValue >= -deltaValue && judgementValue <= deltaValue) {
  337. //平局
  338. var data = { FunctionName: 'callBackAddScore', value: 0 };
  339. this.SynchronizationFun(data);
  340. // console.log('平局');
  341. this.drawAddScrore(Hero);
  342. }
  343. //重置数据
  344. this._severValue = 0;
  345. this._clientValue = 0;
  346. }
  347. }
  348. },
  349. PlayWinAudio: function () {
  350. // this.scheduleOnce(function () {
  351. var NetworkSocket = cc.find('Hero').getComponent("NetworkSocket");
  352. var MyScore = cc.find('Hero').getComponent("PlayerState").TerminalPoint;
  353. var RivalScore = cc.find('Rivel').getComponent("PlayerState").TerminalPoint;
  354. //从跳远项目跳转到跨栏项目
  355. var GameStates = cc.find('Canvas').getComponent('GameStates');
  356. var CurrentLevel = GameStates.strCureentLevel;
  357. // console.log('判断胜利前的比分:', MyScore, RivalScore);
  358. if (MyScore >= 3 && MyScore > RivalScore) {
  359. cc.find('UIControl').getComponent('GameUI').playFireworks();
  360. var data = {
  361. isSelf: 2
  362. }
  363. NetworkSocket.endGame(1);
  364. NetworkSocket.quitGame(data);
  365. }
  366. else if (RivalScore >= 3 && MyScore < RivalScore) {
  367. cc.find('Hero').getComponent('HeroControl').playAudioByName("Boos");
  368. var data = {
  369. isSelf: 1
  370. }
  371. NetworkSocket.endGame(2);
  372. NetworkSocket.quitGame(data);
  373. var HeroPlayerState = cc.find('Hero').getComponent('PlayerState');
  374. HeroPlayerState.TouchControlEnableTouch = false;
  375. HeroPlayerState.enableTouch = false;
  376. }
  377. else if ('RideBike' == CurrentLevel && RivalScore == MyScore) {
  378. // console.log('上报平局数据。');
  379. var data = {
  380. isSelf: 0
  381. }
  382. NetworkSocket.endGame(0);
  383. NetworkSocket.quitGame(data);
  384. var HeroPlayerState = cc.find('Hero').getComponent('PlayerState');
  385. HeroPlayerState.TouchControlEnableTouch = false;
  386. HeroPlayerState.enableTouch = false;
  387. }
  388. // }, 0.1);
  389. // if (!this.inTag1) {
  390. // this.inTag1 = true;
  391. // }
  392. },
  393. TestEndGame: function () {
  394. var NetworkSocket = cc.find('Hero').getComponent("NetworkSocket");
  395. NetworkSocket.endGame(1);
  396. }
  397. });