| 1104 | } |
| 1105 | |
| 1106 | void CreatureKill(ItemInfo* creatureItem, int creatureAnimNumber, int playerExtraAnimNumber, int creatureState, int playerKillState) |
| 1107 | { |
| 1108 | if (!Objects[ID_LARA_EXTRA_ANIMS].loaded || |
| 1109 | Objects[ID_LARA_EXTRA_ANIMS].Animations.size() <= playerExtraAnimNumber || Objects[ID_LARA_EXTRA_ANIMS].Animations[playerExtraAnimNumber].Keyframes.size() <= 1 || |
| 1110 | Objects[creatureItem->ObjectNumber].Animations.size() <= creatureAnimNumber || Objects[creatureItem->ObjectNumber].Animations[creatureAnimNumber].Keyframes.size() <= 1) |
| 1111 | { |
| 1112 | TENLog(fmt::format("Impossible to perform kill animation for object {}: animation data missing.", GetObjectName(creatureItem->ObjectNumber)), LogLevel::Warning); |
| 1113 | return; |
| 1114 | } |
| 1115 | |
| 1116 | auto& playerItem = *LaraItem; |
| 1117 | auto& player = GetLaraInfo(playerItem); |
| 1118 | |
| 1119 | SetAnimation(creatureItem, creatureAnimNumber); |
| 1120 | SetAnimation(playerItem, ID_LARA_EXTRA_ANIMS, playerExtraAnimNumber); |
| 1121 | |
| 1122 | if (creatureState != NO_VALUE) |
| 1123 | creatureItem->Animation.ActiveState = creatureItem->Animation.TargetState = creatureState; |
| 1124 | |
| 1125 | if (playerKillState != NO_VALUE) |
| 1126 | playerItem.Animation.ActiveState = playerItem.Animation.TargetState = playerKillState; |
| 1127 | |
| 1128 | playerItem.Pose = creatureItem->Pose; |
| 1129 | playerItem.Animation.IsAirborne = false; |
| 1130 | playerItem.Animation.Velocity = Vector3::Zero; |
| 1131 | |
| 1132 | if (creatureItem->RoomNumber != playerItem.RoomNumber) |
| 1133 | ItemNewRoom(playerItem.Index, creatureItem->RoomNumber); |
| 1134 | |
| 1135 | AnimateItem(playerItem); |
| 1136 | playerItem.HitPoints = -1; |
| 1137 | player.Control.HandStatus = HandStatus::Busy; |
| 1138 | player.Control.Weapon.GunType = LaraWeaponType::None; |
| 1139 | player.ExtraAnim = 1; |
| 1140 | player.HitDirection = -1; |
| 1141 | |
| 1142 | Camera.pos.RoomNumber = playerItem.RoomNumber; |
| 1143 | Camera.flags = CF_FOLLOW_CENTER; |
| 1144 | Camera.targetAngle = ANGLE(170.0f); |
| 1145 | Camera.targetElevation = ANGLE(-25.0f); |
| 1146 | Camera.targetDistance = BLOCK(2); |
| 1147 | } |
| 1148 | |
| 1149 | short CreatureEffect2(ItemInfo* item, const CreatureBiteInfo& bite, short velocity, short angle, std::function<CreatureEffectFunction> func) |
| 1150 | { |
no test coverage detected