Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.00 KB | None | 0 0
  1.  
  2. 559
  3. 560
  4. 561
  5. 562
  6. 563
  7. 564
  8. 565
  9. 566
  10. 567
  11. 568
  12. 569
  13. 570
  14. 571
  15. 572
  16. 573
  17. 574
  18. 575
  19. 576
  20. 577
  21. 578
  22. 579
  23. 580
  24. 581
  25. 582
  26. 583
  27. 584
  28. 585
  29. 586
  30. 587
  31. 588
  32. 589
  33. 590
  34. 591
  35. 592
  36. 593
  37. 594
  38. 595
  39. 596
  40. 597
  41. 598
  42. 599
  43. 600
  44. 601
  45. 602
  46. 603
  47. 604
  48. 605
  49. 606
  50. 607
  51. 608
  52. 609
  53. 610
  54. 611
  55. 612
  56. 613
  57. 614
  58. 615
  59. 616
  60. 617
  61. 618
  62. 619
  63. 620
  64. 621
  65. 622
  66. 623
  67. 624
  68. 625
  69. 626
  70. 627
  71. 628
  72. 629
  73. 630
  74. 631
  75. 632
  76. 633
  77. 634
  78. 635
  79. 636
  80. 637
  81. 638
  82. 639
  83. 640
  84. 641
  85. 642
  86. 643
  87. 644
  88. 645
  89. 646
  90. 647
  91. 648
  92. 649
  93. 650
  94. 651
  95. 652
  96. 653
  97. 654
  98. 655
  99. 656
  100. 657
  101. 658
  102. 659
  103. 660
  104. 661
  105. 662
  106. 663
  107. 664
  108. 665
  109. 666
  110. 667
  111. 668
  112. 669
  113. 670
  114. 671
  115. 672
  116. 673
  117. 674
  118. 675
  119. 676
  120. 677
  121. 678
  122. 679
  123. 680
  124. 681
  125. 682
  126. 683
  127. 684
  128. 685
  129. 686
  130. 687
  131. 688
  132. 689
  133. 690
  134. 691
  135. 692
  136. 693
  137. 694
  138. 695
  139. 696
  140. 697
  141. 698
  142. 699
  143. 700
  144. 701
  145. 702
  146. 703
  147. 704
  148. 705
  149. 706
  150. 707
  151. 708
  152. 709
  153. 710
  154. 711
  155. 712
  156. 713
  157. 714
  158. 715
  159. 716
  160. 717
  161. 718
  162. 719
  163. 720
  164. 721
  165. 722
  166. 723
  167. 724
  168. 725
  169. 726
  170. 727
  171. 728
  172. 729
  173. 730
  174. 731
  175. 732
  176. 733
  177. 734
  178. 735
  179. 736
  180. 737
  181. import { animate, keyframes, state, style, transition, trigger } from '@angular/animations';
  182. import { Component, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core';
  183. import { Response } from '@angular/http';
  184. import { Subscription } from 'rxjs/Rx';
  185.  
  186. import { SoundControlComponent } from '../../../../shared/components/sound-control/sound-control.component';
  187. import { DomService } from '../../../../shared/services/utility/dom.service';
  188. import { NotificationService } from '../../../../shared/services/utility/notification.service';
  189. import { SocketService } from '../../../../shared/services/utility/socket.service';
  190. import { Config } from './../../../../config';
  191. import { LoginService } from './../../../../shared/services/api/login.service';
  192. import { RouletteService } from './../../../../shared/services/api/roulette.service';
  193. import { ModalService } from './../../../../shared/services/utility/modal.service';
  194. import { RouletteRollModalComponent } from './../../../modals/roulette-roll-modal/roulette-roll-modal.component';
  195.  
  196. @Component({
  197. selector: 'roulette',
  198. templateUrl: './roulette.component.html',
  199. styleUrls: ['./roulette.component.scss'],
  200. encapsulation: ViewEncapsulation.None,
  201. animations: [
  202. trigger('flyInOut', [
  203. state('in', style({ transform: 'translateY(0)' })),
  204. transition('void => *', [
  205. animate(200, keyframes([
  206. style({ opacity: 0, transform: 'translateY(-100%)', offset: 0 }),
  207. style({ opacity: 1, transform: 'translateY(0)', offset: 1.0 })
  208. ]))
  209. ]),
  210. transition('* => void', [
  211. animate(200, keyframes([
  212. style({ opacity: 1, transform: 'translateY(0)', offset: 0 }),
  213. style({ opacity: 0, transform: 'translateY(100%)', offset: 1.0 })
  214. ]))
  215. ])
  216. ])
  217. ]
  218. })
  219. export class RouletteComponent {
  220.  
  221. private animationsEnabled: boolean = true;
  222. private sortingEnabled: boolean = true;
  223.  
  224. @ViewChild('soundSpin') soundSpin: SoundControlComponent;
  225. @ViewChild('soundTone') soundTone: SoundControlComponent;
  226. _sound: boolean = true;
  227. get sound(): boolean {
  228. return this._sound;
  229. }
  230. set sound(value: boolean) {
  231. this._sound = value;
  232. if (value) {
  233. this.soundSpin.unmute();
  234. this.soundTone.unmute();
  235. } else {
  236. this.soundSpin.mute();
  237. this.soundTone.mute();
  238. }
  239. }
  240.  
  241. loggedUser: csgobounty.IUser;
  242. rollingIn: number = 20;
  243. progress: number = 2000;
  244.  
  245. bet: number = 0.01;
  246. minBet: number = 0.01;
  247. lastBet: number = 0.01;
  248.  
  249. myBet: boolean = true;
  250. myBetAmountRed: number = 0;
  251. myBetAmountBlack: number = 0;
  252. myBetAmountGreen: number = 0;
  253.  
  254. state: string = 'ready';
  255. inProgress: boolean = true;
  256. ignoreResult: boolean = false;
  257.  
  258. lastResults: csgobounty.IRouletteRoll[] = [];
  259.  
  260. rouletteNumbers: csgobounty.IRouletteNumber[] = Config.rouletteNumbers;
  261.  
  262. rouletteNumbersToAnimate: csgobounty.IRouletteNumber[] = [];
  263.  
  264. players: csgobounty.IRoulettePlayers;
  265. redHighestPlayer: csgobounty.IRouletteBet;
  266. blackHighestPlayer: csgobounty.IRouletteBet;
  267. greenHighestPlayer: csgobounty.IRouletteBet;
  268.  
  269. private onRouletteGameSubscription: Subscription;
  270. private onRoulettePlayerSubscription: Subscription;
  271. private onRouletteResultSubscription: Subscription;
  272.  
  273. private rollingIntervalHandle: number;
  274.  
  275. private windowOptimizedResizeListener: () => void;
  276.  
  277. constructor(
  278. private socketService: SocketService,
  279. private rouletteService: RouletteService,
  280. private modalService: ModalService,
  281. private loginService: LoginService,
  282. private notificationService: NotificationService,
  283. private domService: DomService,
  284. private elementRef: ElementRef
  285. ) { }
  286.  
  287. ngOnInit() {
  288. this.loggedUser = this.loginService.loggedUser;
  289. this.windowOptimizedResizeListener = this.onResize.bind(this);
  290.  
  291. this.resetGame();
  292.  
  293. [0, 1, 2, 3, 4, 5, 6].forEach(n => {
  294. this.rouletteNumbersToAnimate.push.apply(this.rouletteNumbersToAnimate, this.rouletteNumbers);
  295. });
  296.  
  297. this.onRouletteGameSubscription = this.socketService.onRouletteGame.subscribe((preGame: csgobounty.IRoulettePreGame) => {
  298. this.onRouletteGame(preGame);
  299. });
  300. this.onRoulettePlayerSubscription = this.socketService.onRoulettePlayer.subscribe((player: csgobounty.IRoulettePlayer) => {
  301. this.onRoulettePlayer(player);
  302. });
  303. this.onRouletteResultSubscription = this.socketService.onRouletteResult.subscribe((result: csgobounty.IRouletteResult) => {
  304. this.onRouletteResult(result);
  305. });
  306.  
  307. this.sound = this.loginService.soundPreference;
  308. this.rouletteService.getState().subscribe((state: csgobounty.IRouletteState) => {
  309. let startDate = new Date(state.startDate);
  310. let timeObject = new Date();
  311. let timeDiff = startDate.getTime() - timeObject.getTime();
  312. timeDiff = Big(timeDiff).times(-1).div(1000).toFixed(4);
  313.  
  314. if (timeDiff <= 20) {
  315. this.inProgress = false;
  316. this.rollingIn = Big(20).minus(timeDiff).toFixed(0);
  317.  
  318. this.domService.addClass('.bar', 'no-transition', this.elementRef.nativeElement);
  319. let width = (this.rollingIn * 5) - 5;
  320. this.domService.setCss('.bar', { width: width + '%' }, this.elementRef.nativeElement);
  321.  
  322. setTimeout(() => {
  323. this.domService.setCss('.bar', { transition: 'width ' + this.rollingIn + 's linear' }, this.elementRef.nativeElement);
  324. this.domService.removeClass('.bar', 'no-transition', this.elementRef.nativeElement);
  325. this.domService.setCss('.bar', { width: '0%' }, this.elementRef.nativeElement);
  326. }, 1000);
  327. }
  328.  
  329. if (state.roll && timeDiff > 20) {
  330. this.ignoreResult = true;
  331. this.rollingIn = 0;
  332. let baseTime = timeDiff - 21;
  333. let scrollTime = (6 - baseTime) * 1000;
  334. this.spinRoulette(state.roll.number.val, scrollTime);
  335.  
  336. setTimeout(() => {
  337. if (this.lastResults.length == Config.maxRouletteResultsShown) {
  338. this.lastResults.pop();
  339. }
  340. this.lastResults.unshift(state.roll);
  341. let winColor = state.roll.number.color;
  342. this.updatePlayersResults(winColor);
  343.  
  344. let winMultiplier = 2;
  345. if (winColor == 'green') winMultiplier = 14;
  346.  
  347. if (this.myBet) {
  348. let myWinningBet = null;
  349. if (winColor == 'red') myWinningBet = this.myBetAmountRed;
  350. if (winColor == 'black') myWinningBet = this.myBetAmountBlack;
  351. if (winColor == 'green') myWinningBet = this.myBetAmountGreen;
  352.  
  353. let profit = new Big(myWinningBet).times(winMultiplier).toFixed(2);
  354. this.updateBalance(profit);
  355. // $rootScope.$broadcast('user:balance', (profit));
  356. }
  357. this.ignoreResult = false;
  358. }, scrollTime);
  359. }
  360.  
  361. this.handleRedPlayers(state.red);
  362. this.handleGreenPlayers(state.green);
  363. this.handleBlackPlayers(state.black);
  364.  
  365. for (let roll of state.rolls.reverse()) {
  366. let numberRolled = this.rouletteNumbers.filter((rouletteNumber: csgobounty.IRouletteNumber) => {
  367. return rouletteNumber.val == roll.roll;
  368. })[0];
  369. let objRoll = { number: numberRolled, rollId: roll.id, hash: roll.hash };
  370. this.lastResults.unshift(objRoll);
  371. }
  372.  
  373. this.rollingIntervalHandle = window.setInterval(() => {
  374. if (this.rollingIn > 0) this.rollingIn--;
  375. }, 1000);
  376.  
  377. if (!this.gameIsActive() && !this.inProgress) this.resetToLastDrawn();
  378. this.handleFutureResizeEvents();
  379. });
  380. }
  381.  
  382. ngOnDestroy() {
  383. window.clearInterval(this.rollingIntervalHandle);
  384. this.onRouletteGameSubscription.unsubscribe();
  385. this.onRoulettePlayerSubscription.unsubscribe();
  386. this.onRouletteResultSubscription.unsubscribe();
  387. window.removeEventListener('resize', this.onWindowResize);
  388. window.removeEventListener('optimizedResize', this.windowOptimizedResizeListener);
  389. }
  390.  
  391. updateBalance(diff: number) {
  392. console.log(diff);
  393. let newBalance = +this.loggedUser.balance + diff;
  394. console.log(`${this.loggedUser.balance} => ${diff} => ${newBalance}`);
  395. this.loggedUser.balance = newBalance.toFixed(2);
  396. this.notificationService.notifyBalanceUpdated(newBalance);
  397. }
  398.  
  399. join(color: string) {
  400. this.rouletteService.join(color, this.bet).subscribe(
  401. (player: csgobounty.IRoulettePlayer) => {
  402. this.lastBet = this.bet;
  403. // $rootScope.$broadcast('user:balance', (data.bet.current * -1));
  404. this.updateBalance(-this.bet);
  405. this.myBet = true;
  406. if (player.team.color == 'red') {
  407. this.myBetAmountRed = +player.bet.total;
  408. }
  409. if (player.team.color == 'black') {
  410. this.myBetAmountBlack = +player.bet.total;
  411. }
  412. if (player.team.color == 'green') {
  413. this.myBetAmountGreen = +player.bet.total;
  414. }
  415. },
  416. (response: Response) => {
  417. // TODO should we display errors - if yes where on page
  418. console.log(response.text());
  419. });
  420. }
  421.  
  422. gameIsActive() {
  423. return this.state != 'ready' && this.state != 'won' && this.state != 'lost' && this.state != 'done' && this.state != 'error';
  424. }
  425.  
  426. onBetChange() {
  427. if (isNaN(this.bet) || !this.bet || this.bet == 0) return;
  428.  
  429. if (this.bet < this.minBet) {
  430. this.bet = this.minBet;
  431. }
  432.  
  433. if (+this.loggedUser.balance <= +this.bet) {
  434. this.bet = parseFloat(this.loggedUser.balance);
  435. }
  436. }
  437.  
  438. clear() {
  439. this.bet = 0;
  440. }
  441.  
  442. addBet(bet: number) {
  443. if (this.gameIsActive()) return;
  444. this.bet = new Big(this.bet).add(bet).toFixed(2);
  445. }
  446.  
  447. maxBet() {
  448. if (this.gameIsActive()) return;
  449. this.bet = new Big(this.loggedUser.balance).toFixed(2);
  450. }
  451.  
  452. halfBet() {
  453. if (this.gameIsActive()) return;
  454. this.bet = new Big(this.bet).div(2).toFixed(2);
  455. }
  456.  
  457. doubleBet() {
  458. if (this.gameIsActive()) return;
  459. this.bet = new Big(this.bet).times(2).toFixed(2);
  460. }
  461.  
  462. getLastBet() {
  463. if (this.gameIsActive()) return;
  464. this.bet = new Big(this.lastBet).toFixed(2);
  465. }
  466.  
  467. resetGame() {
  468. this.players = {
  469. red: { bets: [], stats: { players: 0, total: 0 } },
  470. green: { bets: [], stats: { players: 0, total: 0 } },
  471. black: { bets: [], stats: { players: 0, total: 0 } }
  472. };
  473.  
  474. this.redHighestPlayer = undefined;
  475. this.blackHighestPlayer = undefined;
  476. this.greenHighestPlayer = undefined;
  477.  
  478. this.myBetAmountRed = 0;
  479. this.myBetAmountBlack = 0;
  480. this.myBetAmountGreen = 0;
  481. this.myBet = false;
  482. this.rollingIn = 20;
  483. this.progress = 2000;
  484. this.inProgress = false;
  485. setTimeout(() => {
  486. this.inProgress = true;
  487. }, 20000);
  488.  
  489. }
  490.  
  491. onRouletteGame(preGame: csgobounty.IRoulettePreGame) {
  492. this.resetGame();
  493. this.domService.setCss('.bar', { transition: 'width 20s linear' }, this.elementRef.nativeElement);
  494. this.domService.removeClass('.bar', 'no-transition', this.elementRef.nativeElement);
  495. this.domService.setCss('.bar', { width: '0%' }, this.elementRef.nativeElement);
  496. }
  497.  
  498. onRoulettePlayer(player: csgobounty.IRoulettePlayer) {
  499. let user = player.user;
  500. let color = player.team.color;
  501.  
  502. if (color == 'red') {
  503.  
  504. let userBet = this.players.red.bets.filter((bet: csgobounty.IRouletteBet) => {
  505. return bet.userId == player.user.id;
  506. })[0];
  507.  
  508. // user update
  509. if (userBet) {
  510. userBet.bet = Big(userBet.bet).add(player.bet.current).toFixed(2);
  511. } else {
  512. userBet = { bet: +player.bet.current, username: user.username, avatar: user.avatar, userId: user.id };
  513. this.players.red.bets.push(userBet);
  514. this.sortBetList(this.players.red.bets);
  515. if (this.players.red.bets.length > Config.maxRoletteBetsPerColor) {
  516. this.players.red.bets.pop();
  517. }
  518. }
  519.  
  520. // highest check
  521. if (this.redHighestPlayer && this.redHighestPlayer.bet > 0) {
  522. if (Math.round(userBet.bet * 100) > Math.round(this.redHighestPlayer.bet * 100)) {
  523. this.redHighestPlayer = userBet;
  524. }
  525. } else {
  526. this.redHighestPlayer = userBet;
  527. }
  528.  
  529. // total update
  530. this.players.red.stats.total = Big(this.players.red.stats.total).add(player.bet.current).toFixed(2);
  531. this.players.red.stats.players++;
  532.  
  533. } else if (color == 'black') {
  534.  
  535. let userBet = this.players.black.bets.filter((bet: csgobounty.IRouletteBet) => {
  536. return bet.userId == player.user.id;
  537. })[0];
  538.  
  539. // user update
  540. if (userBet) {
  541. userBet.bet = Big(userBet.bet).add(player.bet.current).toFixed(2);
  542. } else {
  543. userBet = { bet: +player.bet.current, username: user.username, avatar: user.avatar, userId: user.id };
  544. this.players.black.bets.push(userBet);
  545. this.sortBetList(this.players.black.bets);
  546. if (this.players.black.bets.length > Config.maxRoletteBetsPerColor) {
  547. this.players.black.bets.pop();
  548. }
  549. }
  550.  
  551. // highest check
  552. if (this.blackHighestPlayer && this.blackHighestPlayer.bet > 0) {
  553. if (Math.round(userBet.bet * 100) > Math.round(this.blackHighestPlayer.bet * 100)) {
  554. this.blackHighestPlayer = userBet;
  555. }
  556. } else {
  557. this.blackHighestPlayer = userBet;
  558. }
  559.  
  560. // total update
  561. this.players.black.stats.total = Big(this.players.black.stats.total).add(player.bet.current).toFixed(2);
  562. this.players.black.stats.players++;
  563.  
  564. } else if (color == 'green') {
  565.  
  566. let userBet = this.players.green.bets.filter((bet: csgobounty.IRouletteBet) => {
  567. return bet.userId == player.user.id;
  568. })[0];
  569.  
  570. // user update
  571. if (userBet) {
  572. userBet.bet = Big(userBet.bet).add(player.bet.current).toFixed(2);
  573. } else {
  574. userBet = { bet: +player.bet.current, username: user.username, avatar: user.avatar, userId: user.id };
  575. this.players.green.bets.push(userBet);
  576. this.sortBetList(this.players.green.bets);
  577. if (this.players.green.bets.length > Config.maxRoletteBetsPerColor) {
  578. this.players.green.bets.pop();
  579. }
  580. }
  581.  
  582. // highest check
  583. if (this.greenHighestPlayer && this.greenHighestPlayer.bet > 0) {
  584. if (Math.round(userBet.bet * 100) > Math.round(this.greenHighestPlayer.bet * 100)) {
  585. this.greenHighestPlayer = userBet;
  586. }
  587. } else {
  588. this.greenHighestPlayer = userBet;
  589. }
  590. // total update
  591. this.players.green.stats.total = Big(this.players.green.stats.total).add(player.bet.current).toFixed(2);
  592. this.players.green.stats.players++;
  593. }
  594. }
  595.  
  596. onRouletteResult(rouletteResult: csgobounty.IRouletteResult) {
  597. if (this.ignoreResult) return;
  598. this.inProgress = true;
  599. let rolledNumber = this.rouletteNumbers.filter((rouletteNumber) => {
  600. return rouletteNumber.val == rouletteResult.roll;
  601. })[0];
  602. this.spinRoulette(rouletteResult.roll);
  603.  
  604. this.soundSpin.play();
  605.  
  606. setTimeout(() => {
  607. if (this.lastResults.length == Config.maxRouletteResultsShown) {
  608. this.lastResults.pop();
  609. }
  610. let objRoll = { number: rolledNumber, rollId: rouletteResult.id, hash: rouletteResult.hash };
  611. this.lastResults.unshift(objRoll);
  612. this.soundSpin.stop();
  613. this.soundTone.play();
  614.  
  615. this.updatePlayersResults(rolledNumber.color);
  616. let winMultiplier = rolledNumber.color == 'green' ? 14 : 2;
  617.  
  618. if (this.myBet) {
  619. let myWinningBet = null;
  620. if (rolledNumber.color == 'red') {
  621. myWinningBet = this.myBetAmountRed;
  622. }
  623. if (rolledNumber.color == 'black') {
  624. myWinningBet = this.myBetAmountBlack;
  625. }
  626. if (rolledNumber.color == 'green') {
  627. myWinningBet = this.myBetAmountGreen;
  628. }
  629. let profit = new Big(myWinningBet).times(winMultiplier);
  630. this.updateBalance(+profit);
  631. // $rootScope.$broadcast('user:balance', (profit));
  632. }
  633. }, 6200);
  634.  
  635. setTimeout(() => {
  636. this.soundSpin.stop();
  637. this.domService.addClass('.bar', 'no-transition', this.elementRef.nativeElement);
  638. this.domService.setCss('.bar', { width: '100%' }, this.elementRef.nativeElement);
  639. }, 8000);
  640. }
  641.  
  642. spinRoulette(score: number, rollTime?: number) {
  643. if (!rollTime) rollTime = 6000;
  644.  
  645. let scrollWidth = this.elementRef.nativeElement.querySelector('.roulette').offsetWidth;
  646. let halfScrollWidth = Big(scrollWidth).div(2).toFixed(2);
  647. let fullSetLength = Big(70).times(15).toFixed(2);
  648. let lengthToEndFirstSet = Big(fullSetLength).minus(halfScrollWidth).times(-1).toFixed(2);
  649. let middleOffset = Big(fullSetLength).times(4);
  650.  
  651. let rolledNumber = this.rouletteNumbers.filter((rouletteNumber) => {
  652. return rouletteNumber.val == score;
  653. })[0];
  654.  
  655. let scoreOffset = Big(this.rouletteNumbers.indexOf(rolledNumber)).times(70).plus(27).toFixed(2);
  656.  
  657. let fullOffset = Big(lengthToEndFirstSet).minus(middleOffset).minus(scoreOffset).toFixed(2);
  658. this.domService.removeClass('.numbers', 'no-transition', this.elementRef.nativeElement);
  659. this.domService.setCss('.numbers', { transitionDuration: rollTime + 'ms', transform: 'matrix(1, 0, 0, 1, ' + fullOffset + ', 0)' }, this.elementRef.nativeElement);
  660.  
  661. setTimeout(() => {
  662. this.resetRoulette(lengthToEndFirstSet, scoreOffset);
  663. }, rollTime);
  664. }
  665.  
  666. resetRoulette(lengthToEndFirstSet: number, scoreOffset: number) {
  667. if (!this.domService.hasClass('.numbers', 'no-transition', this.elementRef.nativeElement)) {
  668. this.domService.addClass('.numbers', 'no-transition', this.elementRef.nativeElement);
  669. }
  670. let offset = Big(lengthToEndFirstSet).minus(scoreOffset).toFixed(2);
  671. this.domService.setCss('.numbers', { transform: 'matrix(1, 0, 0, 1, ' + offset + ', 0)' }, this.elementRef.nativeElement);
  672. }
  673.  
  674. resetToLastDrawn() {
  675. let scrollWidth = this.elementRef.nativeElement.querySelector('.roulette').offsetWidth;
  676. let halfScrollWidth = Big(scrollWidth).div(2).toFixed(2);
  677. let fullSetLength = Big(70).times(15).toFixed(2);
  678. let lengthToEndFirstSet = Big(fullSetLength).minus(halfScrollWidth).times(-1).toFixed(2);
  679. let middleOffset = Big(fullSetLength).times(4);
  680.  
  681. let rolledNumber = this.rouletteNumbers.filter((rouletteNumber) => {
  682. return rouletteNumber.val == this.lastResults[0].number.val;
  683. })[0];
  684.  
  685. let scoreOffset = Big(this.rouletteNumbers.indexOf(rolledNumber)).times(70).plus(27).toFixed(2);
  686. this.resetRoulette(lengthToEndFirstSet, scoreOffset);
  687. }
  688.  
  689. toggleSound() {
  690. this.sound = !this.sound;
  691. this.loginService.soundPreference = this.sound;
  692. }
  693.  
  694. updatePlayersResults(winColor: string) {
  695. switch (winColor) {
  696. case 'red': this.redWon(); break;
  697. case 'black': this.blackWon(); break;
  698. case 'green': this.greenWon(); break;
  699. }
  700. }
  701.  
  702. openRouletteRollModal(roll: csgobounty.IRouletteRoll) {
  703. this.modalService.show(RouletteRollModalComponent, {
  704. rollResult: roll
  705. });
  706. }
  707.  
  708. private redWon() {
  709. this.players.red.stats.total = Big(this.players.red.stats.total).times(2).toFixed(2);
  710. this.players.red.stats.win = true;
  711. this.players.black.stats.win = false;
  712. this.players.green.stats.win = false;
  713.  
  714. if (this.redHighestPlayer) this.redHighestPlayer.win = true;
  715. if (this.blackHighestPlayer) this.blackHighestPlayer.win = false;
  716. if (this.greenHighestPlayer) this.greenHighestPlayer.win = false;
  717.  
  718. this.players.red.bets.forEach(bet => { bet.win = true; });
  719. this.players.green.bets.forEach(bet => { bet.win = false; });
  720. this.players.black.bets.forEach(bet => { bet.win = false; });
  721. }
  722.  
  723. private blackWon() {
  724. this.players.black.stats.total = Big(this.players.black.stats.total).times(2).toFixed(2);
  725. this.players.black.stats.win = true;
  726. this.players.red.stats.win = false;
  727. this.players.green.stats.win = false;
  728.  
  729. if (this.blackHighestPlayer) this.blackHighestPlayer.win = true;
  730. if (this.redHighestPlayer) this.redHighestPlayer.win = false;
  731. if (this.greenHighestPlayer) this.greenHighestPlayer.win = false;
  732.  
  733. this.players.black.bets.forEach(bet => { bet.win = true; });
  734. this.players.green.bets.forEach(bet => { bet.win = false; });
  735. this.players.red.bets.forEach(bet => { bet.win = false; });
  736. }
  737.  
  738. private greenWon() {
  739. this.players.green.stats.total = Big(this.players.green.stats.total).times(14).toFixed(2);
  740.  
  741. this.players.green.stats.win = true;
  742. this.players.black.stats.win = false;
  743. this.players.red.stats.win = false;
  744.  
  745. if (this.greenHighestPlayer) this.greenHighestPlayer.win = true;
  746. if (this.blackHighestPlayer) this.blackHighestPlayer.win = false;
  747. if (this.redHighestPlayer) this.redHighestPlayer.win = false;
  748.  
  749. this.players.green.bets.forEach(bet => { bet.win = true; });
  750. this.players.black.bets.forEach(bet => { bet.win = false; });
  751. this.players.red.bets.forEach(bet => { bet.win = false; });
  752. }
  753.  
  754. private sortBetList(bets: csgobounty.IRouletteBet[]) {
  755. if (!this.sortingEnabled) return;
  756. bets.sort((a: csgobounty.IRouletteBet, b: csgobounty.IRouletteBet) => {
  757. if (a.userId == this.loggedUser.id) return -1;
  758. if (b.userId == this.loggedUser.id) return 1;
  759. return b.bet - a.bet;
  760. });
  761. }
  762.  
  763. private handleRedPlayers(redPlayers: (playerId: string) => csgobounty.IRoulettePlayer) {
  764. for (let playerId in redPlayers) {
  765. if (redPlayers.hasOwnProperty(playerId)) {
  766. let playerString = redPlayers[playerId];
  767. let player = JSON.parse(playerString);
  768.  
  769. // set current user values
  770. if (player.user.id == this.loggedUser.id) {
  771. this.myBet = true;
  772. this.myBetAmountRed = player.bet.total;
  773. }
  774.  
  775. // red stats
  776. this.players.red.stats.players += 1;
  777. this.players.red.stats.total = Big(this.players.red.stats.total).add(player.bet.total).toFixed(2);
  778.  
  779. let betModel = {
  780. userId: player.user.Id,
  781. bet: player.bet.total,
  782. username: player.user.username,
  783. avatar: player.user.avatar,
  784. };
  785.  
  786. // add to red players
  787. this.players.red.bets.push(betModel);
  788. this.sortBetList(this.players.red.bets);
  789. if (this.players.red.bets.length > Config.maxRoletteBetsPerColor) {
  790. this.players.red.bets.pop();
  791. }
  792.  
  793. // check red highest
  794. if (this.redHighestPlayer) {
  795. if (Math.round(player.bet.total * 100) > Math.round(this.redHighestPlayer.bet * 100)) {
  796. this.redHighestPlayer = betModel;
  797. }
  798. } else {
  799. this.redHighestPlayer = betModel;
  800. }
  801. }
  802. }
  803. }
  804.  
  805. private handleGreenPlayers(greenPlayers: (playerId: string) => csgobounty.IRoulettePlayer) {
  806. for (let playerId in greenPlayers) {
  807. if (greenPlayers.hasOwnProperty(playerId)) {
  808. let playerString = greenPlayers[playerId];
  809. let player = JSON.parse(playerString);
  810.  
  811. // set current user values
  812. if (player.user.id == this.loggedUser.id) {
  813. this.myBet = true;
  814. this.myBetAmountGreen = player.bet.total;
  815. }
  816.  
  817. // green stats
  818. this.players.green.stats.players += 1;
  819. this.players.green.stats.total = Big(this.players.green.stats.total).add(player.bet.total).toFixed(2);
  820.  
  821. let betModel = {
  822. userId: player.user.Id,
  823. bet: player.bet.total,
  824. username: player.user.username,
  825. avatar: player.user.avatar,
  826. };
  827.  
  828. // add to green players
  829. this.players.green.bets.push(betModel);
  830. this.sortBetList(this.players.green.bets);
  831. if (this.players.green.bets.length > Config.maxRoletteBetsPerColor) {
  832. this.players.green.bets.pop();
  833. }
  834.  
  835. // check green highest
  836. if (this.greenHighestPlayer) {
  837. if (Math.round(player.bet.total * 100) > Math.round(this.greenHighestPlayer.bet * 100)) {
  838. this.greenHighestPlayer = betModel;
  839. }
  840. } else {
  841. this.greenHighestPlayer = betModel;
  842. }
  843. }
  844. }
  845. }
  846.  
  847. private handleBlackPlayers(blackPlayers: (playerId: string) => csgobounty.IRoulettePlayer) {
  848. for (let playerId in blackPlayers) {
  849. if (blackPlayers.hasOwnProperty(playerId)) {
  850. let playerString = blackPlayers[playerId];
  851. let player = JSON.parse(playerString);
  852.  
  853. // set current user values
  854. if (player.user.id == this.loggedUser.id) {
  855. this.myBet = true;
  856. this.myBetAmountBlack = player.bet.total;
  857. }
  858.  
  859. // black stats
  860. this.players.black.stats.players += 1;
  861. this.players.black.stats.total = Big(this.players.black.stats.total).add(player.bet.total).toFixed(2);
  862.  
  863. let betModel = {
  864. userId: player.user.Id,
  865. bet: player.bet.total,
  866. username: player.user.username,
  867. avatar: player.user.avatar,
  868. };
  869.  
  870. // add to black players
  871. this.players.black.bets.push(betModel);
  872. this.sortBetList(this.players.black.bets);
  873. if (this.players.black.bets.length > Config.maxRoletteBetsPerColor) {
  874. this.players.black.bets.pop();
  875. }
  876.  
  877. // check black highest
  878. if (this.blackHighestPlayer) {
  879. if (Math.round(player.bet.total * 100) > Math.round(this.blackHighestPlayer.bet * 100)) {
  880. this.blackHighestPlayer = betModel;
  881. }
  882. } else {
  883. this.blackHighestPlayer = betModel;
  884. }
  885. }
  886. }
  887. }
  888.  
  889. private resizeRunning = false;
  890. private handleFutureResizeEvents() {
  891. window.addEventListener('resize', this.onWindowResize);
  892. window.addEventListener('optimizedResize', this.windowOptimizedResizeListener);
  893. }
  894.  
  895. private onWindowResize() {
  896. if (this.resizeRunning) return;
  897.  
  898. this.resizeRunning = true;
  899. requestAnimationFrame(() => {
  900. window.dispatchEvent(new CustomEvent('optimizedResize'));
  901. this.resizeRunning = false;
  902. });
  903. }
  904.  
  905. private onResize() {
  906. if (this.gameIsActive() || this.inProgress) return;
  907. this.resetToLastDrawn();
  908. }
  909.  
  910. private toggleAnimations() {
  911. this.animationsEnabled = !this.animationsEnabled;
  912. }
  913.  
  914. private toggleSorting() {
  915. this.sortingEnabled = !this.sortingEnabled;
  916. }
  917. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement