fix shielding logic

This commit is contained in:
2025-01-25 00:06:48 +09:00
parent 2b2336bf70
commit ff4483e9cf
5 changed files with 28 additions and 10 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -416,7 +416,7 @@ function connectWebSocket() {
entity.children.at(0).visible = !e.dead
entity.children.at(1).visible = !e.dead
entity.children.at(2).visible = e.buffs.some((it) => it.id == 'exposed') // TODO: only works for Exposed now
entity.children.at(2).visible = !e.dead && e.buffs.some((it) => it.id == 'exposed') // TODO: only works for Exposed now
const animations = animationActions[e.id] ?? {}
const fadeIn = created ? 0 : 0.15
@@ -458,7 +458,7 @@ function connectWebSocket() {
hp.scale.x = percentageHp
hp.position.x = -(1 - percentageHp) / 2
entity.children.at(3).visible = e.id == playerId
entity.children.at(3).visible = !e.dead && e.id == playerId
// entity.children.at(5).visible = !e.dead && e.team == playerTeam
}
+7 -3
View File
@@ -270,7 +270,7 @@ export default class Entity {
}
applyBuff(id, sourceId = null) {
const buff = (this.game?.buffs ?? []).find((it) => it.id, id)
const buff = (this.game?.buffs ?? []).find((it) => it.id == id)
if (buff == null) { return false }
const index = this.buffs.findIndex((it) => it.id == id)
@@ -348,14 +348,14 @@ export default class Entity {
}
}
const buffs = (source?.buffs ?? [])
const buffs = this.buffs ?? []
const damageMultiplerBuffs = buffs.map((it) => it.getBuff).filter((it) => it != null && it.damageMultiplier != null)
const buffPassiveDamageMultiplier = damageMultiplerBuffs.reduce((it) => it.damageMultiplier - 1, 0)
const damageMultipler = 1 + buffPassiveDamageMultiplier + customMultipliers
let damage = amount * damageMultipler
if (damage <= 0) {
if (damage >= 0) {
buffs.filter((it) => it.shield != null && it.shield > 0).forEach((it) => {
if (damage <= 0) { return }
@@ -419,6 +419,10 @@ export default class Entity {
return { ...buffDefinition, ...entityBuff }
}
getBuffs() {
return this.buffs.map((it) => this.getBuff(it.id)).filter((it) => it != null)
}
hasBuff(id) {
if (this.dead) { return false }
+17 -3
View File
@@ -5,9 +5,9 @@ import Team from './team.js'
export default class Template {
static basilisk(overrides) {
return {
abilities: {},
abilities: { a: Ability.rangedAttack.id },
logic: this.#basiliskLogic(),
maxHealth: 3000,
maxHealth: 300,
model: 'models/generic-bam-placeholder.gltf',
radius: 180,
speed: 230,
@@ -55,9 +55,11 @@ export default class Template {
static #basiliskLogic() {
let diedOnTick = null
let targetInRangeSince = null
return function builtBasiliskLogic() {
const entity = this
const attackDelaySec = 2
const despawnDelaySec = 5
const despawnDelay = entity.game?.secToTick(despawnDelaySec) ?? 1
@@ -69,7 +71,19 @@ export default class Template {
if (entity.dead) { return }
const target = entity.closestTargetTo(entity.position, 500)
if (target == null) { return }
if (target == null) {
targetInRangeSince = null
return
}
if (targetInRangeSince == null) {
targetInRangeSince = timestamp
}
const attackDelay = entity.game?.secToTick(attackDelaySec) ?? 1
if (targetInRangeSince + attackDelay < timestamp) {
entity.attackAction(target.position)
}
const directionToTarget = target.position.clone().sub(entity.position).normalize()
const entityRotationVector = new Vector2(1, 0).rotateAround(new Vector2(), entity.rotation)