@chiyou/minigame-framework 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/assets/AssetsPackage/GUI/Images/Block.png +0 -0
  2. package/assets/AssetsPackage/GUI/Images/Block.png.meta +134 -0
  3. package/assets/AssetsPackage/GUI/Images.meta +9 -0
  4. package/assets/AssetsPackage/GUI/UIPrefabs/ChessBoard_Card.prefab +509 -0
  5. package/assets/AssetsPackage/GUI/UIPrefabs/ChessBoard_Card.prefab.meta +13 -0
  6. package/assets/AssetsPackage/GUI/UIPrefabs.meta +9 -0
  7. package/assets/AssetsPackage/GUI.meta +11 -0
  8. package/assets/AssetsPackage/SpriteAtlas/Card_Pattern.plist +1106 -0
  9. package/assets/AssetsPackage/SpriteAtlas/Card_Pattern.plist.meta +3329 -0
  10. package/assets/AssetsPackage/SpriteAtlas/Card_Pattern.png +0 -0
  11. package/assets/AssetsPackage/SpriteAtlas/Card_Pattern.png.meta +134 -0
  12. package/assets/AssetsPackage/SpriteAtlas/SA_Card.plist +1196 -0
  13. package/assets/AssetsPackage/SpriteAtlas/SA_Card.plist.meta +3605 -0
  14. package/assets/AssetsPackage/SpriteAtlas/SA_Card.png +0 -0
  15. package/assets/AssetsPackage/SpriteAtlas/SA_Card.png.meta +134 -0
  16. package/assets/AssetsPackage/SpriteAtlas.meta +11 -0
  17. package/assets/AssetsPackage/SpriteFrame/Card_PatternType_Back.png +0 -0
  18. package/assets/AssetsPackage/SpriteFrame/Card_PatternType_Back.png.meta +134 -0
  19. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Back_BG.png +0 -0
  20. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Back_BG.png.meta +134 -0
  21. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Back_FG.png +0 -0
  22. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Back_FG.png.meta +134 -0
  23. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Front_BG.png +0 -0
  24. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Front_BG.png.meta +134 -0
  25. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Front_FG.png +0 -0
  26. package/assets/AssetsPackage/SpriteFrame/Card_TowardType_Front_FG.png.meta +134 -0
  27. package/assets/AssetsPackage/SpriteFrame.meta +11 -0
  28. package/assets/AssetsPackage.meta +9 -0
  29. package/assets/Scenes/Game.scene +831 -0
  30. package/assets/Scenes/Game.scene.meta +11 -0
  31. package/assets/Scenes.meta +9 -0
  32. package/assets/Scripts/Biz.meta +9 -0
  33. package/assets/Scripts/Framework/Adapter/AdAdapter/AbsAdAdapter.ts +312 -0
  34. package/assets/Scripts/Framework/Adapter/AdAdapter/AbsAdAdapter.ts.meta +9 -0
  35. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterBilibili.ts +294 -0
  36. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterBilibili.ts.meta +9 -0
  37. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterDouYin.ts +650 -0
  38. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterDouYin.ts.meta +9 -0
  39. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterHonor.ts +782 -0
  40. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterHonor.ts.meta +9 -0
  41. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterHuaWei.ts +582 -0
  42. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterHuaWei.ts.meta +9 -0
  43. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterJingDong.ts +298 -0
  44. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterJingDong.ts.meta +9 -0
  45. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterKuaiShou.ts +575 -0
  46. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterKuaiShou.ts.meta +9 -0
  47. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterOppo.ts +946 -0
  48. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterOppo.ts.meta +9 -0
  49. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterTapTap.ts +643 -0
  50. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterTapTap.ts.meta +9 -0
  51. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterVivo.ts +616 -0
  52. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterVivo.ts.meta +9 -0
  53. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterWeiXin.ts +847 -0
  54. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterWeiXin.ts.meta +9 -0
  55. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterXiaoMi.ts +747 -0
  56. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterXiaoMi.ts.meta +9 -0
  57. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterZhiFuBao.ts +579 -0
  58. package/assets/Scripts/Framework/Adapter/AdAdapter/AdAdapterZhiFuBao.ts.meta +9 -0
  59. package/assets/Scripts/Framework/Adapter/AdAdapter.meta +9 -0
  60. package/assets/Scripts/Framework/Adapter/PlatformAdapter/AbsPlatformAdapter.ts +102 -0
  61. package/assets/Scripts/Framework/Adapter/PlatformAdapter/AbsPlatformAdapter.ts.meta +9 -0
  62. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterBilibili.ts +660 -0
  63. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterBilibili.ts.meta +9 -0
  64. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterDesktopBrowser.ts +224 -0
  65. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterDesktopBrowser.ts.meta +9 -0
  66. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterDouYin.ts +827 -0
  67. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterDouYin.ts.meta +9 -0
  68. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterHonor.ts +378 -0
  69. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterHonor.ts.meta +9 -0
  70. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterHuaWei.ts +363 -0
  71. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterHuaWei.ts.meta +9 -0
  72. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterJingDong.ts +368 -0
  73. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterJingDong.ts.meta +9 -0
  74. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterKuaiShou.ts +498 -0
  75. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterKuaiShou.ts.meta +9 -0
  76. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterOppo.ts +323 -0
  77. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterOppo.ts.meta +9 -0
  78. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterTapTap.ts +617 -0
  79. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterTapTap.ts.meta +9 -0
  80. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterVivo.ts +377 -0
  81. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterVivo.ts.meta +9 -0
  82. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterWeiXin.ts +1136 -0
  83. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterWeiXin.ts.meta +9 -0
  84. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterXiaoMi.ts +377 -0
  85. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterXiaoMi.ts.meta +9 -0
  86. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterZhiFuBao.ts +483 -0
  87. package/assets/Scripts/Framework/Adapter/PlatformAdapter/PlatformAdapterZhiFuBao.ts.meta +9 -0
  88. package/assets/Scripts/Framework/Adapter/PlatformAdapter.meta +9 -0
  89. package/assets/Scripts/Framework/Adapter.meta +9 -0
  90. package/assets/Scripts/Framework/Definition/AdDefinition.ts +284 -0
  91. package/assets/Scripts/Framework/Definition/AdDefinition.ts.meta +9 -0
  92. package/assets/Scripts/Framework/Definition/FrameworkBase.ts +15 -0
  93. package/assets/Scripts/Framework/Definition/FrameworkBase.ts.meta +9 -0
  94. package/assets/Scripts/Framework/Definition/PrivacyDefinition.ts +95 -0
  95. package/assets/Scripts/Framework/Definition/PrivacyDefinition.ts.meta +9 -0
  96. package/assets/Scripts/Framework/Definition/SocialDefinition.ts +21 -0
  97. package/assets/Scripts/Framework/Definition/SocialDefinition.ts.meta +9 -0
  98. package/assets/Scripts/Framework/Definition/SystemDefinition.ts +58 -0
  99. package/assets/Scripts/Framework/Definition/SystemDefinition.ts.meta +9 -0
  100. package/assets/Scripts/Framework/Definition/UIDefinition.ts +10 -0
  101. package/assets/Scripts/Framework/Definition/UIDefinition.ts.meta +9 -0
  102. package/assets/Scripts/Framework/Definition/UserDefinition.ts +17 -0
  103. package/assets/Scripts/Framework/Definition/UserDefinition.ts.meta +9 -0
  104. package/assets/Scripts/Framework/Definition.meta +9 -0
  105. package/assets/Scripts/Framework/Manager/AdMgr.ts +812 -0
  106. package/assets/Scripts/Framework/Manager/AdMgr.ts.meta +9 -0
  107. package/assets/Scripts/Framework/Manager/AudioMgr.ts +296 -0
  108. package/assets/Scripts/Framework/Manager/AudioMgr.ts.meta +9 -0
  109. package/assets/Scripts/Framework/Manager/BaseMgr.ts +130 -0
  110. package/assets/Scripts/Framework/Manager/BaseMgr.ts.meta +9 -0
  111. package/assets/Scripts/Framework/Manager/EventMgr.ts +102 -0
  112. package/assets/Scripts/Framework/Manager/EventMgr.ts.meta +9 -0
  113. package/assets/Scripts/Framework/Manager/ExcelMgr.ts +188 -0
  114. package/assets/Scripts/Framework/Manager/ExcelMgr.ts.meta +9 -0
  115. package/assets/Scripts/Framework/Manager/LifeCycleMgr.ts +142 -0
  116. package/assets/Scripts/Framework/Manager/LifeCycleMgr.ts.meta +9 -0
  117. package/assets/Scripts/Framework/Manager/NodePoolMgr.ts +385 -0
  118. package/assets/Scripts/Framework/Manager/NodePoolMgr.ts.meta +9 -0
  119. package/assets/Scripts/Framework/Manager/PrivacyMgr.ts +189 -0
  120. package/assets/Scripts/Framework/Manager/PrivacyMgr.ts.meta +9 -0
  121. package/assets/Scripts/Framework/Manager/ResMgr.ts +420 -0
  122. package/assets/Scripts/Framework/Manager/ResMgr.ts.meta +9 -0
  123. package/assets/Scripts/Framework/Manager/SocialMgr.ts +250 -0
  124. package/assets/Scripts/Framework/Manager/SocialMgr.ts.meta +9 -0
  125. package/assets/Scripts/Framework/Manager/SystemMgr.ts +264 -0
  126. package/assets/Scripts/Framework/Manager/SystemMgr.ts.meta +9 -0
  127. package/assets/Scripts/Framework/Manager/TimerMgr.ts +80 -0
  128. package/assets/Scripts/Framework/Manager/TimerMgr.ts.meta +9 -0
  129. package/assets/Scripts/Framework/Manager/UIMgr.ts +267 -0
  130. package/assets/Scripts/Framework/Manager/UIMgr.ts.meta +9 -0
  131. package/assets/Scripts/Framework/Manager/UserMgr.ts +162 -0
  132. package/assets/Scripts/Framework/Manager/UserMgr.ts.meta +9 -0
  133. package/assets/Scripts/Framework/Manager.meta +9 -0
  134. package/assets/Scripts/Framework/Utils/BezierUtils.ts +273 -0
  135. package/assets/Scripts/Framework/Utils/BezierUtils.ts.meta +9 -0
  136. package/assets/Scripts/Framework/Utils/CSVUtils.ts +396 -0
  137. package/assets/Scripts/Framework/Utils/CSVUtils.ts.meta +9 -0
  138. package/assets/Scripts/Framework/Utils/LogUtils.ts +32 -0
  139. package/assets/Scripts/Framework/Utils/LogUtils.ts.meta +9 -0
  140. package/assets/Scripts/Framework/Utils/NumberUtils.ts +51 -0
  141. package/assets/Scripts/Framework/Utils/NumberUtils.ts.meta +9 -0
  142. package/assets/Scripts/Framework/Utils/TaskUtils.ts +27 -0
  143. package/assets/Scripts/Framework/Utils/TaskUtils.ts.meta +9 -0
  144. package/assets/Scripts/Framework/Utils/TimeUtils.ts +38 -0
  145. package/assets/Scripts/Framework/Utils/TimeUtils.ts.meta +9 -0
  146. package/assets/Scripts/Framework/Utils/WXBizDataCryptUtils.ts +54 -0
  147. package/assets/Scripts/Framework/Utils/WXBizDataCryptUtils.ts.meta +9 -0
  148. package/assets/Scripts/Framework/Utils.meta +9 -0
  149. package/assets/Scripts/Framework.meta +9 -0
  150. package/assets/Scripts/index.ts +39 -0
  151. package/assets/Scripts.meta +9 -0
  152. package/package.json +2 -4
@@ -0,0 +1,162 @@
1
+ import { FrameworkBase } from "../Definition/FrameworkBase";
2
+ import { LoginResult, LoginResultType } from "../Definition/UserDefinition";
3
+ import { LogUtils } from "../Utils/LogUtils";
4
+ import { BaseMgr } from "./BaseMgr";
5
+
6
+ export class UserMgr extends BaseMgr {
7
+
8
+ public static Instance: UserMgr = null;
9
+ static TAG: string = "UserMgr";
10
+
11
+ private newUser: boolean = false;
12
+
13
+ private isLogin: boolean = false;
14
+
15
+ onLoad(): void {
16
+ super.onLoad();
17
+
18
+ if (UserMgr.Instance === null) {
19
+ UserMgr.Instance = this;
20
+ } else {
21
+ this.destroy();
22
+ return;
23
+ }
24
+ }
25
+
26
+ public init(): void {
27
+ this.initNewUser();
28
+
29
+ LogUtils.Instance.log(UserMgr.TAG, "init() finished.");
30
+ }
31
+
32
+ private initNewUser(): void {
33
+ let userMgr_NewUser = localStorage.getItem(FrameworkBase.LocalStorage.Key_UserMgr_NewUser);
34
+ let userInfo_NewUser = localStorage.getItem(FrameworkBase.LocalStorage.Key_UserInfo_NewUser);
35
+
36
+ if (userMgr_NewUser !== null && userMgr_NewUser === "0") {
37
+ this.newUser = false;
38
+ } else if (userInfo_NewUser !== null && userInfo_NewUser === "0") {
39
+ this.newUser = false;
40
+ localStorage.removeItem(FrameworkBase.LocalStorage.Key_UserInfo_NewUser);
41
+ localStorage.setItem(FrameworkBase.LocalStorage.Key_UserMgr_NewUser, "0");
42
+ } else {
43
+ this.newUser = true;
44
+ localStorage.setItem(FrameworkBase.LocalStorage.Key_UserMgr_NewUser, "0");
45
+ }
46
+
47
+ LogUtils.Instance.log(UserMgr.TAG, "isNewUser=" + this.isNewUser());
48
+ }
49
+
50
+ public isNewUser(): boolean {
51
+ return this.newUser;
52
+ }
53
+
54
+ public login(needForceLogin: boolean, callback: Function): void {
55
+ if (callback === null) {
56
+ return;
57
+ }
58
+
59
+ if (this.getPlatformAdapter() === null) {
60
+ this.isLogin = false;
61
+ callback({
62
+ type: LoginResultType.Type_LoginFail_ContinueGame,
63
+ code: "",
64
+ accountId: 0,
65
+ });
66
+ return;
67
+ }
68
+
69
+ if (!needForceLogin) {
70
+ this._checkSession().then((loginResult: LoginResult) => {
71
+ this.isLogin = true;
72
+ callback(loginResult);
73
+ }).catch(() => {
74
+ this._login().then((loginResult: LoginResult) => {
75
+ this.isLogin = true;
76
+ callback(loginResult);
77
+ }).catch((loginResult: LoginResult) => {
78
+ this.isLogin = false;
79
+ callback(loginResult);
80
+ });
81
+ });
82
+ } else {
83
+ this._login().then((loginResult: LoginResult) => {
84
+ this.isLogin = true;
85
+ callback(loginResult);
86
+ }).catch((loginResult: LoginResult) => {
87
+ this.isLogin = false;
88
+ callback(loginResult);
89
+ });
90
+ }
91
+ }
92
+
93
+ private _checkSession(): Promise<LoginResult> {
94
+ return new Promise((resolve, reject) => {
95
+ if (this.getPlatformAdapter() === null) {
96
+ reject();
97
+ return;
98
+ }
99
+
100
+ this.getPlatformAdapter().checkSession(
101
+ () => {
102
+ resolve({
103
+ type: LoginResultType.Type_SessionAvailable,
104
+ code: "",
105
+ accountId: 0,
106
+ });
107
+ }, () => {
108
+ reject();
109
+ });
110
+ });
111
+ }
112
+
113
+ private _login(): Promise<LoginResult> {
114
+ return new Promise((resolve, reject) => {
115
+ if (this.getPlatformAdapter() === null) {
116
+ reject("");
117
+ return;
118
+ }
119
+
120
+ this.getPlatformAdapter().login(
121
+ (code: string, accountId: number) => {
122
+ if (code.length > 0) {
123
+ resolve({
124
+ type: LoginResultType.Type_LoginSuccess_Auth_Code,
125
+ code: code,
126
+ accountId: 0,
127
+ });
128
+ } else if (accountId > 0) {
129
+ resolve({
130
+ type: LoginResultType.Type_LoginSuccess_Auth_AccountID,
131
+ code: "",
132
+ accountId: accountId,
133
+ });
134
+ }
135
+
136
+ reject({
137
+ type: LoginResultType.Type_LoginFail_ContinueGame,
138
+ code: "",
139
+ accountId: 0,
140
+ });
141
+ }, (canContinueGame: boolean) => {
142
+ if (canContinueGame) {
143
+ reject({
144
+ type: LoginResultType.Type_LoginFail_ContinueGame,
145
+ code: "",
146
+ accountId: 0,
147
+ });
148
+ } else {
149
+ reject({
150
+ type: LoginResultType.Type_LoginFail_ExitGame,
151
+ code: "",
152
+ accountId: 0,
153
+ });
154
+ }
155
+ });
156
+ });
157
+ }
158
+
159
+ public isLogined(): boolean {
160
+ return this.isLogin;
161
+ }
162
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "ver": "4.0.24",
3
+ "importer": "typescript",
4
+ "imported": true,
5
+ "uuid": "f565e7db-8282-449c-913b-4a8670c48b30",
6
+ "files": [],
7
+ "subMetas": {},
8
+ "userData": {}
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "ver": "1.2.0",
3
+ "importer": "directory",
4
+ "imported": true,
5
+ "uuid": "b57f890c-e00e-49b0-bf23-aeb820b9da76",
6
+ "files": [],
7
+ "subMetas": {},
8
+ "userData": {}
9
+ }
@@ -0,0 +1,273 @@
1
+ import { _decorator, Component, Node, tween, Tween, TweenEasing, v2, Vec2, Vec3 } from 'cc';
2
+ const { ccclass } = _decorator;
3
+
4
+ export interface BezierMoveOptions {
5
+ rotateToDirection?: boolean; // 是否根据运动方向调整朝向
6
+ rotateSpeed?: number; // 旋转速度系数
7
+ rotateOffset?: number; // 旋转偏移角度(度数)
8
+ lookAtTarget?: Node | Vec3; // 看向某个目标
9
+ smoothing?: number; // 角度平滑系数(0-1)
10
+ onUpdate?: (ratio: number, position: Vec3, rotation: number) => void; // 自定义更新回调
11
+ }
12
+
13
+ @ccclass
14
+ export class BezierUtils extends Component {
15
+
16
+ /**
17
+ * 二阶贝塞尔曲线移动(带朝向控制)
18
+ * @param target 目标节点
19
+ * @param controlPoint 控制点
20
+ * @param endPoint 终点
21
+ * @param duration 持续时间
22
+ * @param easing 缓动函数
23
+ * @param options 配置选项
24
+ */
25
+ static quadraticTween(
26
+ target: Node,
27
+ controlPoint: Vec3,
28
+ endPoint: Vec3,
29
+ duration: number,
30
+ easing: TweenEasing = 'linear',
31
+ options: BezierMoveOptions = {},
32
+ ): Tween<Node> {
33
+ const startPoint = target.position.clone();
34
+ const startRotation = target.angle;
35
+ let lastPosition = startPoint.clone();
36
+ let lastRotation = 0;
37
+
38
+ const rotateToDirection = options.rotateToDirection ?? false;
39
+ const rotateSpeed = options.rotateSpeed ?? 1;
40
+ const rotateOffset = options.rotateOffset ?? 0;
41
+ const smoothing = options.smoothing ?? 0.3;
42
+
43
+ return tween(target)
44
+ .to(duration, {}, {
45
+ onStart: (target: Node) => {
46
+ target.setPosition(startPoint);
47
+ // 如果需要调整朝向
48
+ if (rotateToDirection || options.lookAtTarget) {
49
+ let targetAngle = 0;
50
+
51
+ if (options.lookAtTarget) {
52
+ // 看向目标
53
+ targetAngle = this.calculateLookAtAngle(
54
+ target.position,
55
+ options.lookAtTarget instanceof Node
56
+ ? options.lookAtTarget.position
57
+ : options.lookAtTarget
58
+ );
59
+ } else {
60
+ // 根据移动方向调整朝向
61
+ targetAngle = this.calculateMovementAngle(
62
+ lastPosition,
63
+ target.position,
64
+ target.angle,
65
+ rotateSpeed
66
+ );
67
+ }
68
+
69
+ // 应用角度偏移
70
+ targetAngle += rotateOffset;
71
+
72
+ // 角度平滑
73
+ if (smoothing > 0 && smoothing < 1) {
74
+ const currentAngle = target.angle;
75
+ const smoothedAngle = currentAngle + (targetAngle - currentAngle) * smoothing;
76
+ target.angle = smoothedAngle;
77
+ lastRotation = smoothedAngle;
78
+ } else {
79
+ target.angle = targetAngle;
80
+ lastRotation = targetAngle;
81
+ }
82
+ }
83
+ lastPosition = startPoint.clone();
84
+ lastRotation = startRotation;
85
+
86
+ // 保存当前位置用于计算下一帧方向
87
+ lastPosition.set(target.position);
88
+ },
89
+ onUpdate: (target: Node, ratio: number) => {
90
+ const t = ratio;
91
+ const u = 1 - t;
92
+
93
+ // 计算当前位置
94
+ const x = u * u * startPoint.x +
95
+ 2 * u * t * controlPoint.x +
96
+ t * t * endPoint.x;
97
+
98
+ const y = u * u * startPoint.y +
99
+ 2 * u * t * controlPoint.y +
100
+ t * t * endPoint.y;
101
+
102
+ const z = u * u * startPoint.z +
103
+ 2 * u * t * controlPoint.z +
104
+ t * t * endPoint.z;
105
+
106
+ target.setPosition(x, y, z);
107
+
108
+ // 如果需要调整朝向
109
+ if (rotateToDirection || options.lookAtTarget) {
110
+ let targetAngle = 0;
111
+
112
+ if (options.lookAtTarget) {
113
+ // 看向目标
114
+ targetAngle = this.calculateLookAtAngle(
115
+ target.position,
116
+ options.lookAtTarget instanceof Node
117
+ ? options.lookAtTarget.position
118
+ : options.lookAtTarget
119
+ );
120
+ } else {
121
+ // 根据移动方向调整朝向
122
+ targetAngle = this.calculateMovementAngle(
123
+ lastPosition,
124
+ target.position,
125
+ target.angle,
126
+ rotateSpeed
127
+ );
128
+ }
129
+
130
+ // 应用角度偏移
131
+ targetAngle += rotateOffset;
132
+
133
+ // 角度平滑
134
+ if (smoothing > 0 && smoothing < 1) {
135
+ const currentAngle = target.angle;
136
+ const smoothedAngle = currentAngle + (targetAngle - currentAngle) * smoothing;
137
+ target.angle = smoothedAngle;
138
+ lastRotation = smoothedAngle;
139
+ } else {
140
+ target.angle = targetAngle;
141
+ lastRotation = targetAngle;
142
+ }
143
+ }
144
+
145
+ // 保存当前位置用于计算下一帧方向
146
+ lastPosition.set(target.position);
147
+
148
+ // 调用自定义回调
149
+ options.onUpdate?.(ratio, target.position.clone(), target.angle);
150
+ },
151
+ onComplete: (target: Node) => {
152
+ // 如果需要调整朝向
153
+ if (rotateToDirection || options.lookAtTarget) {
154
+ let targetAngle = 0;
155
+
156
+ if (options.lookAtTarget) {
157
+ // 看向目标
158
+ targetAngle = this.calculateLookAtAngle(
159
+ target.position,
160
+ options.lookAtTarget instanceof Node
161
+ ? options.lookAtTarget.position
162
+ : options.lookAtTarget
163
+ );
164
+ } else {
165
+ // 根据移动方向调整朝向
166
+ targetAngle = this.calculateMovementAngle(
167
+ lastPosition,
168
+ target.position,
169
+ target.angle,
170
+ rotateSpeed
171
+ );
172
+ }
173
+
174
+ // 应用角度偏移
175
+ targetAngle += rotateOffset;
176
+
177
+ // 角度平滑
178
+ if (smoothing > 0 && smoothing < 1) {
179
+ const currentAngle = target.angle;
180
+ const smoothedAngle = currentAngle + (targetAngle - currentAngle) * smoothing;
181
+ target.angle = smoothedAngle;
182
+ lastRotation = smoothedAngle;
183
+ } else {
184
+ target.angle = targetAngle;
185
+ lastRotation = targetAngle;
186
+ }
187
+ }
188
+ lastPosition = startPoint.clone();
189
+ lastRotation = startRotation;
190
+
191
+ // 保存当前位置用于计算下一帧方向
192
+ lastPosition.set(target.position);
193
+ },
194
+ easing: easing,
195
+ })
196
+ .start();
197
+ }
198
+
199
+ /**
200
+ * 计算看向目标的角度
201
+ */
202
+ private static calculateLookAtAngle(from: Vec3, to: Vec3): number {
203
+ const direction = new Vec3();
204
+ Vec3.subtract(direction, to, from);
205
+ return this.vectorToAngle(direction);
206
+ }
207
+
208
+ /**
209
+ * 根据移动方向计算角度
210
+ */
211
+ private static calculateMovementAngle(
212
+ lastPos: Vec3,
213
+ currentPos: Vec3,
214
+ currentAngle: number,
215
+ speed: number = 1
216
+ ): number {
217
+ const delta = new Vec3();
218
+ Vec3.subtract(delta, currentPos, lastPos);
219
+
220
+ // 如果移动距离很小,保持当前角度
221
+ if (delta.lengthSqr() < 0.0001) {
222
+ return currentAngle;
223
+ }
224
+
225
+ return this.vectorToAngle(delta);
226
+ }
227
+
228
+ /**
229
+ * 向量转角度(2D平面,相对于X轴正方向,逆时针为正)
230
+ */
231
+ private static vectorToAngle(vector: Vec3): number {
232
+ // 计算相对于X轴正方向的角度(弧度)
233
+ const rad = Math.atan2(vector.y, vector.x);
234
+ // 转换为度(Cocos Creator 使用度作为单位)
235
+ return rad * 180 / Math.PI;
236
+ }
237
+
238
+ /**
239
+ * 生成控制点
240
+ */
241
+ static getControlPoint2D(start: Vec2, end: Vec2, options?: {
242
+ heightScale?: number, // 曲线高度比例
243
+ maxHeight?: number, // 最大高度
244
+ direction?: number, // 1:向上, -1:向下
245
+ intensity?: number // 强度 0-1
246
+ }): Vec2 {
247
+ const { heightScale = 1, maxHeight= 200, direction = 1, intensity = 0.5 } = options || {};
248
+ const height = Math.min(Vec2.distance(start, end) * heightScale, maxHeight);
249
+
250
+ const mid = start.add(end).multiplyScalar(0.5);
251
+ const dir = end.subtract(start);
252
+ const perpendicular = v2(-dir.y, dir.x).normalize();
253
+
254
+ return mid.add(perpendicular.multiplyScalar(height * direction * intensity));
255
+ }
256
+
257
+ /**
258
+ * 通过角度生成控制点
259
+ */
260
+ public static getControlPointByAngle2D(start: Vec2, end: Vec2, options?: {
261
+ angle?: number,
262
+ distance?: number,
263
+ }): Vec2 {
264
+ const {angle = Math.PI / 2, distance = 200} = options || {};
265
+ const midPoint = start.add(end).multiplyScalar(0.5);
266
+
267
+ // 计算控制点位置
268
+ const x = midPoint.x + Math.cos(angle) * distance;
269
+ const y = midPoint.y + Math.sin(angle) * distance;
270
+
271
+ return v2(x, y);
272
+ }
273
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "ver": "4.0.24",
3
+ "importer": "typescript",
4
+ "imported": true,
5
+ "uuid": "5fb9e86a-42f3-44e1-82ed-9dc98ff04689",
6
+ "files": [],
7
+ "subMetas": {},
8
+ "userData": {}
9
+ }