mirror of
https://github.com/Cola-Echo/memory-manager-concurrent.git
synced 2026-06-07 11:45:53 +00:00
feat: 支持 Lore-char 命名的总结世界书识别
- isSummaryBook 函数新增对 Lore-char/lore-char 的检测 - 修复启用记忆搜索助手时进度条重复显示总结世界书任务的问题 - 更新错误提示信息,说明支持的命名规则 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
187
games/laya-snakes/js/Snake.js
Normal file
187
games/laya-snakes/js/Snake.js
Normal file
@@ -0,0 +1,187 @@
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
/**
|
||||
* Snake extends laya.display.Sprite
|
||||
*/
|
||||
var Snake = (function (_super) {
|
||||
__extends(Snake, _super);
|
||||
function Snake(colorNum, x, y) {
|
||||
if (colorNum === void 0) { colorNum = Math.floor(Math.random() * (5 - 1 + 1) + 1); }
|
||||
if (x === void 0) { x = game.gameMainUI.map.width / 2; }
|
||||
if (y === void 0) { y = game.gameMainUI.map.height / 2; }
|
||||
_super.call(this);
|
||||
this.speedObj = { "slow": 2, "fast": 4, "rotation": 10 };
|
||||
this.speedNow = "slow";
|
||||
this.snakeInitSize = 0.45;
|
||||
this.snakeLength = 24;
|
||||
this.kill = 0;
|
||||
this.bodyArr = [];
|
||||
this.pathArr = [];
|
||||
this.eatBean = 0;
|
||||
this.bodyBeanNum = 6; //吃几颗豆增加一节身体
|
||||
this.bodyMaxNum = 500;
|
||||
this.initWidth = 40;
|
||||
this.AI = false;
|
||||
this.speed = this.speedObj[this.speedNow];
|
||||
this.targetR = this.rotation;
|
||||
this.colorNum = colorNum;
|
||||
this.visible = false;
|
||||
this.snakeSize = this.snakeInitSize;
|
||||
this.loadImage("images/head" + this.colorNum + ".png", 0, 0, 0, 0, new Handler(this, this.loaded, [x, y]));
|
||||
}
|
||||
Snake.prototype.loaded = function (x, y) {
|
||||
this.zOrder = 11000;
|
||||
this.initWidth = this.width;
|
||||
this.rotationTemp = this.rotation;
|
||||
this.snakeScale(this);
|
||||
this.pivot(this.width / 2, this.height / 2);
|
||||
this.pos(x, y);
|
||||
this.visible = true;
|
||||
this.bodySpace = Math.floor(this.width / 10 * 8);
|
||||
for (var index = 1; index <= this.getBodyNum(); index++) {
|
||||
this.addBody(this.x - index * this.bodySpace, this.y, this.rotation);
|
||||
}
|
||||
for (var index = 0; index < this.bodySpace * this.getBodyNum(); index++) {
|
||||
this.pathArr.push({
|
||||
x: this.x - index,
|
||||
y: this.y
|
||||
});
|
||||
}
|
||||
};
|
||||
Snake.prototype.move = function () {
|
||||
this.bodySpace = Math.floor(this.width / 10 * 8);
|
||||
this.headMove();
|
||||
this.bodyMove();
|
||||
this.speedChange();
|
||||
this.rotationChange();
|
||||
this.bodyCheck();
|
||||
};
|
||||
Snake.prototype.moveOut = function () {
|
||||
//碰到边界了
|
||||
};
|
||||
Snake.prototype.headMove = function () {
|
||||
var x = this.speed * Math.cos(this.rotation * Math.PI / 180);
|
||||
var y = this.speed * Math.sin(this.rotation * Math.PI / 180);
|
||||
this.rotation = this.rotationTemp;
|
||||
var pos = { x: this.x, y: this.y };
|
||||
var posBefore = { x: this.x, y: this.y };
|
||||
if (!(this.x + x >= game.gameMainUI.map.width - this.width / 2 || this.x + x <= this.width / 2)) {
|
||||
this.x += x;
|
||||
pos.x = this.x;
|
||||
}
|
||||
else {
|
||||
this.moveOut();
|
||||
}
|
||||
if (!(this.y + y >= game.gameMainUI.map.height - this.width / 2 || this.y + y <= this.width / 2)) {
|
||||
this.y += y;
|
||||
pos.y = this.y;
|
||||
}
|
||||
else {
|
||||
this.moveOut();
|
||||
}
|
||||
for (var index = 1; index <= this.speed; index++) {
|
||||
this.pathArr.unshift({
|
||||
x: index * Math.cos(Math.atan2(pos.y - posBefore.y, pos.x - posBefore.x)) + posBefore.x,
|
||||
y: index * Math.sin(Math.atan2(pos.y - posBefore.y, pos.x - posBefore.x)) + posBefore.y
|
||||
});
|
||||
}
|
||||
};
|
||||
Snake.prototype.bodyMove = function () {
|
||||
for (var index = 0; index < this.bodyArr.length; index++) {
|
||||
var element = this.bodyArr[index];
|
||||
if (this.pathArr[(index + 1) * this.bodySpace]) {
|
||||
element.rotation = Math.atan2(this.pathArr[(index + 1) * this.bodySpace]["y"] - element.y, this.pathArr[(index + 1) * this.bodySpace]["x"] - element.x) / Math.PI * 180;
|
||||
element.pos(this.pathArr[(index + 1) * this.bodySpace]["x"], this.pathArr[(index + 1) * this.bodySpace]["y"]);
|
||||
}
|
||||
if (this.pathArr.length > this.bodyArr.length * (1 + this.bodySpace)) {
|
||||
this.pathArr.pop();
|
||||
}
|
||||
}
|
||||
};
|
||||
Snake.prototype.snakeScale = function (ele, eleType) {
|
||||
if (eleType === void 0) { eleType = "head"; }
|
||||
var x = ele.x, y = ele.y, zOrder = ele.zOrder;
|
||||
ele.pivot(ele.width / 2, ele.height / 2);
|
||||
ele.graphics.clear();
|
||||
ele.loadImage("images/" + eleType + this.colorNum + ".png", 0, 0, this.initWidth * this.snakeSize, this.initWidth * this.snakeSize);
|
||||
ele.pivot(ele.width / 2, ele.height / 2);
|
||||
ele.pos(x, y);
|
||||
this.speedObj["rotation"] = 4 / this.snakeSize;
|
||||
};
|
||||
Snake.prototype.speedChange = function () {
|
||||
this.speed = this.speedNow == 'slow' ?
|
||||
(this.speed > this.speedObj[this.speedNow] ? this.speed - 1 : this.speedObj[this.speedNow])
|
||||
: (this.speed < this.speedObj[this.speedNow] ? this.speed + 1 : this.speedObj[this.speedNow]);
|
||||
};
|
||||
Snake.prototype.rotationChange = function () {
|
||||
var perRotation = Math.abs(this.targetR - this.rotationTemp) < this.speedObj['rotation'] ? Math.abs(this.targetR - this.rotationTemp) : this.speedObj['rotation'];
|
||||
if (this.targetR < -0 && this.rotationTemp > 0 && Math.abs(this.targetR) + this.rotationTemp > 180) {
|
||||
perRotation = (180 - this.rotationTemp) + (180 + this.targetR) < this.speedObj['rotation'] ? (180 - this.rotationTemp) + (180 + this.targetR) : this.speedObj['rotation'];
|
||||
this.rotationTemp += perRotation;
|
||||
}
|
||||
else {
|
||||
this.rotationTemp += this.targetR > this.rotationTemp && Math.abs(this.targetR - this.rotationTemp) <= 180 ? perRotation : -perRotation;
|
||||
}
|
||||
this.rotationTemp = Math.abs(this.rotationTemp) > 180 ? (this.rotationTemp > 0 ? this.rotationTemp - 360 : this.rotationTemp + 360) : this.rotationTemp;
|
||||
};
|
||||
Snake.prototype.addBody = function (x, y, r) {
|
||||
var _this = this;
|
||||
var body = new Sprite();
|
||||
var zOrder = this.zOrder - this.bodyArr.length - 1;
|
||||
body.visible = false;
|
||||
body.alpha = 0;
|
||||
body.zOrder = zOrder;
|
||||
body.loadImage("images/body" + this.colorNum + ".png", 0, 0, 0, 0, new Handler(this, function () {
|
||||
_this.snakeScale(body, "body");
|
||||
body.pos(x, y);
|
||||
body.rotation = r;
|
||||
game.gameMainUI.map.addChild(body);
|
||||
body.visible = true;
|
||||
body.alpha = 1;
|
||||
}));
|
||||
this.bodyArr.push(body);
|
||||
};
|
||||
Snake.prototype.bodyCheck = function () {
|
||||
var _this = this;
|
||||
if (this.eatBean >= this.bodyBeanNum && this.bodyArr.length < this.bodyMaxNum) {
|
||||
var addBodyNum = Math.floor(this.eatBean / this.bodyBeanNum);
|
||||
var x = this.bodyArr[this.bodyArr.length - 1].x;
|
||||
var y = this.bodyArr[this.bodyArr.length - 1].y;
|
||||
var r = this.bodyArr[this.bodyArr.length - 1].rotation;
|
||||
for (var index = 0; index < addBodyNum; index++) {
|
||||
this.addBody(this.bodySpace * Math.cos(r * Math.PI / 180), this.bodySpace * Math.sin(r * Math.PI / 180), r);
|
||||
}
|
||||
for (var index = 0; index < this.bodySpace * addBodyNum; index++) {
|
||||
this.pathArr.push({
|
||||
x: this.x - index * Math.cos(r * Math.PI / 180),
|
||||
y: this.y - index * Math.sin(r * Math.PI / 180)
|
||||
});
|
||||
}
|
||||
this.eatBean = this.eatBean % this.bodyBeanNum;
|
||||
if (this.snakeSize < 1) {
|
||||
this.snakeSize = this.snakeInitSize + (1 - this.snakeInitSize) / this.bodyMaxNum * this.bodyArr.length;
|
||||
this.bodyArr.forEach(function (element) {
|
||||
_this.snakeScale(element, "body");
|
||||
});
|
||||
// for (let index = this.bodyArr.length - 1; index >= 0; index--) {
|
||||
// this.snakeScale(this.bodyArr[index], "body")
|
||||
// }
|
||||
this.snakeScale(this);
|
||||
}
|
||||
else {
|
||||
this.snakeSize = 1;
|
||||
}
|
||||
}
|
||||
};
|
||||
Snake.prototype.getBodyNum = function () {
|
||||
return Math.floor(this.snakeLength / this.bodyBeanNum);
|
||||
};
|
||||
Snake.prototype.reverseRotation = function () {
|
||||
this.targetR = this.rotation > 0 ? this.rotation - 180 : this.rotation + 180;
|
||||
};
|
||||
return Snake;
|
||||
}(laya.display.Sprite));
|
||||
//# sourceMappingURL=Snake.js.map
|
||||
Reference in New Issue
Block a user