mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-20 07:53:51 +00:00
[Client] Clean up parts of LocalPlayer and DedicatedPlayer
This commit is contained in:
parent
a650683bae
commit
c05c456b11
3 changed files with 25 additions and 125 deletions
|
@ -181,35 +181,6 @@ MWWorld::ManualRef *DedicatedPlayer::getRef()
|
||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESM::Position Slerp(ESM::Position start, ESM::Position end, float percent)
|
|
||||||
{
|
|
||||||
// dot product - the cosine of the angle between 2 vectors.
|
|
||||||
float dot = start.asVec3() * end.asVec3();
|
|
||||||
// clamp it to be in the range of Acos()
|
|
||||||
// This may be unnecessary, but floating point
|
|
||||||
// precision can be a fickle mistress.
|
|
||||||
dot = boost::algorithm::clamp(dot, -1.0f, 1.0f);
|
|
||||||
// acos(dot) returns the angle between start and end,
|
|
||||||
// And multiplying that by percent returns the angle between
|
|
||||||
// start and the final result.
|
|
||||||
float theta = acos(dot) * percent;
|
|
||||||
osg::Vec3f relativeVec = end.asVec3() - start.asVec3() * dot;
|
|
||||||
relativeVec.normalize(); // Orthonormal basis
|
|
||||||
|
|
||||||
// result
|
|
||||||
osg::Vec3f tmp ((start.asVec3() * cos(theta)) + (relativeVec * sin(theta)));
|
|
||||||
ESM::Position result;
|
|
||||||
|
|
||||||
result.pos[0] = tmp.x();
|
|
||||||
result.pos[1] = tmp.y();
|
|
||||||
result.pos[2] = tmp.z();
|
|
||||||
|
|
||||||
result.rot[0] = start.rot[0];
|
|
||||||
result.rot[1] = start.rot[1];
|
|
||||||
result.rot[2] = result.rot[2];
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DedicatedPlayer::move(float dt)
|
void DedicatedPlayer::move(float dt)
|
||||||
{
|
{
|
||||||
if (state != 2) return;
|
if (state != 2) return;
|
||||||
|
@ -340,74 +311,6 @@ void DedicatedPlayer::updateEquipment()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string DedicatedPlayer::getAnim()
|
|
||||||
{
|
|
||||||
static string anim;
|
|
||||||
static string animDir;
|
|
||||||
static string animWeap;
|
|
||||||
|
|
||||||
MWMechanics::NpcStats *npcStats = &ptr.getClass().getNpcStats(ptr);
|
|
||||||
|
|
||||||
if (movementFlags & MWMechanics::CreatureStats::Flag_Run)
|
|
||||||
anim = "run";
|
|
||||||
else if (movementFlags & MWMechanics::CreatureStats::Flag_Sneak)
|
|
||||||
anim = "sneak";
|
|
||||||
else
|
|
||||||
anim = "walk";
|
|
||||||
|
|
||||||
if (movementAnim != 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (movementAnim == 3)
|
|
||||||
animDir = "forward";
|
|
||||||
else if (movementAnim == 4)
|
|
||||||
animDir = "back";
|
|
||||||
else if (movementAnim == 2)
|
|
||||||
animDir = "left";
|
|
||||||
else if (movementAnim == 1)
|
|
||||||
animDir = "right";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
anim = "idle";
|
|
||||||
animDir = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (npcStats->getDrawState() == MWMechanics::DrawState_Weapon)
|
|
||||||
{
|
|
||||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore(ptr);
|
|
||||||
MWWorld::ContainerStoreIterator weaponSlot = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
|
||||||
|
|
||||||
if (weaponSlot != invStore.end() && weaponSlot->getTypeName() == typeid(ESM::Weapon).name())
|
|
||||||
{
|
|
||||||
int type = weaponSlot->get<ESM::Weapon>()->mBase->mData.mType;
|
|
||||||
if (type == ESM::Weapon::ShortBladeOneHand ||
|
|
||||||
type == ESM::Weapon::LongBladeOneHand ||
|
|
||||||
type == ESM::Weapon::BluntOneHand ||
|
|
||||||
type == ESM::Weapon::AxeOneHand /*||
|
|
||||||
type == ESM::Weapon::MarksmanThrown ||
|
|
||||||
type == ESM::Weapon::MarksmanCrossbow ||
|
|
||||||
type == ESM::Weapon::MarksmanBow*/)
|
|
||||||
animWeap = "1h";
|
|
||||||
else if (type == ESM::Weapon::LongBladeTwoHand ||
|
|
||||||
type == ESM::Weapon::BluntTwoClose ||
|
|
||||||
type == ESM::Weapon::AxeTwoHand)
|
|
||||||
animWeap = "2c";
|
|
||||||
else if (type == ESM::Weapon::BluntTwoWide ||
|
|
||||||
type == ESM::Weapon::SpearTwoWide)
|
|
||||||
animWeap = "2w";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
animWeap = "hh";
|
|
||||||
}
|
|
||||||
else if (movementAnim == 0 && npcStats->getDrawState() == MWMechanics::DrawState_Spell)
|
|
||||||
animWeap = "spell";
|
|
||||||
else
|
|
||||||
animWeap = "";
|
|
||||||
|
|
||||||
return (anim + animDir + animWeap);
|
|
||||||
}
|
|
||||||
|
|
||||||
DedicatedPlayer *Players::getPlayer(const MWWorld::Ptr &ptr)
|
DedicatedPlayer *Players::getPlayer(const MWWorld::Ptr &ptr)
|
||||||
{
|
{
|
||||||
std::map <RakNet::RakNetGUID, DedicatedPlayer *>::iterator it = players.begin();
|
std::map <RakNet::RakNetGUID, DedicatedPlayer *>::iterator it = players.begin();
|
||||||
|
|
|
@ -2,17 +2,19 @@
|
||||||
// Created by koncord on 02.01.16.
|
// Created by koncord on 02.01.16.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef OPENMW_PLAYER_HPP
|
#ifndef OPENMW_DEDICATEDPLAYER_HPP
|
||||||
#define OPENMW_PLAYER_HPP
|
#define OPENMW_DEDICATEDPLAYER_HPP
|
||||||
|
|
||||||
#include <components/esm/loadnpc.hpp>
|
|
||||||
#include "../mwworld/manualref.hpp"
|
|
||||||
#include <map>
|
|
||||||
#include "../mwmechanics/aisequence.hpp"
|
|
||||||
#include <RakNetTypes.h>
|
|
||||||
|
|
||||||
#include <components/openmw-mp/Base/BasePlayer.hpp>
|
|
||||||
#include <components/esm/custommarkerstate.hpp>
|
#include <components/esm/custommarkerstate.hpp>
|
||||||
|
#include <components/esm/loadnpc.hpp>
|
||||||
|
#include <components/openmw-mp/Base/BasePlayer.hpp>
|
||||||
|
|
||||||
|
#include "../mwmechanics/aisequence.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/manualref.hpp"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <RakNetTypes.h>
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
|
@ -26,6 +28,7 @@ namespace mwmp
|
||||||
class Players
|
class Players
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static DedicatedPlayer *newPlayer(RakNet::RakNetGUID guid);
|
static DedicatedPlayer *newPlayer(RakNet::RakNetGUID guid);
|
||||||
static void createPlayer(RakNet::RakNetGUID guid);
|
static void createPlayer(RakNet::RakNetGUID guid);
|
||||||
static void disconnectPlayer(RakNet::RakNetGUID guid);
|
static void disconnectPlayer(RakNet::RakNetGUID guid);
|
||||||
|
@ -33,13 +36,16 @@ namespace mwmp
|
||||||
static DedicatedPlayer *getPlayer(RakNet::RakNetGUID guid);
|
static DedicatedPlayer *getPlayer(RakNet::RakNetGUID guid);
|
||||||
static DedicatedPlayer *getPlayer(const MWWorld::Ptr &ptr);
|
static DedicatedPlayer *getPlayer(const MWWorld::Ptr &ptr);
|
||||||
static void update(float dt);
|
static void update(float dt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
static std::map<RakNet::RakNetGUID, DedicatedPlayer *> players;
|
static std::map<RakNet::RakNetGUID, DedicatedPlayer *> players;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DedicatedPlayer : public BasePlayer
|
class DedicatedPlayer : public BasePlayer
|
||||||
{
|
{
|
||||||
friend class Players;
|
friend class Players;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MWWorld::Ptr getPtr();
|
MWWorld::Ptr getPtr();
|
||||||
|
@ -55,11 +61,13 @@ namespace mwmp
|
||||||
void removeMarker();
|
void removeMarker();
|
||||||
void setMarkerState(bool state);
|
void setMarkerState(bool state);
|
||||||
void updateActor(MWMechanics::Actor *actor);
|
void updateActor(MWMechanics::Actor *actor);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
DedicatedPlayer(RakNet::RakNetGUID guid);
|
DedicatedPlayer(RakNet::RakNetGUID guid);
|
||||||
virtual ~DedicatedPlayer();
|
virtual ~DedicatedPlayer();
|
||||||
void updatePtr(MWWorld::Ptr newPtr);
|
void updatePtr(MWWorld::Ptr newPtr);
|
||||||
const std::string getAnim();
|
|
||||||
int state;
|
int state;
|
||||||
MWWorld::ManualRef* reference;
|
MWWorld::ManualRef* reference;
|
||||||
|
|
||||||
|
@ -69,4 +77,4 @@ namespace mwmp
|
||||||
bool markerEnabled;
|
bool markerEnabled;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif //OPENMW_PLAYER_HPP
|
#endif //OPENMW_DEDICATEDPLAYER_HPP
|
||||||
|
|
|
@ -523,32 +523,22 @@ void LocalPlayer::updateAttackState(bool forceUpdate)
|
||||||
|
|
||||||
static bool attackPressed = false; // prevent flood
|
static bool attackPressed = false; // prevent flood
|
||||||
MWMechanics::DrawState_ state = player.getClass().getNpcStats(player).getDrawState();
|
MWMechanics::DrawState_ state = player.getClass().getNpcStats(player).getDrawState();
|
||||||
//player.getClass().hit(player, 1, ESM::Weapon::AT_Chop);
|
|
||||||
if (world->getPlayer().getAttackingOrSpell() && !attackPressed)
|
if (world->getPlayer().getAttackingOrSpell() && !attackPressed)
|
||||||
{
|
{
|
||||||
MWWorld::Ptr weapon = MWWorld::Ptr(); // hand-to-hand
|
MWWorld::Ptr weapon = MWWorld::Ptr(); // hand-to-hand
|
||||||
//player.getClass().onHit(player, 0.5, true, weapon, 0, 1);
|
|
||||||
if (state == MWMechanics::DrawState_Spell)
|
if (state == MWMechanics::DrawState_Spell)
|
||||||
{
|
{
|
||||||
const string &spell = MWBase::Environment::get().getWindowManager()->getSelectedSpell();
|
|
||||||
|
|
||||||
attack.type = Attack::MAGIC;
|
attack.type = Attack::MAGIC;
|
||||||
attack.pressed = true;
|
attack.pressed = true;
|
||||||
attack.spellId = spell;
|
attack.spellId = MWBase::Environment::get().getWindowManager()->getSelectedSpell();
|
||||||
}
|
|
||||||
else if (state == MWMechanics::DrawState_Weapon)
|
|
||||||
{
|
|
||||||
//PrepareAttack(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
attackPressed = true;
|
attackPressed = true;
|
||||||
}
|
}
|
||||||
else if (!world->getPlayer().getAttackingOrSpell() && attackPressed)
|
else if (!world->getPlayer().getAttackingOrSpell() && attackPressed)
|
||||||
{
|
{
|
||||||
if (/*state == MWMechanics::DrawState_Spell ||*/ state == MWMechanics::DrawState_Weapon)
|
|
||||||
{
|
|
||||||
//localNetPlayer->getAttack()->success = false;
|
|
||||||
//SendAttack(0);
|
|
||||||
}
|
|
||||||
attackPressed = false;
|
attackPressed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1181,10 +1171,9 @@ void LocalPlayer::prepareAttack(Attack::TYPE type, bool state)
|
||||||
|
|
||||||
if (dstate == MWMechanics::DrawState_Spell)
|
if (dstate == MWMechanics::DrawState_Spell)
|
||||||
{
|
{
|
||||||
const string &spell = MWBase::Environment::get().getWindowManager()->getSelectedSpell();
|
attack.spellId = MWBase::Environment::get().getWindowManager()->getSelectedSpell();
|
||||||
attack.success = Misc::Rng::roll0to99() < MWMechanics::getSpellSuccessChance(spell, getPlayerPtr());
|
attack.success = Misc::Rng::roll0to99() < MWMechanics::getSpellSuccessChance(attack.spellId, getPlayerPtr());
|
||||||
state = true;
|
state = true;
|
||||||
attack.spellId = spell;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue