64 lines
1.2 KiB
GDScript
64 lines
1.2 KiB
GDScript
class_name BattleFighter
|
|
|
|
enum Status {
|
|
NORMAL,
|
|
DEAD,
|
|
}
|
|
|
|
var health:int
|
|
var maxHealth:int
|
|
var mp:int
|
|
var maxMp:int
|
|
var status:Status = Status.NORMAL
|
|
|
|
var attack:int = 10
|
|
var defense:int = 5
|
|
var speed:int = 5
|
|
var magic:int = 5
|
|
var luck:int = 1
|
|
|
|
func _init(
|
|
maxHealth:int = 100,
|
|
maxMp:int = 50,
|
|
) -> void:
|
|
self.maxHealth = maxHealth
|
|
self.health = maxHealth
|
|
self.maxMp = maxMp
|
|
self.mp = maxMp
|
|
|
|
func damage(amount:int) -> void:
|
|
assert(amount > 0)
|
|
if status == Status.DEAD:
|
|
return
|
|
health = max(health - amount, 0)
|
|
if health == 0:
|
|
status = Status.DEAD
|
|
|
|
func heal(amount:int) -> void:
|
|
assert(amount > 0)
|
|
if status == Status.DEAD:
|
|
return
|
|
health = min(health + amount, maxHealth)
|
|
|
|
func revive(health:int) -> void:
|
|
assert(health > 0)
|
|
if status != Status.DEAD:
|
|
return
|
|
health = min(health, maxHealth)
|
|
status = Status.NORMAL
|
|
self.health = health
|
|
|
|
func mpConsume(amount:int) -> void:
|
|
assert(amount > 0)
|
|
mp = max(mp - amount, 0)
|
|
|
|
func mpRestore(amount:int) -> void:
|
|
assert(amount > 0)
|
|
mp = min(mp + amount, maxMp)
|
|
|
|
func isCrit() -> bool:
|
|
# 10% chance of a crit
|
|
var chance = 10 + min(luck * 5, 60)
|
|
var roll = randi() % 100
|
|
return roll < chance
|