Projectile - noonmaru/psychics GitHub Wiki
๊ฐ์
์ง์ ํ ์๋๋ก ์ด๋ํ๋ ํฌ์ฌ์ฒด๋ฅผ ๋ฐ์ฌํ ์ ์์ต๋๋ค.
Tap์ FakeProjectile์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์์
์ง์ ํ ๋ฐฉํฅ์ผ๋ก ํฌ์ฌ์ฒด๋ฅผ ๋ฐ์ฌํ๊ณ ๋ถ๋ชํ ์ ์๊ฒ ํผํด๋ฅผ ์ ํ๋ ์ฝ๋์ ๋๋ค.
class MyAbility : ActiveAbility<AbilityConcept>() {
override fun onCast(target: Any?) {
val eyeLocation = esper.player.eyeLocation
val projectile = MyProjectile()
psychic.launchProjectile(eyeLocation, projectile) // ํฌ์ฌ์ฒด ๋ฐ์ฌ
projectile.velocity = eyeLocation.direction // ๋ณด๋ ๋ฐฉํฅ์ผ๋ก 1.0์ ์๋ ์ ์ฉ
}
// ํฌ์ฌ์ฒด ํด๋์ค
private inner class MyProjectile : PsychicProjectile(200, concept.range) {
override fun onMove(movement: Movement) {
//์ค์ ๋ฐ์ฌ์ฒด์ ์ด๋
// ํฑ๋ง๋ค y๋ฅผ ์กฐ๊ธ์ฉ ์ฌ๋ผ๊ฐ๊ฒ ์์
movement.to.y += 0.1
}
override fun onTrail(trail: Trail) {
// trail.velocity๋ ์๋๊ฐ ์ด๋ํ๊ฑฐ๋ ์์ง์ด์ง ์์๋ null์ด ํ ๋น๋ฉ๋๋ค.
trail.velocity?.let { velocity ->
val from = trail.from
val length = velocity.normalizeAndLength() // normalize and return length
// ์ง์ ๊ฒฝ๋ก ๊ดํต ๊ณ์ฐ
from.world.rayTrace(
from,
velocity, // normalized
length,
FluidCollisionMode.NEVER,
true,
1.0, // ๋ฐ์ฌ์ฒด ํฌ๊ธฐ
TargetFilter(esper.player) // Psychics ๊ธฐ๋ณธ ์ (hostile) ํํฐ
)?.let { rayTraceResult -> // ๊ดํต ๊ณ์ฐ ๊ฒฐ๊ณผ
val hitEntity = rayTraceResult.hitEntity
if (hitEntity is LivingEntity) { // auto check null
concept.damage?.let { damage -> // concept์ ์ ์๋ damage ์ฌ์ฉ
hitEntity.psychicDamage(damage)
}
}
remove() // ๋ฐ์ฌ์ฒด ์ ๊ฑฐ
}
val to = trail.to
to.world.spawnParticle(Particle.FIREWORKS_SPARK, to, 1) //ํํฐํด ์ํ
}
}
}
}
onMove ์ onTrail ํจ์์ ์ฐจ์ด
-
onMoveํจ์๋ ํฌ์ฌ์ฒด๊ฐ ์ด๋์ ์ด๋๊ฒฝ๋ก๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์๋ฒ ๋ด ์ค์ ๋ฐ์ฌ์ฒด์ ์์น๋ฅผ ํ์ํฉ๋๋ค. -
onTrailํจ์๋ ๋ฐ์ฌ์ฒด์ ์ด๋์ด ์ผ์ด๋ ํ 2 tick ๋ค์ ์์ง์์ผ๋ก ํธ์ถ๋ฉ๋๋ค. (trail)- ์๋ฒ์ ํด๋ผ์ด์ธํธ์ Entity ์์ง์ ์ฐจ์ด๋ Entity์ ์์ฐ์ค๋ฌ์ด ์์ง์์ ์ํด ํด๋ผ์ด์ธํธ์์ ํ๋ ์ ๋ณด๊ฐ์ด ์ผ์ด๋ 2 tick์ ๋์ ์ฐจ์ด๊ฐ ๋๊ฒ๋ฉ๋๋ค. ๊ทธ๋์ ์ค์ ํ์ ์ ํด๋ผ์ด์ธํธ์ ์ ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด 2 tick ๋ค์ ํธ์ถ๋๋
onTrailํจ์ ๋ด์์ ๊ณ์ฐํ๋๊ฑธ ์ถ์ฒ๋ฆฝ๋๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ์ Entity ์์ง์ ์ฐจ์ด๋ Entity์ ์์ฐ์ค๋ฌ์ด ์์ง์์ ์ํด ํด๋ผ์ด์ธํธ์์ ํ๋ ์ ๋ณด๊ฐ์ด ์ผ์ด๋ 2 tick์ ๋์ ์ฐจ์ด๊ฐ ๋๊ฒ๋ฉ๋๋ค. ๊ทธ๋์ ์ค์ ํ์ ์ ํด๋ผ์ด์ธํธ์ ์ ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด 2 tick ๋ค์ ํธ์ถ๋๋