400 lines
11 KiB
JavaScript
400 lines
11 KiB
JavaScript
var sviv_Sprite_Character_initialize = Sprite_Character.prototype.initialize;
|
|
Sprite_Character.prototype.initialize = function (character) {
|
|
sviv_Sprite_Character_initialize.call(this, character);
|
|
|
|
if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") {
|
|
if (this._character.constructor.name == "Game_Player") {
|
|
var sp = new Sprite_Gauge_H();
|
|
sp.y = -70;
|
|
this.addChild(sp);
|
|
|
|
// 最大5まで重なって出る
|
|
for (var i = 0; i < SURVIVOR_CONST.PLAYER_DAMAGE_SPRITES; i++) {
|
|
var sp = new Sprite_CBRPlayerDamage(i);
|
|
this._damage = sp;
|
|
this.addChild(sp);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
//HPゲージ
|
|
function Sprite_Gauge_H() {
|
|
this.initialize(...arguments);
|
|
}
|
|
|
|
Sprite_Gauge_H.prototype = Object.create(Sprite.prototype);
|
|
Sprite_Gauge_H.prototype.constructor = Sprite_Gauge_H;
|
|
|
|
Sprite_Gauge_H.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
|
|
this.createBitmap();
|
|
this.anchor.x = 0.5;
|
|
this.anchor.y = 0;
|
|
|
|
this.setup();
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.createBitmap = function () {
|
|
const width = this.bitmapWidth();
|
|
const height = this.bitmapHeight();
|
|
this.bitmap = new Bitmap(width, height);
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.bitmapWidth = function () {
|
|
return 96;
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.bitmapHeight = function () {
|
|
return 32;
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.gaugeHeight = function () {
|
|
return 12;
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.gaugeX = function () {
|
|
return 0;
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.setup = function () {
|
|
this._value = null;
|
|
this._maxValue = null;
|
|
this.updateBitmap();
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
this.updateBitmap();
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.updateBitmap = function () {
|
|
if (this._value != this.currentValue()) {
|
|
this._value = this.currentValue();
|
|
this._maxValue = this.currentMaxValue();
|
|
|
|
this.redraw();
|
|
}
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.currentValue = function () {
|
|
return $gameTemp.SURVIVOR_player_data.nowhp;
|
|
};
|
|
Sprite_Gauge_H.prototype.currentMaxValue = function () {
|
|
return $gameTemp.SURVIVOR_player_data.maxhp;
|
|
};
|
|
Sprite_Gauge_H.prototype.gaugeBackColor = function () {
|
|
return ColorManager.gaugeBackColor();
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.gaugeColor1 = function () {
|
|
return ColorManager.hpGaugeColor1();
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.redraw = function () {
|
|
this.bitmap.clear();
|
|
const currentValue = this.currentValue();
|
|
if (!isNaN(currentValue)) {
|
|
this.drawGauge();
|
|
}
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.drawGauge = function () {
|
|
const gaugewidth = this.bitmapWidth();
|
|
const gaugeHeight = this.gaugeHeight();
|
|
this.drawGaugeRect(0, 0, gaugewidth, gaugeHeight);
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.drawGaugeRect = function (x, y, width, height) {
|
|
const rate = this.gaugeRate();
|
|
const fillW = Math.floor((width - 2) * rate);
|
|
const fillH = height - 2;
|
|
const color0 = this.gaugeBackColor();
|
|
const color1 = this.gaugeColor1();
|
|
this.bitmap.fillRect(x, y, width, height, color0);
|
|
this.bitmap.gradientFillRect(x + 1, y + 1, fillW, fillH, color1, color1);
|
|
};
|
|
|
|
Sprite_Gauge_H.prototype.gaugeRate = function () {
|
|
const value = this._value;
|
|
const maxValue = this._maxValue;
|
|
return maxValue > 0 ? value / maxValue : 0;
|
|
};
|
|
|
|
//経験値ゲージ
|
|
//HPゲージ
|
|
function Sprite_Gauge_K() {
|
|
this.initialize(...arguments);
|
|
}
|
|
|
|
Sprite_Gauge_K.prototype = Object.create(Sprite.prototype);
|
|
Sprite_Gauge_K.prototype.constructor = Sprite_Gauge_K;
|
|
|
|
Sprite_Gauge_K.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
|
|
this.createBitmap();
|
|
this.anchor.x = 0.5;
|
|
this.anchor.y = 0;
|
|
|
|
this.setup();
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.createBitmap = function () {
|
|
const width = this.bitmapWidth();
|
|
const height = this.bitmapHeight();
|
|
this.bitmap = new Bitmap(width, height);
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.bitmapWidth = function () {
|
|
return Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN - 40;
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.bitmapHeight = function () {
|
|
return 48;
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.gaugeHeight = function () {
|
|
return 24;
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.gaugeX = function () {
|
|
return 0;
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.setup = function () {
|
|
this._value = null;
|
|
this._maxValue = null;
|
|
this.updateBitmap();
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
this.updateBitmap();
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.updateBitmap = function () {
|
|
if (this._value != this.currentValue()) {
|
|
this._value = this.currentValue();
|
|
this._maxValue = this.currentMaxValue();
|
|
|
|
this.redraw();
|
|
}
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.currentValue = function () {
|
|
// return this.currentMaxValue() - $gameActors.actor(1).nextRequiredExp();
|
|
return $gameTemp.SURVIVOR_player_data.now_exp;
|
|
};
|
|
Sprite_Gauge_K.prototype.currentMaxValue = function () {
|
|
// var ac = $gameActors.actor(1);
|
|
// return ac.expForLevel(ac._level + 1) - ac.expForLevel(ac._level);
|
|
return $gameTemp.SURVIVOR_next_exp($gameTemp.SURVIVOR_player_data.level);
|
|
};
|
|
Sprite_Gauge_K.prototype.gaugeBackColor = function () {
|
|
return ColorManager.gaugeBackColor();
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.gaugeColor1 = function () {
|
|
return "#a32424ff";
|
|
};
|
|
Sprite_Gauge_K.prototype.gaugeColor2 = function () {
|
|
return "#f73839";
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.redraw = function () {
|
|
this.bitmap.clear();
|
|
const currentValue = this.currentValue();
|
|
if (!isNaN(currentValue)) {
|
|
this.drawGauge();
|
|
}
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.drawGauge = function () {
|
|
const gaugewidth = this.bitmapWidth();
|
|
const gaugeHeight = this.gaugeHeight();
|
|
this.drawGaugeRect(0, 0, gaugewidth, gaugeHeight);
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.drawGaugeRect = function (x, y, width, height) {
|
|
const rate = this.gaugeRate();
|
|
const fillW = Math.floor((width - 2) * rate);
|
|
const fillH = height - 2;
|
|
const color0 = this.gaugeBackColor();
|
|
const color1 = this.gaugeColor1();
|
|
const color2 = this.gaugeColor2();
|
|
this.bitmap.fillRect(x, y, width, height, color0);
|
|
this.bitmap.gradientFillRect(x + 1, y + 1, fillW, fillH, color1, color2);
|
|
};
|
|
|
|
Sprite_Gauge_K.prototype.gaugeRate = function () {
|
|
const value = this._value;
|
|
const maxValue = this._maxValue;
|
|
return maxValue > 0 ? value / maxValue : 0;
|
|
};
|
|
|
|
// #################### 経験値 ######################
|
|
|
|
function Sprite_Keiken() {
|
|
this.initialize(...arguments);
|
|
}
|
|
|
|
Sprite_Keiken.prototype = Object.create(Sprite.prototype);
|
|
Sprite_Keiken.prototype.constructor = Sprite_Keiken;
|
|
|
|
Sprite_Keiken.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
|
|
this.anchor.x = 0.5;
|
|
this.anchor.y = 0.5;
|
|
|
|
this.scale.x = 0.3;
|
|
this.scale.y = 0.3;
|
|
this.speed = 0;
|
|
|
|
this.disX = $gameMap._parallaxX;
|
|
this.disY = $gameMap._parallaxY;
|
|
|
|
this.setCharacterBitmap();
|
|
};
|
|
//場所移動するだけでいいや
|
|
Sprite_Keiken.prototype.update = function () {
|
|
if (this.death) {
|
|
return;
|
|
}
|
|
Sprite.prototype.update.call(this);
|
|
|
|
this.x -= ($gameMap._parallaxX - this.disX) * 48;
|
|
this.disX = $gameMap._parallaxX;
|
|
this.y -= ($gameMap._parallaxY - this.disY) * 48;
|
|
this.disY = $gameMap._parallaxY;
|
|
|
|
if (!this.speed) {
|
|
var kyori = (this.x - Graphics.boxWidth / 2) * (this.x - Graphics.boxWidth / 2);
|
|
kyori += (this.y - Graphics.boxHeight / 2) * (this.y - Graphics.boxHeight / 2);
|
|
kyori = Math.sqrt(kyori);
|
|
//プレイヤーが接触したら
|
|
if (kyori < $gameTemp.SURVIVOR_player_data.collect_range) {
|
|
this.speed = -8;
|
|
}
|
|
} else {
|
|
//atan2使うと微妙に遅いからx^2 + y^2 = r^2 、y=kxを使ってspeed(移動させたい距離r)として動かしたいxとyの大きさを導く
|
|
var sa_x = this.x - Graphics.boxWidth / 2;
|
|
var sa_y = this.y - Graphics.boxHeight / 2;
|
|
if (this.speed < 0) {
|
|
sa_x *= -1;
|
|
sa_y *= -1;
|
|
}
|
|
var k = sa_y / sa_x;
|
|
|
|
var x = Math.sqrt((this.speed * this.speed) / (1 + k * k));
|
|
|
|
//xを基に導くけど2乗してるから+-どっちかわからん
|
|
if (0 < sa_x) {
|
|
x = -x;
|
|
}
|
|
|
|
var y = k * x;
|
|
|
|
//xかyどちらかが中央超えたら削除
|
|
if (sa_x * (sa_x + x) < 0 || sa_y * (sa_y + y) < 0) {
|
|
//this.visible = false;
|
|
this.death = true;
|
|
this.speed = 0;
|
|
survivorState.keikenDel.push(this.spriteId);
|
|
if (!survivorState.se_cool) {
|
|
AudioManager.playSe({ name: "Item1", volume: 20, pitch: 150, pan: 0 });
|
|
survivorState.se_cool = 5;
|
|
}
|
|
}
|
|
this.x += x;
|
|
this.y += y;
|
|
this.speed += 0.2;
|
|
}
|
|
};
|
|
|
|
Sprite_Keiken.prototype.setCharacterBitmap = function () {
|
|
this.bitmap = ImageManager.loadCharacter("!Door2");
|
|
this.setFrame(48 * 3, 48 * 2, 48, 48);
|
|
};
|
|
|
|
function Sprite_CBRPlayerDamage() {
|
|
this.initialize(...arguments);
|
|
}
|
|
|
|
Sprite_CBRPlayerDamage.prototype = Object.create(Sprite.prototype);
|
|
Sprite_CBRPlayerDamage.prototype.constructor = Sprite_CBRPlayerDamage;
|
|
|
|
Sprite_CBRPlayerDamage.prototype.initialize = function (index) {
|
|
Sprite.prototype.initialize.call(this);
|
|
|
|
this.index = index;
|
|
this.anchor.x = 0.5;
|
|
this.visible = false;
|
|
|
|
this._damages = [];
|
|
this.duration = 0;
|
|
|
|
this.create();
|
|
};
|
|
|
|
Sprite_CBRPlayerDamage.prototype.create = function () {
|
|
//まぁ最大で3桁でしょ
|
|
for (var i = 0; i < 3; i++) {
|
|
var sp = new Sprite();
|
|
sp.bitmap = ImageManager.loadSystem("Damage");
|
|
sp.x = 12 * i;
|
|
sp.scale.x = 1;
|
|
sp.scale.y = 1;
|
|
this._damages.push(sp);
|
|
this.addChild(sp);
|
|
}
|
|
};
|
|
|
|
Sprite_CBRPlayerDamage.prototype.setFrame = function (dm) {
|
|
if (dm < 10) {
|
|
this.x = -12 * 2.5;
|
|
this._damages[0].visible = false;
|
|
this._damages[1].visible = false;
|
|
|
|
this._damages[2].setFrame(12 * dm, 0, 12, 16);
|
|
} else if (dm < 100) {
|
|
this.x = -12 * 2;
|
|
var temp = Math.floor(dm / 10);
|
|
this._damages[0].visible = false;
|
|
this._damages[1].visible = true;
|
|
|
|
this._damages[1].setFrame(12 * temp, 0, 12, 16);
|
|
this._damages[2].setFrame(12 * Math.floor(dm - temp * 10), 0, 12, 16);
|
|
} else {
|
|
this.x = -12 * 1.5;
|
|
var temp = Math.floor(dm / 100);
|
|
this._damages[0].setFrame(12 * temp, 0, 12, 16);
|
|
dm -= temp * 100;
|
|
var temp = Math.floor(dm / 10);
|
|
this._damages[1].setFrame(12 * temp, 0, 12, 16);
|
|
this._damages[2].setFrame(12 * Math.floor(dm - temp * 10), 0, 12, 16);
|
|
}
|
|
};
|
|
|
|
Sprite_CBRPlayerDamage.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
|
|
// var d = $gameTemp.SURVIVOR_player_data.disp_damages[this.index];
|
|
// if (d && d.visible) {
|
|
// //最初の時
|
|
// if (d.duration == SURVIVOR_CONST.DAMAGE_DURATION) {
|
|
// this.setFrame(d.dm);
|
|
// this.visible = true;
|
|
// }
|
|
|
|
// this.y = -Math.sin((3.14 / SURVIVOR_CONST.DAMAGE_DURATION) * (SURVIVOR_CONST.DAMAGE_DURATION - d.duration)) * SURVIVOR_CONST.DAMAGE_DURATION;
|
|
// d.duration--;
|
|
// if (d.duration < 0) {
|
|
// this.visible = false;
|
|
// }
|
|
// } else {
|
|
this.visible = false;
|
|
// }
|
|
};
|