Improving the battle, fixing bugs
This commit is contained in:
parent
92929118d5
commit
33c2b313af
@ -487,6 +487,9 @@ void Character::draw(Renderer& renderer) {
|
|||||||
hitSparkEmitter.draw(renderer, 1.0f, Environment::width, Environment::height, false);
|
hitSparkEmitter.draw(renderer, 1.0f, Environment::width, Environment::height, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderer.RenderUniform1f("uAlpha", 1.0f);
|
||||||
|
glDisable(GL_BLEND);
|
||||||
|
|
||||||
if (!state.enabled) return;
|
if (!state.enabled) return;
|
||||||
|
|
||||||
if (state.useGpuSkinning) {
|
if (state.useGpuSkinning) {
|
||||||
@ -609,6 +612,22 @@ bool Character::prepareGpuSkinning() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Character::tryAttackCombo()
|
||||||
|
{
|
||||||
|
std::cout << "Try Attack Combo" << std::endl;
|
||||||
|
auto it = animations.find(state.currentState);
|
||||||
|
if (it == animations.end()) return;
|
||||||
|
|
||||||
|
auto& anim = it->second;
|
||||||
|
|
||||||
|
if (static_cast<int>(anim.currentFrame) >= 20 &&
|
||||||
|
(state.currentState == AnimationState::ACTION_ATTACK ||
|
||||||
|
state.currentState == AnimationState::ACTION_ATTACK_2)) {
|
||||||
|
std::cout << "Try Attack Combo Success" << std::endl;
|
||||||
|
anim.currentFrame = anim.model.startingFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Character::drawAttachedWeapon(Renderer& renderer) {
|
void Character::drawAttachedWeapon(Renderer& renderer) {
|
||||||
if (!state.showWeapon) return;
|
if (!state.showWeapon) return;
|
||||||
if (weaponMesh.data.PositionData.size() == 0 || !weaponTexture) return;
|
if (weaponMesh.data.PositionData.size() == 0 || !weaponTexture) return;
|
||||||
|
|||||||
@ -65,6 +65,8 @@ public:
|
|||||||
// ---- Reset ----
|
// ---- Reset ----
|
||||||
void resetPlayerAfterDeath();
|
void resetPlayerAfterDeath();
|
||||||
|
|
||||||
|
void tryAttackCombo();
|
||||||
|
|
||||||
// ---- Damage ----
|
// ---- Damage ----
|
||||||
void applyDamage(float damageAmount, const Eigen::Vector3f& attackDirection = Eigen::Vector3f::Zero(), int attackerIndex = CharacterState::kNoTarget);
|
void applyDamage(float damageAmount, const Eigen::Vector3f& attackDirection = Eigen::Vector3f::Zero(), int attackerIndex = CharacterState::kNoTarget);
|
||||||
|
|
||||||
|
|||||||
@ -758,7 +758,9 @@ namespace ZL
|
|||||||
((loc->player->state.attackTargetIndex >= 0) &&
|
((loc->player->state.attackTargetIndex >= 0) &&
|
||||||
(loc->npcs[loc->player->state.attackTargetIndex]->state.hp <= 0)))
|
(loc->npcs[loc->player->state.attackTargetIndex]->state.hp <= 0)))
|
||||||
&&
|
&&
|
||||||
loc->player->isMoving() == false) {
|
loc->player->isMoving() == false
|
||||||
|
&&
|
||||||
|
loc->player->getHp() > 0) {
|
||||||
loc->player->state.attackTargetIndex = attackerIndex;
|
loc->player->state.attackTargetIndex = attackerIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1661,6 +1661,8 @@ namespace ZL
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int lastPlayerAttackTarget = player->state.attackTargetIndex;
|
||||||
|
|
||||||
player->state.attackTargetIndex = CharacterState::kNoTarget;
|
player->state.attackTargetIndex = CharacterState::kNoTarget;
|
||||||
|
|
||||||
// Unproject click to ground plane (y=0) for Viola's walk target
|
// Unproject click to ground plane (y=0) for Viola's walk target
|
||||||
@ -1723,6 +1725,7 @@ namespace ZL
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
//std::cout << "Raycast npc step 1" << std::endl;
|
||||||
// Check if we clicked on an NPC
|
// Check if we clicked on an NPC
|
||||||
Character* clickedNpc = raycastNpcs(camPos, rayDir);
|
Character* clickedNpc = raycastNpcs(camPos, rayDir);
|
||||||
if (clickedNpc && player) {
|
if (clickedNpc && player) {
|
||||||
@ -1735,11 +1738,20 @@ namespace ZL
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (npcIndex != -1) {
|
if (npcIndex != -1) {
|
||||||
|
//std::cout << "Raycast npc step 2" << std::endl;
|
||||||
state.targetInteractiveObjectIndex = -1;
|
state.targetInteractiveObjectIndex = -1;
|
||||||
state.targetTeleportZoneIndex = -1;
|
state.targetTeleportZoneIndex = -1;
|
||||||
|
|
||||||
if (clickedNpc->state.canAttack) {
|
if (clickedNpc->state.canAttack) {
|
||||||
|
//std::cout << "Raycast npc step 3" << std::endl;
|
||||||
|
//std::cout << "player->state.attackTargetIndex=" << player->state.attackTargetIndex << std::endl;
|
||||||
|
//std::cout << "npcIndex=" << npcIndex << std::endl;
|
||||||
// Hostile NPC: combat logic walks the player in via attackTargetIndex.
|
// Hostile NPC: combat logic walks the player in via attackTargetIndex.
|
||||||
|
if (lastPlayerAttackTarget == npcIndex)
|
||||||
|
{
|
||||||
|
//std::cout << "Raycast npc step 4" << std::endl;
|
||||||
|
player->tryAttackCombo();
|
||||||
|
}
|
||||||
player->state.attackTargetIndex = npcIndex;
|
player->state.attackTargetIndex = npcIndex;
|
||||||
state.targetInteractNpcIndex = -1;
|
state.targetInteractNpcIndex = -1;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user