forked from teamnwah/openmw-tes3coop
Clean-up. There is still a little bug.
This commit is contained in:
parent
d261263824
commit
032ff7c879
4 changed files with 31 additions and 16 deletions
|
@ -187,6 +187,9 @@ namespace MWBase
|
||||||
|
|
||||||
virtual void rotateObject(const MWWorld::Ptr& ptr,float x,float y,float z, bool adjust = false) = 0;
|
virtual void rotateObject(const MWWorld::Ptr& ptr,float x,float y,float z, bool adjust = false) = 0;
|
||||||
|
|
||||||
|
virtual void safePlaceObject(const MWWorld::Ptr& ptr,MWWorld::CellStore &Cell,ESM::Position pos) = 0;
|
||||||
|
///< place an object in a "safe" location (ie not in the void, etc). Makes a copy of the Ptr.
|
||||||
|
|
||||||
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;
|
||||||
///< Convert cell numbers to position.
|
///< Convert cell numbers to position.
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "../mwworld/player.hpp"
|
#include "../mwworld/player.hpp"
|
||||||
#include "components\esm\loadcell.hpp"
|
#include "components\esm\loadcell.hpp"
|
||||||
|
#include "../mwworld/manualref.hpp"
|
||||||
|
|
||||||
#include "OgreMath.h"
|
#include "OgreMath.h"
|
||||||
namespace MWScript
|
namespace MWScript
|
||||||
|
@ -369,7 +370,7 @@ namespace MWScript
|
||||||
pos.rot[0] = pos.rot[1] = 0;
|
pos.rot[0] = pos.rot[1] = 0;
|
||||||
pos.rot[2] = zRot;
|
pos.rot[2] = zRot;
|
||||||
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
||||||
MWBase::Environment::get().getWorld()->copyObjectToCell(ptr,*store,pos);
|
MWBase::Environment::get().getWorld()->safePlaceObject(ptr,*store,pos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -412,7 +413,7 @@ namespace MWScript
|
||||||
pos.rot[0] = pos.rot[1] = 0;
|
pos.rot[0] = pos.rot[1] = 0;
|
||||||
pos.rot[2] = zRot;
|
pos.rot[2] = zRot;
|
||||||
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
||||||
MWBase::Environment::get().getWorld()->copyObjectToCell(ptr,*store,pos);
|
MWBase::Environment::get().getWorld()->safePlaceObject(ptr,*store,pos);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -450,13 +451,14 @@ namespace MWScript
|
||||||
ipos.pos[0] = pos.x;
|
ipos.pos[0] = pos.x;
|
||||||
ipos.pos[1] = pos.y;
|
ipos.pos[1] = pos.y;
|
||||||
ipos.pos[2] = pos.z;
|
ipos.pos[2] = pos.z;
|
||||||
|
ipos.rot[0] = 0;
|
||||||
|
ipos.rot[1] = 0;
|
||||||
|
ipos.rot[2] = 0;
|
||||||
|
|
||||||
MWWorld::CellStore* store = MWBase::Environment::get().getWorld()->getPlayer().getPlayer().getCell();
|
MWWorld::CellStore* store = MWBase::Environment::get().getWorld()->getPlayer().getPlayer().getCell();
|
||||||
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(),itemID);
|
||||||
int icount = ptr.getRefData().getCount();
|
ref.getPtr().getRefData().setCount(count);
|
||||||
ptr.getRefData().setCount(count);
|
MWBase::Environment::get().getWorld()->safePlaceObject(ref.getPtr(),*store,ipos);
|
||||||
MWBase::Environment::get().getWorld()->copyObjectToCell(ptr,*store,ipos);
|
|
||||||
ptr.getRefData().setCount(icount);
|
|
||||||
//store->ge
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -491,13 +493,15 @@ namespace MWScript
|
||||||
ipos.pos[0] = pos.x;
|
ipos.pos[0] = pos.x;
|
||||||
ipos.pos[1] = pos.y;
|
ipos.pos[1] = pos.y;
|
||||||
ipos.pos[2] = pos.z;
|
ipos.pos[2] = pos.z;
|
||||||
|
ipos.rot[0] = 0;
|
||||||
|
ipos.rot[1] = 0;
|
||||||
|
ipos.rot[2] = 0;
|
||||||
|
|
||||||
MWWorld::CellStore* store = me.getCell();
|
MWWorld::CellStore* store = me.getCell();
|
||||||
MWWorld::Ptr ptr = MWBase::Environment::get().getWorld()->getPtr(itemID,false);
|
MWWorld::ManualRef ref(MWBase::Environment::get().getWorld()->getStore(),itemID);
|
||||||
int icount = ptr.getRefData().getCount();
|
ref.getPtr().getRefData().setCount(count);
|
||||||
ptr.getRefData().setCount(count);
|
MWBase::Environment::get().getWorld()->safePlaceObject(ref.getPtr(),*store,ipos);
|
||||||
MWBase::Environment::get().getWorld()->copyObjectToCell(ptr,*store,ipos);
|
|
||||||
ptr.getRefData().setCount(icount);
|
|
||||||
//store->ge
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -566,8 +570,8 @@ namespace MWScript
|
||||||
interpreter.installSegment5(opcodePlaceItemCell,new OpPlaceItemCell<ImplicitRef>);
|
interpreter.installSegment5(opcodePlaceItemCell,new OpPlaceItemCell<ImplicitRef>);
|
||||||
interpreter.installSegment5(opcodePlaceItem,new OpPlaceItem<ImplicitRef>);
|
interpreter.installSegment5(opcodePlaceItem,new OpPlaceItem<ImplicitRef>);
|
||||||
interpreter.installSegment5(opcodePlaceAtPc,new OpPlaceAtPc<ImplicitRef>);
|
interpreter.installSegment5(opcodePlaceAtPc,new OpPlaceAtPc<ImplicitRef>);
|
||||||
interpreter.installSegment5(opcodePlaceAtMe,new OpPlaceAtPc<ImplicitRef>);
|
interpreter.installSegment5(opcodePlaceAtMe,new OpPlaceAtMe<ImplicitRef>);
|
||||||
interpreter.installSegment5(opcodePlaceAtMeExplicit,new OpPlaceAtPc<ExplicitRef>);
|
interpreter.installSegment5(opcodePlaceAtMeExplicit,new OpPlaceAtMe<ExplicitRef>);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -656,6 +656,11 @@ namespace MWWorld
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::safePlaceObject(const MWWorld::Ptr& ptr,MWWorld::CellStore &Cell,ESM::Position pos)
|
||||||
|
{
|
||||||
|
copyObjectToCell(ptr,Cell,pos);
|
||||||
|
}
|
||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
const int cellSize = 8192;
|
const int cellSize = 8192;
|
||||||
|
|
|
@ -214,6 +214,9 @@ namespace MWWorld
|
||||||
/// \param adjust indicates rotation should be set or adjusted
|
/// \param adjust indicates rotation should be set or adjusted
|
||||||
virtual void rotateObject (const Ptr& ptr,float x,float y,float z, bool adjust = false);
|
virtual void rotateObject (const Ptr& ptr,float x,float y,float z, bool adjust = false);
|
||||||
|
|
||||||
|
virtual void safePlaceObject(const MWWorld::Ptr& ptr,MWWorld::CellStore &Cell,ESM::Position pos);
|
||||||
|
///< place an object in a "safe" location (ie not in the void, etc). Makes a copy of the Ptr.
|
||||||
|
|
||||||
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;
|
||||||
///< Convert cell numbers to position.
|
///< Convert cell numbers to position.
|
||||||
|
|
Loading…
Reference in a new issue