forked from mirror/openmw-tes3mp
Clean-up
This commit is contained in:
parent
e6716c25c3
commit
0a67f60a6e
7 changed files with 124 additions and 103 deletions
|
@ -178,11 +178,9 @@ namespace MWBase
|
||||||
|
|
||||||
virtual void moveObject (const MWWorld::Ptr& ptr, float x, float y, float z) = 0;
|
virtual void moveObject (const MWWorld::Ptr& ptr, float x, float y, float z) = 0;
|
||||||
|
|
||||||
virtual void scaleObject (MWWorld::Ptr& ptr, float scale) = 0;
|
virtual void scaleObject (const MWWorld::Ptr& ptr, float scale) = 0;
|
||||||
|
|
||||||
virtual void rotateObject (MWWorld::Ptr& ptr,float x,float y,float z,bool WorldAxis) = 0;
|
virtual void rotateObject(const MWWorld::Ptr& ptr,float x,float y,float z) = 0;
|
||||||
|
|
||||||
virtual void setObjectRotation (MWWorld::Ptr& ptr,float x,float y,float z) = 0;
|
|
||||||
|
|
||||||
virtual void indexToPosition (int cellX, int cellY, float &x, float &y, bool centre = false)
|
virtual void indexToPosition (int cellX, int cellY, float &x, float &y, bool centre = false)
|
||||||
const = 0;
|
const = 0;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "controlextensions.hpp"
|
#include "controlextensions.hpp"
|
||||||
#include "dialogueextensions.hpp"
|
#include "dialogueextensions.hpp"
|
||||||
#include "animationextensions.hpp"
|
#include "animationextensions.hpp"
|
||||||
|
#include "transformationextensions.hpp"
|
||||||
|
|
||||||
namespace MWScript
|
namespace MWScript
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,7 @@ namespace MWScript
|
||||||
Control::registerExtensions (extensions);
|
Control::registerExtensions (extensions);
|
||||||
Dialogue::registerExtensions (extensions);
|
Dialogue::registerExtensions (extensions);
|
||||||
Animation::registerExtensions (extensions);
|
Animation::registerExtensions (extensions);
|
||||||
|
Transformation::registerExtensions (extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void installOpcodes (Interpreter::Interpreter& interpreter)
|
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||||
|
@ -47,5 +49,6 @@ namespace MWScript
|
||||||
Control::installOpcodes (interpreter);
|
Control::installOpcodes (interpreter);
|
||||||
Dialogue::installOpcodes (interpreter);
|
Dialogue::installOpcodes (interpreter);
|
||||||
Animation::installOpcodes (interpreter);
|
Animation::installOpcodes (interpreter);
|
||||||
|
Transformation::installOpcodes (interpreter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -505,50 +505,6 @@ namespace MWScript
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class R>
|
|
||||||
class OpSetScale : public Interpreter::Opcode0
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual void execute (Interpreter::Runtime& runtime)
|
|
||||||
{
|
|
||||||
MWWorld::Ptr ptr = R()(runtime);
|
|
||||||
|
|
||||||
Interpreter::Type_Float scale = runtime[0].mInteger;
|
|
||||||
runtime.pop();
|
|
||||||
|
|
||||||
MWBase::Environment::get().getWorld()->scaleObject(ptr,scale);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class R>
|
|
||||||
class OpSetAngle : public Interpreter::Opcode0
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual void execute (Interpreter::Runtime& runtime)
|
|
||||||
{
|
|
||||||
MWWorld::Ptr ptr = R()(runtime);
|
|
||||||
|
|
||||||
std::string axis = runtime.getStringLiteral (runtime[0].mInteger);
|
|
||||||
runtime.pop();
|
|
||||||
Interpreter::Type_Float angle = runtime[0].mInteger;
|
|
||||||
runtime.pop();
|
|
||||||
|
|
||||||
if(axis == "X")
|
|
||||||
{
|
|
||||||
MWBase::Environment::get().getWorld()->setObjectRotation(ptr,angle,0,0);
|
|
||||||
}
|
|
||||||
if(axis == "Y")
|
|
||||||
{
|
|
||||||
MWBase::Environment::get().getWorld()->setObjectRotation(ptr,0,angle,0);
|
|
||||||
}
|
|
||||||
if(axis == "Z")
|
|
||||||
{
|
|
||||||
MWBase::Environment::get().getWorld()->setObjectRotation(ptr,0,0,angle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const int numberOfAttributes = 8;
|
const int numberOfAttributes = 8;
|
||||||
|
|
||||||
|
@ -596,11 +552,6 @@ namespace MWScript
|
||||||
const int opcodeModDisposition = 0x200014d;
|
const int opcodeModDisposition = 0x200014d;
|
||||||
const int opcodeModDispositionExplicit = 0x200014e;
|
const int opcodeModDispositionExplicit = 0x200014e;
|
||||||
|
|
||||||
const int opcodeSetScale = 0x2000164;
|
|
||||||
const int opcodeSetScaleExplicit = 0x2000165;
|
|
||||||
const int opcodeSetAngle = 0x2000166;
|
|
||||||
const int opcodeSetAngleExplicit = 0x2000167;
|
|
||||||
|
|
||||||
void registerExtensions (Compiler::Extensions& extensions)
|
void registerExtensions (Compiler::Extensions& extensions)
|
||||||
{
|
{
|
||||||
static const char *attributes[numberOfAttributes] =
|
static const char *attributes[numberOfAttributes] =
|
||||||
|
@ -683,9 +634,6 @@ namespace MWScript
|
||||||
extensions.registerInstruction("moddisposition","l",opcodeModDisposition,
|
extensions.registerInstruction("moddisposition","l",opcodeModDisposition,
|
||||||
opcodeModDispositionExplicit);
|
opcodeModDispositionExplicit);
|
||||||
extensions.registerFunction("getpcrank",'l',"/S",opcodeGetPCRank,opcodeGetPCRankExplicit);
|
extensions.registerFunction("getpcrank",'l',"/S",opcodeGetPCRank,opcodeGetPCRankExplicit);
|
||||||
|
|
||||||
extensions.registerInstruction("setscale","l",opcodeSetScale,opcodeSetScaleExplicit);
|
|
||||||
extensions.registerInstruction("setangle","Sl",opcodeSetAngle,opcodeSetAngleExplicit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void installOpcodes (Interpreter::Interpreter& interpreter)
|
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||||
|
@ -757,11 +705,6 @@ namespace MWScript
|
||||||
interpreter.installSegment5(opcodeModDispositionExplicit,new OpModDisposition<ExplicitRef>);
|
interpreter.installSegment5(opcodeModDispositionExplicit,new OpModDisposition<ExplicitRef>);
|
||||||
interpreter.installSegment3(opcodeGetPCRank,new OpGetPCRank<ImplicitRef>);
|
interpreter.installSegment3(opcodeGetPCRank,new OpGetPCRank<ImplicitRef>);
|
||||||
interpreter.installSegment3(opcodeGetPCRankExplicit,new OpGetPCRank<ExplicitRef>);
|
interpreter.installSegment3(opcodeGetPCRankExplicit,new OpGetPCRank<ExplicitRef>);
|
||||||
|
|
||||||
interpreter.installSegment5(opcodeSetScale,new OpSetScale<ImplicitRef>);
|
|
||||||
interpreter.installSegment5(opcodeSetScaleExplicit,new OpSetScale<ExplicitRef>);
|
|
||||||
interpreter.installSegment5(opcodeSetAngle,new OpSetAngle<ImplicitRef>);
|
|
||||||
interpreter.installSegment5(opcodeSetAngleExplicit,new OpSetAngle<ExplicitRef>);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
89
apps/openmw/mwscript/transformationextensions.cpp
Normal file
89
apps/openmw/mwscript/transformationextensions.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
|
||||||
|
#include "statsextensions.hpp"
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
|
#include <components/esm_store/store.hpp>
|
||||||
|
|
||||||
|
#include <components/compiler/extensions.hpp>
|
||||||
|
|
||||||
|
#include <components/interpreter/interpreter.hpp>
|
||||||
|
#include <components/interpreter/runtime.hpp>
|
||||||
|
#include <components/interpreter/opcodes.hpp>
|
||||||
|
|
||||||
|
#include "../mwbase/environment.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/class.hpp"
|
||||||
|
|
||||||
|
#include "interpretercontext.hpp"
|
||||||
|
#include "ref.hpp"
|
||||||
|
|
||||||
|
namespace MWScript
|
||||||
|
{
|
||||||
|
namespace Transformation
|
||||||
|
{
|
||||||
|
template<class R>
|
||||||
|
class OpSetScale : public Interpreter::Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Interpreter::Runtime& runtime)
|
||||||
|
{
|
||||||
|
MWWorld::Ptr ptr = R()(runtime);
|
||||||
|
|
||||||
|
Interpreter::Type_Float scale = runtime[0].mInteger;
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
MWBase::Environment::get().getWorld()->scaleObject(ptr,scale);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class R>
|
||||||
|
class OpSetAngle : public Interpreter::Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Interpreter::Runtime& runtime)
|
||||||
|
{
|
||||||
|
MWWorld::Ptr ptr = R()(runtime);
|
||||||
|
|
||||||
|
std::string axis = runtime.getStringLiteral (runtime[0].mInteger);
|
||||||
|
runtime.pop();
|
||||||
|
Interpreter::Type_Float angle = runtime[0].mInteger;
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
if(axis == "X")
|
||||||
|
{
|
||||||
|
MWBase::Environment::get().getWorld()->rotateObject(ptr,angle,0,0);
|
||||||
|
}
|
||||||
|
if(axis == "Y")
|
||||||
|
{
|
||||||
|
MWBase::Environment::get().getWorld()->rotateObject(ptr,0,angle,0);
|
||||||
|
}
|
||||||
|
if(axis == "Z")
|
||||||
|
{
|
||||||
|
MWBase::Environment::get().getWorld()->rotateObject(ptr,0,0,angle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const int opcodeSetScale = 0x2000164;
|
||||||
|
const int opcodeSetScaleExplicit = 0x2000165;
|
||||||
|
const int opcodeSetAngle = 0x2000166;
|
||||||
|
const int opcodeSetAngleExplicit = 0x2000167;
|
||||||
|
|
||||||
|
void registerExtensions (Compiler::Extensions& extensions)
|
||||||
|
{
|
||||||
|
extensions.registerInstruction("setscale","f",opcodeSetScale,opcodeSetScaleExplicit);
|
||||||
|
extensions.registerInstruction("setangle","Sl",opcodeSetAngle,opcodeSetAngleExplicit);
|
||||||
|
}
|
||||||
|
|
||||||
|
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||||
|
{
|
||||||
|
interpreter.installSegment5(opcodeSetScale,new OpSetScale<ImplicitRef>);
|
||||||
|
interpreter.installSegment5(opcodeSetScaleExplicit,new OpSetScale<ExplicitRef>);
|
||||||
|
interpreter.installSegment5(opcodeSetAngle,new OpSetAngle<ImplicitRef>);
|
||||||
|
interpreter.installSegment5(opcodeSetAngleExplicit,new OpSetAngle<ExplicitRef>);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
apps/openmw/mwscript/transformationextensions.hpp
Normal file
25
apps/openmw/mwscript/transformationextensions.hpp
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef GAME_SCRIPT_TRANSFORMATIONEXTENSIONS_H
|
||||||
|
#define GAME_SCRIPT_TRANSFORMATIONEXTENSIONS_H
|
||||||
|
|
||||||
|
namespace Compiler
|
||||||
|
{
|
||||||
|
class Extensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
class Interpreter;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWScript
|
||||||
|
{
|
||||||
|
/// \brief stats-related script functionality (creatures and NPCs)
|
||||||
|
namespace Transformation
|
||||||
|
{
|
||||||
|
void registerExtensions (Compiler::Extensions& extensions);
|
||||||
|
|
||||||
|
void installOpcodes (Interpreter::Interpreter& interpreter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -597,7 +597,7 @@ namespace MWWorld
|
||||||
mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z));
|
mPhysics->moveObject (ptr.getRefData().getHandle(), Ogre::Vector3 (x, y, z));
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::scaleObject (Ptr& ptr, float scale)
|
void World::scaleObject (const Ptr& ptr, float scale)
|
||||||
{
|
{
|
||||||
MWWorld::Class::get(ptr).adjustScale(ptr,scale);
|
MWWorld::Class::get(ptr).adjustScale(ptr,scale);
|
||||||
|
|
||||||
|
@ -607,41 +607,7 @@ namespace MWWorld
|
||||||
mPhysics->scaleObject( ptr.getRefData().getHandle(), scale );
|
mPhysics->scaleObject( ptr.getRefData().getHandle(), scale );
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::rotateObject (Ptr& ptr,float x,float y,float z,bool WorldAxis)
|
void World::rotateObject (const Ptr& ptr,float x,float y,float z)
|
||||||
{
|
|
||||||
MWWorld::Class::get(ptr).adjustRotation(ptr,x,y,z);
|
|
||||||
|
|
||||||
if(WorldAxis)
|
|
||||||
{
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(Ogre::Vector3::UNIT_X,Ogre::Degree(x));
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(Ogre::Vector3::UNIT_X,Ogre::Degree(y));
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(Ogre::Vector3::UNIT_X,Ogre::Degree(z));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Ogre::Matrix3 axis = ptr.getRefData().getBaseNode()->getLocalAxes();
|
|
||||||
Ogre::Vector3 xAxis = axis.GetColumn(0);
|
|
||||||
Ogre::Vector3 yAxis = axis.GetColumn(1);
|
|
||||||
Ogre::Vector3 zAxis = axis.GetColumn(2);
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(xAxis,Ogre::Degree(x));
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(yAxis,Ogre::Degree(y));
|
|
||||||
ptr.getRefData().getBaseNode()->rotate(zAxis,Ogre::Degree(z));
|
|
||||||
}
|
|
||||||
Ogre::Matrix3 rot;
|
|
||||||
ptr.getRefData().getBaseNode()->getOrientation().ToRotationMatrix(rot);
|
|
||||||
Ogre::Radian rx,ry,rz;
|
|
||||||
rot.ToEulerAnglesXYZ(rx,ry,rz);
|
|
||||||
|
|
||||||
ptr.getRefData().getPosition().rot[0] = rx.valueRadians();
|
|
||||||
ptr.getRefData().getPosition().rot[0] = ry.valueRadians();
|
|
||||||
ptr.getRefData().getPosition().rot[0] = rz.valueRadians();
|
|
||||||
|
|
||||||
mPhysics->rotateObject(ptr.getRefData().getHandle(),ptr.getRefData().getBaseNode()->getOrientation());
|
|
||||||
//ptr.getRefData().getBaseNode()->rotate(ptr.getRefData().getBaseNode()->get
|
|
||||||
//mPhysics->scaleObject( Class::get(ptr).getId(ptr), scale );
|
|
||||||
}
|
|
||||||
|
|
||||||
void World::setObjectRotation (Ptr& ptr,float x,float y,float z)
|
|
||||||
{
|
{
|
||||||
MWWorld::Class::get(ptr).adjustRotation(ptr,x,y,z);
|
MWWorld::Class::get(ptr).adjustRotation(ptr,x,y,z);
|
||||||
|
|
||||||
|
@ -653,8 +619,7 @@ namespace MWWorld
|
||||||
Ogre::Quaternion roty(Ogre::Degree(y),Ogre::Vector3::UNIT_Y);
|
Ogre::Quaternion roty(Ogre::Degree(y),Ogre::Vector3::UNIT_Y);
|
||||||
Ogre::Quaternion rotz(Ogre::Degree(z),Ogre::Vector3::UNIT_Z);
|
Ogre::Quaternion rotz(Ogre::Degree(z),Ogre::Vector3::UNIT_Z);
|
||||||
ptr.getRefData().getBaseNode()->setOrientation(rotx*roty*rotz);
|
ptr.getRefData().getBaseNode()->setOrientation(rotx*roty*rotz);
|
||||||
mPhysics->rotateObject(Class::get(ptr).getId(ptr),ptr.getRefData().getBaseNode()->getOrientation());
|
mPhysics->rotateObject(ptr.getRefData().getHandle(),ptr.getRefData().getBaseNode()->getOrientation());
|
||||||
std::cout << Class::get(ptr).getId(ptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::indexToPosition (int cellX, int cellY, float &x, float &y, bool centre) const
|
void World::indexToPosition (int cellX, int cellY, float &x, float &y, bool centre) const
|
||||||
|
|
|
@ -219,11 +219,9 @@ namespace MWWorld
|
||||||
|
|
||||||
virtual void moveObject (const Ptr& ptr, float x, float y, float z);
|
virtual void moveObject (const Ptr& ptr, float x, float y, float z);
|
||||||
|
|
||||||
virtual void scaleObject (Ptr& ptr, float scale);
|
virtual void scaleObject (const Ptr& ptr, float scale);
|
||||||
|
|
||||||
virtual void rotateObject (Ptr& ptr,float x,float y,float z,bool WorldAxis);
|
virtual void rotateObject (const Ptr& ptr,float x,float y,float z);
|
||||||
|
|
||||||
virtual void setObjectRotation (Ptr& ptr,float x,float y,float z);
|
|
||||||
|
|
||||||
virtual void indexToPosition (int cellX, int cellY, float &x, float &y, bool centre = false)
|
virtual void indexToPosition (int cellX, int cellY, float &x, float &y, bool centre = false)
|
||||||
const;
|
const;
|
||||||
|
|
Loading…
Reference in a new issue