class rpgCameraSceneNode:public scene::ISceneNodeAnimator,public IEventReceiver
{ private:
bool active;
scene::ISceneManager *manager;
scene::ICameraSceneNode *camera;
core::vector3df camPos;
core::vector3df camTar;
gui::ICursorControl *cursor;
core::dimension2d<s32> mode;
f32 moveSpeed;
s32 windowWidth;
s32 windowHeight;
public:
rpgCameraSceneNode(
scene::ISceneManager *Manager,gui::ICursorControl *Cursor,
scene::ICameraSceneNode *IntiCamera,
core::vector3df &IntiCamPos,
core::vector3df &IntiCamTar,
core::dimension2d<s32> Mode,
f32 MoveSpeed);
~rpgCameraSceneNode();
updateCursorPosition();
bool OnEvent(irr::SEvent event);
bool isActive();
void setActive(bool status);
void animateNode(scene::ISceneNode *node, irr::u32 timeMs);
};
rpgCameraSceneNode::rpgCameraSceneNode(
scene::ISceneManager *Manager,gui::ICursorControl *Cursor,
scene::ICameraSceneNode *IntiCamera,
core::vector3df &IntiCamPos,
core::vector3df &IntiCamTar,
core::dimension2d<s32> Mode,
f32 MoveSpeed)
:manager(Manager),
camera(IntiCamera),
camPos(IntiCamPos),
camTar(IntiCamTar),
cursor(Cursor),
mode(Mode),
moveSpeed(MoveSpeed)
{ core::vector2df setMouseAt;
active=false;
Cursor->setPosition(0.5f,0.5f);
windowWidth=mode.Width;
windowHeight=mode.Height;
}
rpgCameraSceneNode::~rpgCameraSceneNode()
{
}
rpgCameraSceneNode::updateCursorPosition()
{ core::position2d<irr::f32> pos = cursor->getRelativePosition();
if(pos.X < 0) pos.X = 0;
if(pos.X > 1) pos.X = 1;
if(pos.Y < 0) pos.Y = 0;
if(pos.Y > 1) pos.Y = 1;
cursor->setPosition(pos);
}
bool rpgCameraSceneNode::OnEvent(irr::SEvent event)
{
if(!active)
{
return false;
}
//if(event.EventType == irr::EET_KEY_INPUT_EVENT)
//{
// if(event.KeyInput.Key == ZoomInKey)
// {
// ZoomIn = event.KeyInput.PressedDown;
// return true;
// }
// else if(event.KeyInput.Key == ZoomOutKey)
// {
// ZoomOut = event.KeyInput.PressedDown;
// return true;
// }
//}
return false;
}
bool rpgCameraSceneNode::isActive()
{ return active;
}
void rpgCameraSceneNode::setActive(bool status)
{
// reset the cursor only if we are switching back to active from inactive
if(!active && status)
{
updateCursorPosition();
}
active = status;
}
void rpgCameraSceneNode::animateNode(scene::ISceneNode *node, irr::u32 timeMs)
{ core::vector3df nextCameraPos=camPos;
core::vector3df nextCameraTar=camTar;
camera = (irr::scene::ICameraSceneNode*)node;
if(manager->getActiveCamera() != camera)
{
return;
}
if(active)
{
core::position2d<irr::f32> pos = cursor->getRelativePosition();
if(pos.X < 30/windowWidth)
{
nextCameraPos+=(core::vector3df(60,0,60)*moveSpeed);
nextCameraTar+=(core::vector3df(60,0,60)*moveSpeed);
}
if(pos.X > (windowWidth-30)/windowWidth)
{
nextCameraPos-=(core::vector3df(60,0,60)*moveSpeed);
nextCameraTar-=(core::vector3df(60,0,60)*moveSpeed);
}
// remember to write code for boundaries of the map
if(pos.Y < 30/windowHeight)
{
}
//Even though we hav 150 space down we assign to hav only 30 so in that region only the map camera moves
if(pos.Y > (windowWidth-30)/windowWidth)
{
}
updateCursorPosition();
}
camera->setTarget(nextCameraTar);
camera->setPosition(nextCameraPos);
}
still the camera is not movin........ help needed
code for strategy..... help needed!!!
Enclose your code in brackets to start with, it is very hard to read. I'm going to wrap my camera code into a scene node, maybe that will help you. Firstly, I wouldn't inherit from ISceneNodeAnimator and IEventReceiver, I would inherit from ICameraSceneNode. Check out the way that ICameraMayaSceneNode scrolls whilst holding the RMB, it should help you work out your code. If I do it before you manage to work it out I will post it for you.