Skip to content

Commit

Permalink
Added Wei Yan
Browse files Browse the repository at this point in the history
  • Loading branch information
harry5z committed May 26, 2022
1 parent 3d0ae41 commit 4a68e5f
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 1 deletion.
11 changes: 11 additions & 0 deletions src/core/event/game/damage/SourceHeroOnDamageEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package core.event.game.damage;

import core.server.game.Damage;

public class SourceHeroOnDamageEvent extends AbstractDamageEvent {

public SourceHeroOnDamageEvent(Damage damage) {
super(damage);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package core.event.handlers.hero;

import core.event.game.damage.SourceHeroOnDamageEvent;
import core.event.handlers.AbstractEventHandler;
import core.player.PlayerCompleteServer;
import core.server.game.GameDriver;
import core.server.game.GameInternal;
import core.server.game.controllers.AbstractSingleStageGameController;
import core.server.game.controllers.mechanics.HealGameController;
import exceptions.server.game.GameFlowInterruptedException;

public class WeiYanRampageOnDamageEventHandler extends AbstractEventHandler<SourceHeroOnDamageEvent> {

public WeiYanRampageOnDamageEventHandler(PlayerCompleteServer player) {
super(player);
}

@Override
public Class<SourceHeroOnDamageEvent> getEventClass() {
return SourceHeroOnDamageEvent.class;
}

@Override
protected void handleIfActivated(SourceHeroOnDamageEvent event, GameDriver game) throws GameFlowInterruptedException {
if (this.player != event.getDamage().getSource()) {
return;
}

game.pushGameController(new AbstractSingleStageGameController() {
@Override
protected void handleOnce(GameInternal game) throws GameFlowInterruptedException {
if (!player.isDamaged()) {
// can't heal if source player at full health
return;
}

if (player.isPlayerInDistance(event.getDamage().getTarget(), game.getNumberOfPlayersAlive())) {
// heal up to the same as damage
int healAmount = Math.min(player.getHealthLimit() - player.getHealthCurrent(), event.getDamage().getAmount());
game.pushGameController(new HealGameController(player, player, healAmount));
}
}
});

}

}
2 changes: 2 additions & 0 deletions src/core/heroes/HeroPool.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import core.heroes.original.GanNing;
import core.heroes.original.SunQuan;
import core.heroes.original.WeiYan;
import core.heroes.original.YuJin;
import core.heroes.original.ZhugeliangRestingDragon;
import core.server.game.Game;
Expand All @@ -29,6 +30,7 @@ private HeroPool() {
this.nonEmperorHeroes = List.of(
new GanNing(),
new YuJin(),
new WeiYan(),
new ZhugeliangRestingDragon()
);
this.heroes = new ArrayList<>();
Expand Down
13 changes: 13 additions & 0 deletions src/core/heroes/original/WeiYan.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package core.heroes.original;

import core.heroes.skills.WeiYanRampageHeroSkill;

public class WeiYan extends AbstractHero {

private static final long serialVersionUID = 1L;

public WeiYan() {
super(4, Faction.SHU, Gender.MALE, "Wei Yan", new WeiYanRampageHeroSkill());
}

}
26 changes: 26 additions & 0 deletions src/core/heroes/skills/WeiYanRampageHeroSkill.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package core.heroes.skills;

import core.event.handlers.hero.WeiYanRampageOnDamageEventHandler;
import core.player.PlayerCompleteServer;
import core.server.game.GameInternal;

public class WeiYanRampageHeroSkill extends AbstractPassiveSkill {

private static final long serialVersionUID = 1L;

@Override
public String getName() {
return "Rampage";
}

@Override
public String getDescription() {
return "You heal 1HP for each 1 damage you deal to a player within 1 distance of you";
}

@Override
public void onGameReady(GameInternal game, PlayerCompleteServer owner) {
game.registerEventHandler(new WeiYanRampageOnDamageEventHandler(owner));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.Set;

import commands.game.client.DeathResolutionGameController;
import core.event.game.damage.SourceHeroOnDamageEvent;
import core.event.game.damage.TargetEquipmentCheckDamageEvent;
import core.player.PlayerCompleteServer;
import core.server.game.Damage;
Expand Down Expand Up @@ -58,8 +59,8 @@ protected void handleStage(GameInternal game, DamageStage stage) throws GameFlow
}
break;
case SOURCE_HERO_SKILLS_AFTER_DAMAGE:
// nothing here yet
this.nextStage();
game.emit(new SourceHeroOnDamageEvent(damage));
break;
case SKILLS_AFTER_DAMAGE:
// nothing here yet
Expand Down

0 comments on commit 4a68e5f

Please sign in to comment.