game_helpers.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. export default class game_helpers
  2. {
  3. public static randomItem(array: Array<any>) {
  4. if (array && array.length > 0) {
  5. return array[this.getRandomInt(0,array.length-1)];
  6. } else {
  7. return null;
  8. }
  9. }
  10. public static Object2Array(obj:Object):any[]
  11. {
  12. let arr = []
  13. for (const key in obj) {
  14. arr.push(obj[key])
  15. }
  16. return arr;
  17. }
  18. public static getRandom(lower, upper): number {
  19. return Math.random() * (upper - lower) + lower;
  20. };
  21. public static getRandomInt(lower, upper): number {
  22. return Math.floor(Math.random() * (upper - lower)) + lower;
  23. };
  24. public static seed: number = 5;
  25. public static seedRandom(): number {
  26. return game_helpers.getRandom(0, 1);
  27. // this.seed = (this.seed * 9301 + 49297) % 233280;
  28. // return this.seed / 233280.0;
  29. }
  30. public static seedRandomInt(lower, upper): number {
  31. return game_helpers.getRandomInt(lower, upper);
  32. // return Math.floor(game_helpers.seedRandom() * (upper - lower)) + lower;
  33. }
  34. private static rnd(seed) {
  35. seed = (seed * 9301 + 49297) % 233280; //为何使用这三个数?
  36. return seed / (233280.0);
  37. };
  38. public static getPowNum(p) {
  39. return Math.pow(10, p);
  40. };
  41. public static setServerTime(time: number) {
  42. game_helpers.timeOffset = time - new Date().getTime();
  43. cc.log("timeOffset:", game_helpers.timeOffset)
  44. }
  45. public static timeOffset: number = 0;
  46. public static getServerTime() {
  47. return new Date().getTime() + game_helpers.timeOffset;
  48. }
  49. static formatDate(t) {
  50. var date = new Date(t);
  51. var YY = date.getFullYear() + '-';
  52. var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  53. var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
  54. var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
  55. var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
  56. var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  57. return YY + MM + DD + " " + hh + mm + ss;
  58. }
  59. public static cloneObj(obj: any) {
  60. obj = JSON.stringify(obj);
  61. obj = JSON.parse(obj);
  62. return obj;
  63. }
  64. public static getTimeStrByS(second: number) {
  65. second = Math.floor(second);
  66. if (second < 0) second = 0;
  67. var d = Math.floor(second / 3600 / 24);
  68. second -= d * 3600 * 24;
  69. var h = Math.floor(second / 3600);
  70. second -= h * 3600;
  71. var m = Math.floor(second / 60);
  72. second -= m * 60;
  73. var front = "00";
  74. if (h > 9) {
  75. front = "" + h;
  76. } else {
  77. front = "0" + h;
  78. }
  79. var mid = "00";
  80. if (m > 9) {
  81. mid = "" + m;
  82. } else {
  83. mid = "0" + m;
  84. }
  85. var back = "00";
  86. if (second > 9) {
  87. back = "" + second;
  88. } else {
  89. back = "0" + second;
  90. }
  91. if (d > 0) {
  92. return d + "天" + h + "时" + m + "分";
  93. }
  94. else {
  95. var longTime = h > 0;
  96. if (longTime) {
  97. return front + ":" + mid;
  98. } else {
  99. return mid + ":" + back;//+ '秒';
  100. }
  101. }
  102. }
  103. public static getClockStrByS(second: number, showsecond: boolean = true, showhour: boolean = true) {
  104. second = Math.floor(second);
  105. if (second < 0) second = 0;
  106. var h = Math.floor(second / 3600);
  107. second -= h * 3600;
  108. var m = Math.floor(second / 60);
  109. second -= m * 60;
  110. var front = "00";
  111. if (h > 9) {
  112. front = "" + h;
  113. } else {
  114. front = "0" + h;
  115. }
  116. var mid = "00";
  117. if (m > 9) {
  118. mid = "" + m;
  119. } else {
  120. mid = "0" + m;
  121. }
  122. let str = ""
  123. if (showhour) {
  124. str += front;
  125. str += ":"
  126. }
  127. str += mid;
  128. if (showsecond)
  129. str += ":" + (second < 10 ? "0" : "") + second;
  130. return str
  131. }
  132. public static checkObjEmpty(obj: any) {
  133. if (obj) {
  134. for (var i in obj) {
  135. return false;
  136. }
  137. return true;
  138. } else {
  139. return true;
  140. }
  141. }
  142. public static checkOrderOver(orderTime: number) {
  143. var date = new Date(orderTime);
  144. var dateNow = new Date(game_helpers.getServerTime());
  145. if (date.getFullYear() == dateNow.getFullYear() &&
  146. date.getMonth() == dateNow.getMonth() &&
  147. date.getDate() == dateNow.getDate()
  148. ) {
  149. return false;
  150. } else {
  151. return true;
  152. }
  153. }
  154. //spa 相对tp目录
  155. public static loadSpriteFrame(spa:string,name:string,callback:Function = null)
  156. {
  157. this.loadRes("tp/" + spa,"texture",cc.SpriteAtlas,(e,assets:cc.SpriteAtlas)=>{
  158. if(e)
  159. {
  160. console.log(spa,name)
  161. cc.error(e)
  162. }else
  163. {
  164. callback(assets.getSpriteFrame(name))
  165. }
  166. })
  167. }
  168. public static loadRes(path: string, boundle_name: string, type: typeof cc.Asset, callback: Function = null) {
  169. cc.assetManager.loadBundle(boundle_name, (error, bundle: cc.AssetManager.Bundle) => {
  170. if (error) {
  171. cc.log(error)
  172. return
  173. }
  174. bundle.load(path, type, (e, assets) => {
  175. if(e)
  176. {
  177. cc.log(e)
  178. return
  179. }
  180. callback(e,assets)
  181. })
  182. })
  183. }
  184. public static weight(v: number[]): number {
  185. var mTotalWeight = 0;
  186. for (var i = 0; i < v.length; ++i) {
  187. mTotalWeight += v[i];
  188. }
  189. if (mTotalWeight <= 0) return -1;
  190. var randnum = Math.round(Math.random() * Number.MAX_VALUE) % mTotalWeight;
  191. for (var i = 0; i < v.length; ++i) {
  192. if (randnum < v[i]) {
  193. return i;
  194. }
  195. else {
  196. randnum -= v[i];
  197. }
  198. }
  199. return -1;
  200. }
  201. public static shuffle(arr) {
  202. for (let i = arr.length - 1; i >= 0; i--) {
  203. let rIndex = Math.floor(Math.random() * (i + 1));
  204. let temp = arr[rIndex];
  205. arr[rIndex] = arr[i];
  206. arr[i] = temp;
  207. }
  208. return arr;
  209. }
  210. public static getDate(time: number): string {
  211. var now = new Date(time),
  212. y = now.getFullYear(),
  213. m = now.getMonth() + 1,
  214. d = now.getDate();
  215. return y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d) + " " + now.toTimeString().substr(0, 8);
  216. }
  217. //货币进位
  218. public static goldCrarryBit(gold: number): string {
  219. var array = [
  220. [100000000, 'N'],
  221. [10000000, 'T'],
  222. [1000000, 'G'],
  223. [100000, 'M'],
  224. [10000, 'K'],
  225. [1000, 'B'],
  226. ];
  227. for (var i = 0; i < array.length; i++) {
  228. var value = gold / (array[i][0] as number);
  229. if (value > 1) {
  230. return '' + value.toFixed(1) + array[i][1];
  231. }
  232. }
  233. return gold.toString();
  234. }
  235. //定点数
  236. public static fixFloat(val: number, count: number = 2) {
  237. var a = Math.pow(10, count)
  238. return Math.floor(val * a) / a;
  239. }
  240. // this.initPool("basechip", ret, 10);
  241. // this.initPool("dianchi", ret, 10);
  242. // this.initPool("enery", ret, 10);
  243. // this.initPool("gem", ret, 10);
  244. static formatString(s: string, ...arg) {
  245. for (var i = 0; i < arg.length; i++) {
  246. var reg = new RegExp("\\{" + i + "\\}", "gm");
  247. s = s.replace(reg, arg[i]);
  248. }
  249. return s;
  250. }
  251. static count(obj) {
  252. if (!obj) return 0;
  253. var num = 0;
  254. for (var k in obj) {
  255. num++;
  256. }
  257. return num;
  258. };
  259. static copy(obj) {
  260. var newObj = Object.create(obj);
  261. Object.assign(newObj, obj);
  262. return newObj;
  263. }
  264. static setGray(icon: cc.Sprite, isGray: boolean) {
  265. if (isGray) {
  266. icon.setMaterial(0, cc.Material.getBuiltinMaterial('2d-gray-sprite'));
  267. } else {
  268. icon.setMaterial(0, cc.Material.getBuiltinMaterial('2d-sprite'));
  269. }
  270. }
  271. static setSpriteFrame(sp: cc.Sprite, path: string, bundle: string = 'resources', callback = null): void {
  272. let loader = cc.assetManager.getBundle(bundle)
  273. loader.load(path, cc.Texture2D, (error, assets: cc.Texture2D) => {
  274. if (error) {
  275. cc.log('error', path)
  276. return
  277. }
  278. sp.spriteFrame =new cc.SpriteFrame(assets)
  279. callback && callback()
  280. })
  281. }
  282. public static initArray2(row: number, col: number, value: number = null) {
  283. let arr = []
  284. for (let i = 0; i < row; i++) {
  285. arr[i] = []
  286. for (let j = 0; j < col; j++) {
  287. arr[i][j] = value
  288. }
  289. }
  290. return arr
  291. }
  292. static localConvertWorldPointAR(node) {
  293. if (node) {
  294. return node.convertToWorldSpaceAR(cc.v2(0, 0));
  295. } return null;
  296. }
  297. static convetOtherNodeSpaceAR(node, targetNode): cc.Vec2 {
  298. if (!node || !targetNode) {
  299. return null;
  300. }
  301. let worldPoint = game_helpers.localConvertWorldPointAR(node);
  302. return game_helpers.worldConvertLocalPointAR(targetNode, worldPoint);
  303. }
  304. static worldConvertLocalPointAR(node, worldPoint) {
  305. if (node) {
  306. return node.convertToNodeSpaceAR(worldPoint);
  307. }
  308. return null;
  309. }
  310. // 计算 |p1 p2| X |p1 p|
  311. static getCross(p1: cc.Vec2, p2: cc.Vec2, p: cc.Vec2) {
  312. return (p2.x - p1.x) * (p.y - p1.y) - (p.x - p1.x) * (p2.y - p1.y);
  313. }
  314. //判断点p是否在p1p2p3p4的正方形内
  315. static isPointInMatrix(p1: cc.Vec2, p2: cc.Vec2, p3: cc.Vec2, p4: cc.Vec2, p: cc.Vec2) {
  316. let isPointIn = game_helpers.getCross(p1, p2, p) * game_helpers.getCross(p3, p4, p) >= 0 && game_helpers.getCross(p2, p3, p) * game_helpers.getCross(p4, p1, p) >= 0;
  317. return isPointIn;
  318. }
  319. public static randomArray(arr: number[]) {
  320. let newArr = []
  321. let count = arr.length
  322. for (let i = 0; i < count; i++) {
  323. let rnd = Math.floor(Math.random() * arr.length)
  324. newArr.push(arr[rnd])
  325. arr.splice(rnd, 1)
  326. }
  327. return newArr
  328. }
  329. public static removeElementFromArray(element: any, arr) {
  330. for (let i = arr.length - 1; i >= 0; i--) {
  331. if (arr[i] == element) {
  332. arr.splice(i, 1)
  333. break
  334. }
  335. }
  336. }
  337. static getDayCount(year, month) {
  338. let runYear = false
  339. if ((year % 100 != 0 && year % 4 == 0) || year % 400 == 0) {
  340. runYear = true
  341. }
  342. if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
  343. return 31
  344. else if (month == 4 || month == 6 || month == 9 || month == 11)
  345. return 30
  346. else
  347. return runYear ? 29 : 28
  348. }
  349. };