class App
{
UI ui = new UI();
Hud hud = new Hud();
public App()
{
Hero hero = new Hero(20);
hero.StepOnTrap(3, StepOnTrapHandler);
}
private void StepOnTrapHandler(float per)
{
this.ui.UpdateHeroHpGauge(per);
this.hud.UpdateHeroHpGauge(per);
}
}
class Hero
{
private int maxHp;
private int hp;
public delegate void Del(float hp);
public Hero(int hp)
{
this.maxHp = hp;
this.hp = hp;
}
public void StepOnTrap(int damage, Del callback)
{
this.hp -= damage;
float per = (float)hp / maxHp;
callback(per);
}
}
class UI
{
public void UpdateHeroHpGauge(float per)
{
Console.WriteLine("UI 남은 체력: {0}%", per * 100);
}
}
class Hud
{
public void UpdateHeroHpGauge(float per)
{
Console.WriteLine("HUD 남은 체력: {0}%", per * 100);
}
}
class App
{
public App()
{
SCV scv = new SCV(100);
scv.Build(BuildCompleteHandler);
}
void BuildCompleteHandler(int id)
{
Console.WriteLine("complete!: {0}", id);
}
}
class SCV
{
int id;
public delegate void Del(int id);
public SCV(int id)
{
this.id = id;
}
public void Build(Del del)
{
del(id);
}
}