BattleUtil.ts 3.3 KB

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