code for strategy..... help needed!!!

If you are a new Irrlicht Engine user, and have a newbie-question, this is the forum for you. You may also post general programming questions here.
Post Reply
smartwhiz
Posts: 120
Joined: Wed Jan 14, 2004 6:03 pm
Location: India

code for strategy..... help needed!!!

Post by smartwhiz »

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
Tyn
Posts: 932
Joined: Thu Nov 20, 2003 7:53 pm
Location: England
Contact:

Post by Tyn »

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.
Post Reply