VERY dirty minimap ;)

Post those lines of code you feel like sharing or find what you require for your project here; or simply use them as tutorials.
Post Reply
Gogolian
Posts: 32
Joined: Sat May 17, 2008 10:49 pm

VERY dirty minimap ;)

Post by Gogolian »

I just dont know what gotten into me. (maybe a a programmer's devil) but while doing tutorial for beginners (yes, so i am ;) ) decided to make a minimap without looking into froum for already made.
Well i started something about 0:30 AM, now i is 03:21 AM (Poland) and it work. Or at least you can say that ;)
Well it's very VERY dirty both visual and code ;)
But what the hell... ill post it anyway ;) if i'll do better version i will also post it.
minimap.h

Code: Select all

/*********************************
Minimap by_Gogolian
*********************************/
#ifndef MINIMAP_H
#define MINIMAP_H 

#include <irrlicht.h>

using namespace irr;
using namespace scene;
using namespace video;
using namespace core;

class Minimap 
{
public: 
 //vbnvbn
 core::stringw Go(ISceneManager* smgr, IVideoDriver* video)
 {
   core::array< scene::ISceneNode * > allC,allD; 
   ISceneNode* node;
   float scale = 1;
   core::stringw tmp(L"Minimap [");
   smgr->getSceneNodesFromType(ESNT_CAMERA,allD);
   for(int i = 0; i < allD.size(); i++){ 
     video->draw2DRectangle(SColor(255,128,0,0), rect<s32>(500.0f+allD[i]->getPosition().X,280.0f+allD[i]->getPosition().Z,500.0f+allD[i]->getPosition().X+5,280.0f+allD[i]->getPosition().Z+5)) ; 
   }
   smgr->getSceneNodesFromType(ESNT_CUBE,allC);
   for(int i = 0; i < allC.size(); i++){ 
     video->draw2DRectangle(SColor(255,0,0,0), rect<s32>(500.0f+allC[i]->getPosition().X,280.0f+allC[i]->getPosition().Z,500.0f+allC[i]->getPosition().X+5,280.0f+allC[i]->getPosition().Z+5)) ;
   tmp += allC[i]->getPosition().X;
   tmp += " ; ";
   tmp += allC[i]->getPosition().Y;
   tmp += " ; ";
   tmp += allC[i]->getPosition().Z;
   tmp += " :: ";  
   }
  return tmp;
 }
 
};
#endif
main.cpp

Code: Select all

#include <irrlicht.h>
#include "minimap.h"
#pragma comment(lib, "Irrlicht.lib");

 using namespace irr;
 using namespace core;
 using namespace scene;
 using namespace video;
 using namespace gui; 

IrrlichtDevice* device = 0;

bool keys[KEY_KEY_CODES_COUNT];

class MyEventReceiver : public IEventReceiver {
 public:
  virtual bool OnEvent(const SEvent& event)  {
  if(event.EventType == EET_KEY_INPUT_EVENT){
   keys[event.KeyInput.Key] = event.KeyInput.PressedDown;
   return false;
  }
   return false;
  }
}; 

int main() {
    
 Minimap map;
    
 MyEventReceiver receiver;

 IrrlichtDevice* device = createDevice( EDT_DIRECT3D9, core::dimension2d<s32>(640, 480),
		16, false, false, false, &receiver);
 IVideoDriver* video = device->getVideoDriver();
 ISceneManager* smgr = device->getSceneManager();
 
 video::ITexture* images = video->getTexture("./map.bmp");
 
 for(int x=0; x<irr::KEY_KEY_CODES_COUNT; x++) keys[x] = false;
 
 ICameraSceneNode* cam = smgr->addCameraSceneNode();
   
 smgr->addCubeSceneNode();
 ISceneNode* cube = smgr->addCubeSceneNode();
 
 cam->setPosition(vector3df(0,0,120.0f));
 
 cube->setPosition(vector3df(0,0.0f,40.0f));
 //cube->setScale(vector3df(2.0f,3.0f,4.0f));

 while(device->run() && device) {
  
  if(keys[KEY_KEY_W]) {
   cube->setPosition(cube->getPosition()+vector3df(0,0,0.1));
   cube->setRotation(cube->getRotation()+vector3df(0,0,0.1));
  }
  if(keys[KEY_KEY_S]) {
   cube->setPosition(cube->getPosition()-vector3df(0,0,0.1));
   cube->setRotation(cube->getRotation()-vector3df(0,0,0.1));
  }
  if(keys[KEY_KEY_A]) {
   cube->setPosition(cube->getPosition()-vector3df(0.1,0,0));
   cube->setRotation(cube->getRotation()-vector3df(0.1,0,0));
  }
  if(keys[KEY_KEY_D]) {
   cube->setPosition(cube->getPosition()+vector3df(0.1,0,0));
   cube->setRotation(cube->getRotation()+vector3df(0.1,0,0));
  }
  core::stringw tmp(L"Minimap [");
  tmp += map.Go(smgr,video);
  tmp += L"]";
  device->setWindowCaption(tmp.c_str());
  cam->setTarget(cube->getPosition());
  video->beginScene(true, true, video::SColor(255,128,128,128));
  smgr->drawAll();
  video->draw2DImage(images, position2d<s32>(400,310));
  map.Go(smgr,video);
  video->endScene();
 }
} 
So now i am waitin for comment's how bad is it XP
[if someone didn't noticed - steer with WSAD]
And the darkness begun...
jontan6
Posts: 278
Joined: Fri Jun 13, 2008 5:29 pm

Post by jontan6 »

thanks! i may need that next week
pakata
Posts: 18
Joined: Tue Sep 23, 2008 11:51 pm
Location: korea rep of

some fixed...

Post by pakata »

english is not good ^^;;;;
so cant say much... ;;?

header

Code: Select all

class Minimap 
{ 
public: 
 //vbnvbn 
	core::stringw Go(ISceneManager* smgr,
		IVideoDriver* video,
		core::dimension2d<s32> imgsize,
		core::position2d<s32> imgpos,
		core::dimension2d<s32> trsize	) 
 { 
^--added more information for minimaps

Code: Select all

   core::array< scene::ISceneNode * > allC,allD; 
   ISceneNode* node; 
   float scale = 1; 
   core::stringw tmp(L"Minimap ["); 
   smgr->getSceneNodesFromType(ESNT_CAMERA,allD);

  imgpos.X+=imgsize.Width/2;
  imgpos.Y+=imgsize.Height/2;
^--calculating minimap image center

Code: Select all

   for(int i = 0; i < allD.size(); i++){ 
     video->draw2DRectangle(SColor(255,128,0,0), rect<s32>(
		 imgpos.X + (allD[i]->getPosition().X/trsize.Width*imgsize.Width),
		 imgpos.Y + (allD[i]->getPosition().Z/trsize.Height*imgsize.Height),
		 imgpos.X + (allD[i]->getPosition().X/trsize.Width*imgsize.Width) + 5,
		 imgpos.Y + (allD[i]->getPosition().Z/trsize.Height*imgsize.Height) + 5		 )
		 ) ; 
   } 
^--imgpos.X --> minimap start position setting
(allD->getPosition().X/trsize.Width*imgsize.Width) --> minimap's boxes position calculating(ralative position?)

Code: Select all

   smgr->getSceneNodesFromType(ESNT_CUBE,allC); 
   for(int i = 0; i < allC.size(); i++){ 
     video->draw2DRectangle(SColor(255,0,0,0),rect<s32>(
		 imgpos.X + (allC[i]->getPosition().X/trsize.Width*imgsize.Width),
		 imgpos.Y + (allC[i]->getPosition().Z/trsize.Height*imgsize.Height),
		 imgpos.X + (allC[i]->getPosition().X/trsize.Width*imgsize.Width) + 5,
		 imgpos.Y + (allC[i]->getPosition().Z/trsize.Height*imgsize.Height) + 5		 )
		 ) ; 
   } 
 }
}; 
#endif
if terrain loaded...
get terrain size...

Code: Select all

core::aabbox3df terrainbox = terrain->getBoundingBox();
ex)
it can use like this
core::vector3df terraincenterpos;

terraincenterpos.X = -f32(terrainbox.MaxEdge.X-terrainbox.MinEdge.X)/2;
terraincenterpos.Y = -terrainbox.MinEdge.Y;
terraincenterpos.Z = -f32(terrainbox.MaxEdge.Z-terrainbox.MinEdge.Z)/2;

terrain->setPosition(terraincenterpos); // terrain set to center

===============================
core::vector3df & getTerrainCenter()
was good
but need information of terrain.. continually...

main

Code: Select all

video::ITexture* images = Device->getVideoDriver()->
getTexture("../media/terrain-heightmap.bmp"); //map
ICameraSceneNode* cam = smgr->addCameraSceneNode(); 

core::dimension2d<s32> imgsize=images->getSize();
core::position2d<s32> imgpos;
imgpos.X=700;
imgpos.Y=50;
video::ITexture* images --> added for get size,position,...
imgpos for minimap start position..

Code: Select all

    
core::dimension2d<s32> trsize=core::dimension2d<s32>(abs(terrainbox.MaxEdge.X)-abs(terrainbox.MinEdge.X),
abs(terrainbox.MaxEdge.Z)-abs(terrainbox.MinEdge.Z));
get terrain size.

Code: Select all

while(Device->run() && driver)
{
if (Device->isWindowActive())
{
driver->beginScene(true, true, video::SColor(150,50,50,50));
smgr->drawAll();
env->drawAll();

Device->getVideoDriver()->draw2DImage(images, imgpos);
map.Go(smgr,Device->getVideoDriver(),imgsize,imgpos,trsize); 

driver->endScene();
drawing and send data to minimap



some code skipped...
Last edited by pakata on Fri Oct 03, 2008 3:08 pm, edited 2 times in total.
JP
Posts: 4526
Joined: Tue Sep 13, 2005 2:56 pm
Location: UK
Contact:

Post by JP »

pakata, please explain what your code posting is all about... It's a bit confusing if you just slap up some code and don't say what the purpose is. Is it an extension to Goglian's code?
Image Image Image
Post Reply