Code Search for Developers
 
 
  

kblock.cpp from Spatial Knowledge Experiments at Krugle


Show kblock.cpp syntax highlighted

/*
    Copyright (C) 2003, 2004, 2005 by Luca Cappa
    Written by Luca Cappa groton@users.sourceforge.net
  
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.
  
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
  
    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "cssysdef.h"
#include "csutil/sysfunc.h"
#include "iutil/vfs.h"
#include "csutil/cscolor.h"
#include "cstool/csview.h"
#include "cstool/initapp.h"
#include "iutil/eventq.h"
#include "iutil/event.h"
#include "iutil/objreg.h"
#include "iutil/csinput.h"
#include "iutil/virtclk.h"

#include "iengine/sector.h"
#include "iengine/engine.h"
#include "iengine/camera.h"
#include "iengine/light.h"
#include "iengine/texture.h"
#include "iengine/mesh.h"
#include "iengine/movable.h"
#include "iengine/material.h"
#include "iengine/portal.h"
#include "iengine/portalcontainer.h"
#include "iengine/movable.h"

//???#include "imesh/thing/polygon.h"
//????#include "imesh/thing/thing.h"
#include "imesh/object.h"

#include "ivideo/graph3d.h"
#include "ivideo/graph2d.h"
#include "ivideo/natwin.h"
#include "ivideo/txtmgr.h"
#include "ivideo/texture.h"
#include "ivideo/material.h"
#include "ivideo/fontserv.h"

#include "igraphic/imageio.h"

#include "imap/loader.h"

#include "ivaria/reporter.h"
#include "ivaria/stdrep.h"
#include "ivaria/conout.h"
#include "csutil/cmdhelp.h"
#include "csutil/cspmeter.h"
#include "csutil/csstring.h"

#include "csgeom/quaterni.h"
#include "csgeom/transfrm.h"
#include "csgeom/poly3d.h"

#include "imesh/sprite3d.h"

#include "iutil/object.h"
#include "iutil/plugin.h"

#include "ivaria/collider.h"
#include "ivaria/view.h"


#include "csgeom/csrect.h"

#include "csutil/scfstr.h"

#include "cstool/keyval.h"
#include "cstool/collider.h"
#include "cstool/cspixmap.h"

#include "ivaria/collider.h"

#include "iutil/objreg.h"
#include "iutil/plugin.h"

#include "cstool/collider.h"

#include "imesh/thing.h"
#include "imesh/sprite3d.h"
#include "imesh/object.h"

#include "ivideo/graph3d.h"
#include "ivideo/graph2d.h"
#include "ivideo/txtmgr.h"
#include "ivideo/texture.h"
#include "ivideo/material.h"
#include "ivideo/fontserv.h"

#include "igraphic/imageio.h"

#include "imap/loader.h"

#include "ivaria/reporter.h"
#include "ivaria/stdrep.h"
#include "ivaria/collider.h"

#include "igeom/polymesh.h"

#include "cstool/collider.h"

#include "csutil/cmdhelp.h"

#include "iaws/aws.h"
#include "iaws/awscnvs.h"
#include "iaws/awsparm.h"

#include "isense/iisensetracker.h"
#include "ske.h"
#include "korientation.h"
#include "kflags.h"
#include "kblockid.h"

#include "kblock.h"

SCF_IMPLEMENT_IBASE_EXT (KBlock)
SCF_IMPLEMENTS_INTERFACE (KBlock)
SCF_IMPLEMENT_IBASE_EXT_END

//new
KBlock::KBlock ()
{
  m_engine = CS_QUERY_REGISTRY (g_objReg, iEngine);
  m_g3d = CS_QUERY_REGISTRY (g_objReg, iGraphics3D);
  
  m_flag = new KFlags();
}

KBlock::~KBlock()
{
  delete m_flag;
  
  if (m_engine)
  {
    iMeshList* l_mL  =m_engine->GetMeshes ();
    l_mL->Remove(GetMeshWrapper());
  }//if
}


//?????
//rewrite this method to allow the creation of additional polygons.
void KBlock::Create (KBlockId const& p_bId, iMaterialWrapper& p_matWall,
                     iMaterialWrapper& p_matGround)
{
  m_meshW = m_engine->CreateThingMesh (NULL, m_name ? m_name->GetData () : "");
  csRef<iThingState> l_wall_state = SCF_QUERY_INTERFACE 
    (m_meshW->GetMeshObject (), iThingState);
  
  m_blockId = p_bId;//store the id of the KBlock.
  // +--++--+
  // |  ||  |
  // |  ||  |
  // |  ||  |
  // +--++--+
  if (p_bId == KBlockId::I1)
  {		
    //create the floor.
    CreateQuadXZ (l_wall_state->GetFactory (), &p_matGround, csVector3 (-0.5f, 0.0f, 0.5f),
      csVector3 (0.5f, 0.0f, -0.5f));//up
    CreateQuadXZ(l_wall_state->GetFactory (), &p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    CreateQuadXY (l_wall_state->GetFactory (), &p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3 (0.5f,-0.1f,-0.5f));//front
    CreateQuadXY (l_wall_state->GetFactory (), &p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ (l_wall_state->GetFactory (), &p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ (l_wall_state->GetFactory (), &p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    
    //create the north of the wall.
    CreateQuadXY (l_wall_state->GetFactory (), &p_matWall,csVector3(0.05f,2.2f,0.5f),
      csVector3(-0.05f,0.0f,0.5f));	
    
    //create the south of the wall.
    CreateQuadXY(l_wall_state->GetFactory (), &p_matWall,csVector3(-0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,-0.5f));
    
    //create the left of the wall.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.5f),
      csVector3(-0.05f,0.0f,-0.5f));	
    
    //create the right of the wall.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,0.5f));
    
    //create top of the wall.
    CreateQuadXZ(l_wall_state->GetFactory (), &p_matWall,csVector3(-0.05f,2.2f,0.5f),
      csVector3(0.05f,2.2f,-0.5f));	
    //create bottom of the wall.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,0.0f,0.5f),
      csVector3(0.05f,0.0f,-0.5f));	
    
    //set the flags
    m_flag->Set(KFlags::s_nC);
    m_flag->Set(KFlags::s_sC);
  }//else
  // +-+----+
  // | |    |
  // | |    |
  // | |    |
  // +-+----+
  else if(p_bId==KBlockId::I2)
  {
    //create the north side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.4f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,0.5));
    //create the east side.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.4f,2.2f,-0.5f),
      csVector3(-0.4f,0.0f,0.5));
    //create the south side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,-0.5f),
      csVector3(-0.4f,0.0f,-0.5f));
    //create the west side.	
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,-0.5f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(-0.4f,2.2f,-0.5f));
    //create the botton.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.4f,0.0f,-0.5f));
    
    //set the flags
    m_flag->Set(KFlags::s_nOS);
    m_flag->Set(KFlags::s_sS);
  }//else if
  // +------+
  // |      |
  // |      |
  // |      |
  // +------+
  else if(p_bId==KBlockId::F)
  {
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
  }//else if
  // +------+
  // +--++--+
  // |  ||  |
  // |  ||  |
  // +--++--+
  else if(p_bId==KBlockId::T1)
  {
    //create north sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,0.5f));
    //create the east sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.4f),
      csVector3(0.5f,0.0f,0.5f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,0.4f));
    //create the south sides.	
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,0.4f),
      csVector3(0.5f,0.0f,0.4f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,-0.5f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.4f),
      csVector3(-0.05f,0.0f,0.4f));
    //create the west sides.	
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.4f),
      csVector3(-0.05f,0.0f,-0.5f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,0.4f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(0.5f,2.2f,0.4f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.4f),
      csVector3(0.05f,2.2f,-0.5f));
    //the bottom of the wall.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,0.4f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,0.0f,0.4f),
      csVector3(0.05f,0.0f,-0.5f));
    
    //set the flags
    m_flag->Set(KFlags::s_eOS);
    m_flag->Set(KFlags::s_wS);
    m_flag->Set(KFlags::s_sC);
  }//else if
  // +------+
  // +------+
  // +--++--+
  // |  ||  |
  // +--++--+
  else if(p_bId==KBlockId::T2)
  {
    //create north sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,0.05f));
    //create the east sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,-0.05f),
      csVector3(0.5f,0.0f,0.05f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,-0.05f));
    //create the south sides.	
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,-0.05f),
      csVector3(0.5f,0.0f,-0.05f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,-0.5f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,-0.05f),
      csVector3(-0.05f,0.0f,-0.05f));
    //create the west sides.	
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.05f),
      csVector3(-0.05f,0.0f,-0.5f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,-0.05f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(0.5f,2.2f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.05f),
      csVector3(0.05f,2.2f,-0.5f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.05f),
      csVector3(0.5f,0.0f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,0.0f,-0.05f),
      csVector3(0.05f,0.0f,-0.5f));
    
    //set the flags
    m_flag->Set(KFlags::s_eC);
    m_flag->Set(KFlags::s_wC);
    m_flag->Set(KFlags::s_sC);
  }//else if	
  // +------+
  // +----+ |
  // |    | |
  // |    | |
  // +----+-+
  else if(p_bId==KBlockId::L1)
  {
    //create north side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,0.5f));
    //create the east side.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,-0.5f),
      csVector3(0.5f,0.0f,0.5f));		
    //create the south sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,2.2f,-0.5f),
      csVector3(0.5f,0.0f,-0.5f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.4f),
      csVector3(0.4f,0.0f,0.4f));
    //create the east sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,2.2f,0.4f),
      csVector3(0.4f,0.0f,-0.5f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(-0.5f,0.0f,0.4f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.5f),
      csVector3(0.5f,2.2f,0.4f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,2.2f,0.4f),
      csVector3(0.5f,2.2f,-0.5f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,0.0f,0.4f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,0.0f,0.4f),
      csVector3(0.4f,0.0f,-0.5f));
    //set the flags
    m_flag->Set(KFlags::s_wS);
    m_flag->Set(KFlags::s_sOS);
  }//else if
  // +------+
  // +------+
  // +----+ |
  // |    | |
  // +----+-+
  else if(p_bId==KBlockId::L2)
  {
    //create north side.
    CreateQuadXY (l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,0.05f));
    //create the west sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,-0.05f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,2.2f,-0.05f),
      csVector3(0.4f,0.0f,-0.5f));
    //create the south sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,0.0f,-0.05f),
      csVector3(-0.5f,2.2f,-0.05f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.4f,2.2f,-0.5f));
    //create the east side.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,-0.5f),
      csVector3(0.5f,0.0f,0.05f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(0.5f,2.2f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,2.2f,-0.05f),
      csVector3(0.5f,2.2f,-0.5f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.05f),
      csVector3(0.5f,0.0f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.4f,0.0f,-0.05f),
      csVector3(0.5f,0.0f,-0.5f));
    //set the flags
    m_flag->Set(KFlags::s_wC);
    m_flag->Set(KFlags::s_sOS);
  }//else if
  // +------+
  // +------+
  // | +----+
  // | |    |
  // +-+----+
  else if(p_bId==KBlockId::L3)
  {
    //create north side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,0.05f));
    //create the east sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.5f,2.2f,-0.05f),
      csVector3(0.5f,0.0f,0.05f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.4f,2.2f,-0.5f),
      csVector3(-0.4f,0.0f,-0.05f));
    //create the south sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.4f,2.2f,-0.05f),
      csVector3(0.5f,0.0f,-0.05f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,-0.5f),
      csVector3(-0.4f,0.0f,-0.5f));
    //create the est side.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,-0.5f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(0.5f,2.2f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,-0.05f),
      csVector3(-0.4f,2.2f,-0.5f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.05f),
      csVector3(0.5f,0.0f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,-0.05f),
      csVector3(-0.4f,0.0f,-0.5f));
    //set the flags
    m_flag->Set(KFlags::s_eC);
    m_flag->Set(KFlags::s_sS);
  }//else if
  // +------+
  // +---+  +
  // +--++  +
  // |  ||  |
  // +--++--+
  else if(p_bId==KBlockId::L4)
  {
    //create north side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,0.05f));
    //create the east side.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,0.05f));
    //create the south sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.5f),
      csVector3(0.05f,0.0f,-0.5f));
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,-0.05f),
      csVector3(-0.05f,0.0f,-0.05f));
    //create the west sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.05f),
      csVector3(-0.05f,0.0f,-0.5f));
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(-0.5f,0.0f,-0.05f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,2.2f,0.05f),
      csVector3(0.05f,2.2f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,-0.05f),
      csVector3(0.05f,2.2f,-0.5f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.5f,0.0f,0.05f),
      csVector3(0.05f,0.0f,-0.05f));
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,0.0f,-0.05f),
      csVector3(0.05f,0.0f,-0.5f));
    //set the flags
    m_flag->Set(KFlags::s_wC);
    m_flag->Set(KFlags::s_sC);
  }//else if
  // +--++--+
  // +  ++  +
  // +      +
  // |      |
  // +------+
  else if(p_bId==KBlockId::C)
  {
    //create north side.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,0.5f),
      csVector3(-0.05f,0.0f,0.5));
    //create the east sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(0.05f,2.2f,0.4f),
      csVector3(0.05f,0.0f,0.5f));
    //create the south sides.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.4f),
      csVector3(0.05f,0.0f,0.4f));
    //create the west sides.
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.5f),
      csVector3(-0.05f,0.0f,0.4f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,2.2f,0.5f),
      csVector3(0.05f,2.2f,0.4f));
    //create the bottom.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matWall,csVector3(-0.05f,0.0f,0.5f),
      csVector3(0.05f,0.0f,0.4f));
    //set the flags
    m_flag->Set(KFlags::s_nC);
  }//else if
  // +--++--+
  // | //   |
  // =/     |
  // |      |
  // +------+
  else if(p_bId==KBlockId::D1)
  {
    //create north side.
    CreateQuadXY (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (0.05f,2.2f,0.5f), csVector3 (-0.05f,0.0f,0.5));
    //create the east side.
    

      
#ifdef USE_MIRROR

    csPoly3D l_poly;
    l_poly.AddVertex (csVector3 (-0.5f, 2.2f, -0.05f));
    l_poly.AddVertex (csVector3 (0.05f, 2.2f, 0.5f));
    l_poly.AddVertex (csVector3 (0.05f, 0.0f, 0.5f));
    l_poly.AddVertex (csVector3 (-0.5f, 0.0f, -0.05f));
    iPortal* l_portal;
    csRef<iMeshWrapper> l_portalMesh = m_engine->CreatePortal (
        "mirror", m_meshW, g_ske->m_world, 
        l_poly.GetVertices (), l_poly.GetVertexCount (),
        l_portal);

    //set a mirror on the east side.
    l_portal->SetSector (g_ske->m_world);//??
    csTransform l_tr (csTransform::GetReflect (
      csPoly3D::ComputePlane (l_poly.GetVertices (), l_poly.GetVertexCount ())));
    l_portal->SetWarp (l_tr);
    l_portal->GetFlags ().Set (CS_PORTAL_FLOAT | CS_PORTAL_CLIPDEST | 
      CS_PORTAL_ZFILL);

#else // USE_MIRROR

    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f, 2.2f, -0.05f),
      csVector3 (0.05f, 2.2f, 0.5f),
      csVector3 (0.05f, 0.0f, 0.5f),
      csVector3 (-0.5f, 0.0f, -0.05f));

#endif
    
    //create the west sides.
    CreateQuadYZ (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f,2.2f,0.05f), csVector3 (-0.5f,0.0f,-0.05f));
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.05f,2.2f,0.5f), csVector3 (-0.5f,0.0f,0.05f));
    //create the floor.
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,-0.1f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//bottom
    //BUG: if i create a polygon without vertices, it crashes.
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(-0.5f,0.0f,0.5f),
      csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ(l_wall_state->GetFactory (),&p_matGround,csVector3(0.5f,0.0f,-0.5f),
      csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f,2.2f,0.05f), csVector3 (-0.05f,2.2f,0.5f),
      csVector3 (0.05f,2.2f,0.5f), csVector3 (-0.5f,2.2f,-0.05f));
    //create the bottom.
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f,0.0f,0.05f), csVector3 (0.05f,0.0f,0.5f),
      csVector3 (-0.5f,0.0f,-0.05f), csVector3 (-0.05f,0.0f,0.5f));
    
    //set the flags
    m_flag->Set(KFlags::s_nC);
    m_flag->Set(KFlags::s_wC);
  }//else if
  
  // +------+
  // |  / / |
  // |/ /   |
  // =/     |
  // +------+
  else if(p_bId==KBlockId::D2)
  {
    //create north side.
    CreateQuadXY (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (0.5f,2.2f,0.5f), csVector3 (0.40f,0.0f,0.5));
    //create the east side.
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f,2.2f,-0.5f), csVector3 (0.5f,0.0f,0.5f));
    //
    //create the west sides.
    CreateQuadYZ (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (-0.5f,2.2f,-0.40f), csVector3 (-0.5f,0.0f,-0.5f));
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (0.40f,2.2f,0.5f), csVector3 (-0.5f,0.0f,-0.40f));
    //create the floor.
    CreateQuadXZ (l_wall_state->GetFactory (),&p_matGround,
      csVector3(-0.5f,0.0f,0.5f), csVector3(0.5f,0.0f,-0.5f));//up	
    CreateQuadXZ (l_wall_state->GetFactory (),&p_matGround,
      csVector3(-0.5f,-0.1f,-0.5f), csVector3(0.5f,-0.1f,0.5f));//bottom
    CreateQuadXY (l_wall_state->GetFactory (),&p_matGround,
      csVector3(-0.5f,0.0f,-0.5f), csVector3(0.5f,-0.1f,-0.5f));//front
    CreateQuadXY (l_wall_state->GetFactory (),&p_matGround,
      csVector3(0.5f,0.0f,0.5f), csVector3(-0.5f,-0.1f,0.5f));//back
    CreateQuadYZ (l_wall_state->GetFactory (),&p_matGround,
      csVector3(-0.5f,0.0f,0.5f), csVector3(-0.5f,-0.1f,-0.5f));//left
    CreateQuadYZ (l_wall_state->GetFactory (),&p_matGround,
      csVector3(0.5f,0.0f,-0.5f), csVector3(0.5f,-0.1f,0.5f));//right
    //create the top.
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (0.5f,2.2f,0.5f), csVector3 (-0.5f,2.2f,-0.5f),
      csVector3 (-0.5f,2.2f,-0.40f), csVector3 (0.40f,2.2f,0.5f));
    //create the bottom.
    CreateQuadAny (l_wall_state->GetFactory (), &p_matWall,
      csVector3 (0.40f,0.0f,0.5f), csVector3 (-0.5f,0.0f,-0.40f),
      csVector3 (-0.5f,0.0f,-0.5f), csVector3 (0.5f,0.0f,0.5f));
    
    //set the flags
    m_flag->Set (KFlags::s_nS);
    m_flag->Set (KFlags::s_wOS);
  }//else
}

void KBlock::HardTransform (const csTransform& p_tr)
{
  m_meshW->HardTransform (p_tr);
}

iMeshWrapper* KBlock::GetMeshWrapper ()
{
  return m_meshW;
}

const char* KBlock::GetName ()
{
  return m_name->GetData ();
}
void KBlock::SetName (const char* p_name)
{
  m_name.AttachNew (new scfString (p_name));
}

//
//p_v1, p_v2,  p_v3 p_v4 are the vertices of the polygon to be drawn.
bool KBlock::CreateQuadAny (iThingFactoryState* p_tS, iMaterialWrapper* p_material,
                            const csVector3 &p_v1, const csVector3 &p_v2, const csVector3 &p_v3,
                            const csVector3 &p_v4)
{
  p_tS->AddQuad (p_v1, p_v2, p_v3, p_v4);
  
  if (p_material != NULL)
    p_tS->SetPolygonMaterial (CS_POLYRANGE_LAST, p_material);

  p_tS->SetPolygonTextureMapping 
    (CS_POLYRANGE_LAST, 1);
  
  return true;
}


//
//p_v1 is on the topleft, p_v2 bottomright: that will determine the facing of the polygon.
bool KBlock::CreateQuadAny (iThingFactoryState* p_tS,
                            iMaterialWrapper* p_material,const csVector3 &p_v1, const csVector3 &p_v2)
{
  p_tS->AddQuad (csVector3 (p_v1.x,p_v1.y,p_v1.z), csVector3 (p_v2.x,p_v1.y,p_v2.z),
    csVector3 (p_v2.x,p_v2.y,p_v2.z), csVector3 (p_v1.x,p_v2.y,p_v1.z));
  
  if (p_material != NULL)
    p_tS->SetPolygonMaterial (CS_POLYRANGE_LAST, p_material);
  
  p_tS->SetPolygonTextureMapping 
    (CS_POLYRANGE_LAST, 1);

  return true;
}


//
//p_v1 and p_v2 must have the same y.
//p_v1 is on the topleft, p_v2 bottomright: that will determine the facing of the polygon.
bool KBlock::CreateQuadXZ (iThingFactoryState* p_tS, iMaterialWrapper* p_material,
                           const csVector3 &p_v1, const csVector3 &p_v2)
{
  if (p_v1.y != p_v2.y)
  {
    SKE::Report (CS_REPORTER_SEVERITY_WARNING,
    		"CreateQuadXZ error!");
    return false;
  }//if
  else
  {
    p_tS->AddQuad (csVector3(p_v1.x,p_v1.y,p_v1.z),
      csVector3(p_v2.x,p_v1.y,p_v1.z),
      csVector3(p_v2.x,p_v1.y,p_v2.z),
      csVector3(p_v1.x,p_v1.y,p_v2.z));
  }//else
  
  if (p_material != NULL)
    p_tS->SetPolygonMaterial (CS_POLYRANGE_LAST, p_material);
  
  p_tS->SetPolygonTextureMapping 
    (CS_POLYRANGE_LAST, 1);
  
  return true;
}


//
//p_v1 and p_v2 must have the same z.
//p_v1 is on the topleft, p_v2 bottomright: that will determine the facing of the polygon.
bool KBlock::CreateQuadXY (iThingFactoryState* p_tS, iMaterialWrapper* p_material,const csVector3 &p_v1,
                          const csVector3 &p_v2)
{
  if (p_v1.z != p_v2.z)
  {
    SKE::Report (CS_REPORTER_SEVERITY_WARNING,
    		"CreateQuadXY error!");
    return false;
  }//if
  else
  {
    p_tS->AddQuad (csVector3(p_v1.x,p_v1.y,p_v1.z),
      csVector3(p_v2.x,p_v1.y,p_v1.z),
      csVector3(p_v2.x,p_v2.y,p_v1.z),
      csVector3(p_v1.x,p_v2.y,p_v1.z));
  }//else
  
  if (p_material != NULL)
    p_tS->SetPolygonMaterial (CS_POLYRANGE_LAST, p_material);
  
  p_tS->SetPolygonTextureMapping 
    (CS_POLYRANGE_LAST, 1);

  return true;
}


//
//p_v1 and p_v2 must have the same x.
//p_v1 is on the topleft, p_v2 bottomright: that will determine the facing of the polygon.
bool KBlock::CreateQuadYZ (iThingFactoryState* p_tS,iMaterialWrapper* p_material,
                           const csVector3 &p_v1, const csVector3 &p_v2)
{
  if (p_v1.x != p_v2.x)
  {
    SKE::Report (CS_REPORTER_SEVERITY_WARNING,
    		"CreateQuadYZ error!");
    return false;
  }//if
  else
  {
    p_tS->AddQuad (csVector3(p_v1.x,p_v1.y,p_v1.z),
      csVector3(p_v1.x,p_v1.y,p_v2.z),
      csVector3(p_v1.x,p_v2.y,p_v2.z),
      csVector3(p_v1.x,p_v2.y,p_v1.z));
  }//else
  
  if (p_material != NULL)
    p_tS->SetPolygonMaterial (CS_POLYRANGE_LAST, p_material);
  
  p_tS->SetPolygonTextureMapping 
    (CS_POLYRANGE_LAST, 1);

  return true;
}





See more files for this project here

Spatial Knowledge Experiments

A simulation of 3D virtual worlds for psychological experiments

Project homepage: http://sourceforge.net/projects/ske
Programming language(s): C,C++,Perl
License: other

  isense/
  joystick/
  Jamfile
  KImageCardinalDirection.h
  SKE.cpp
  SKE.h
  eulerangles.c
  eulerangles.h
  ikdraggable.cpp
  ikdraggable.h
  ikdraghandler.h
  ikmission.h
  ikxmlreader.h
  ikxmlwriter.h
  kappstate.cpp
  kappstate.h
  kbasedraggable.cpp
  kbasedraggable.h
  kbasedraghandler.cpp
  kbasedraghandler.h
  kblock.cpp
  kblock.h
  kblockId.h
  kblockid.cpp
  kcamera.cpp
  kcamera.h
  kcollision.cpp
  kcommandprocessor.cpp
  kcommandprocessor.h
  kconstant.cpp
  kconstant.h
  kcursor3d.cpp
  kcursor3d.h
  kdata.cpp
  kdata.h
  kdatalist.cpp
  kdatalist.h
  kdragmanager.cpp
  kdragmanager.h
  keventhandlermanager.cpp
  keventhandlermanager.h
  kflags.cpp
  kflags.h
  kimagecardinaldirection.cpp
  kkeys.cpp
  kkeys.h
  kkeystate.cpp
  kkeystate.h
  klandmark.cpp
  klandmark.h
  klandmarklist.cpp
  klandmarklist.h
  klight.cpp
  klight.h
  klightlist.cpp
  klightlist.h
  kmap.cpp
  kmap.h
  kmission.cpp
  kmission.h
  kmissiontype.cpp
  kmissiontype.h
  kmode.cpp
  kmode.h
  kmousemanager.cpp
  kmousemanager.h
  kobject3d.cpp
  kobject3d.h
  korientation.cpp
  korientation.h
  kpath.cpp
  kpath.h
  kpathfollower.cpp
  kpathfollower.h
  kplayer.cpp
  kplayer.h
  kposition.cpp
  kposition.h
  kquaternion.cpp
  kquaternion.h
  ksaveddatamanager.cpp
  ksaveddatamanager.h
  ksegment3.h
  ksign.cpp
  ksign.h
  ksprite3d.cpp
  ksprite3d.h
  ksprite3dlist.cpp
  ksprite3dlist.h
  kterrain.cpp
  kterrain.h
  kthing.cpp
  kthing.h
  kutil.cpp
  kutil.h
  kwireframe.cpp
  kwireframe.h
  kxmlhelper.h
  movement1d.h
  movement3d.h
  quattypes.h