BattleUtil.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { ObjectValueType } from "./BattleEnum";
  2. export namespace BattleUtil {
  3. //背包容量
  4. export const BagListSize = 15;
  5. export const AttackListSize = 10;
  6. //战斗辅助工具类
  7. export const FrameRate = 30; //帧率
  8. export const FrameTime = 1 / FrameRate; //帧间隔
  9. export const PI = 3.1415926; //圆周率
  10. export const TurnMax = 10*60*FrameRate; //回合数
  11. //特殊的类型id
  12. export const TypeID_Init = -1; //初始化id
  13. export const TypeID_Player = -2; //玩家操作生成的id
  14. export const PosID_Init = -1; //初始化id
  15. export const IndexID_Init = -1; //初始化id
  16. //二维向量
  17. export class Vector2{
  18. x: number;
  19. y: number;
  20. constructor(x:number,y:number){
  21. this.x = x;
  22. this.y = y;
  23. }
  24. static Sub(vec:Vector2,vec2:Vector2){
  25. return new Vector2(vec.x - vec2.x,vec.y - vec2.y);
  26. }
  27. static Add(vec:Vector2,vec2:Vector2){
  28. return new Vector2(vec.x + vec2.x,vec.y + vec2.y);
  29. }
  30. static Multiply(vec:Vector2,number:number){
  31. return new Vector2(vec.x * number,vec.y * number);
  32. }
  33. static Divide(vec:Vector2,number:number){
  34. return new Vector2(vec.x / number,vec.y / number);
  35. }
  36. sub(vec:Vector2){
  37. this.x -= vec.x;
  38. this.y -= vec.y;
  39. }
  40. add(vec:Vector2){
  41. this.x += vec.x;
  42. this.y += vec.y;
  43. }
  44. multiply(number:number){
  45. this.x *= number;
  46. this.y *= number;
  47. }
  48. divide(number:number){
  49. this.x /= number;
  50. this.y /= number;
  51. }
  52. normalize(){
  53. let len = this.length();
  54. this.x /= len;
  55. this.y /= len;
  56. }
  57. length(){
  58. return Math.sqrt(this.x * this.x + this.y * this.y);
  59. }
  60. clone(){
  61. return new Vector2(this.x,this.y);
  62. }
  63. }
  64. // 在服务器端或客户端
  65. // import { Random } from './random';
  66. // const seed = 12345;
  67. // const random = new Random(seed);
  68. // const randomNum = random.nextInt(1, 100);
  69. // console.log(randomNum);
  70. export class Random {
  71. private seed: number;
  72. private a: number;
  73. private c: number;
  74. private m: number;
  75. constructor(seed: number) {
  76. this.seed = seed;
  77. this.a = 1664525;
  78. this.c = 1013904223;
  79. this.m = Math.pow(2, 32);
  80. }
  81. next(): number {
  82. this.seed = (this.a * this.seed + this.c) % this.m;
  83. return this.seed / this.m;
  84. }
  85. nextInt(min: number, max: number): number {
  86. return min + Math.floor(this.next() * (max - min + 1));
  87. }
  88. }
  89. //特殊数值
  90. export interface SpecialValue{
  91. attackType: ObjectValueType;
  92. value: number;
  93. }
  94. //英雄参数变化
  95. export interface HeroDataChange{
  96. //英雄id 交换位置和主将技能时无hero
  97. heroID?: number;
  98. changeType: ObjectValueType;
  99. changeValueLlist: number[];
  100. };
  101. //敌人出生结构
  102. export class EnemyBornData{
  103. //出生时间
  104. bornTime:number;
  105. //出生点id
  106. positionID:number;
  107. //敌人类型id
  108. typeID:number;
  109. //等级
  110. level:number;
  111. //路线
  112. roldID:number;
  113. }
  114. }