Code Search for Developers
 
 
  

frame.cpp from Boson at Krugle


Show frame.cpp syntax highlighted

/*
    This file is part of the Boson game
    Copyright (C) 2005 Rivo Laks (rivolaks@hot.ee)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/


#include "frame.h"

#include "bo3dtools.h"
#include "debug.h"


Frame::Frame()
{
  mId = -1;
  mMeshes = 0;
  mMatrices = 0;
  mNodeCount = 0;
}

Frame::Frame(Frame* f)
{
  mId = -1;
  mMeshes = 0;
  mMatrices = 0;
  mNodeCount = 0;
  allocateNodes(f->nodeCount());
  for(unsigned int i = 0; i < mNodeCount; i++)
  {
    matrix(i)->loadMatrix(*f->matrix(i));
  }
}

Frame::~Frame()
{
  delete[] mMeshes;
  for(unsigned int i = 0; i < mNodeCount; i++)
  {
    delete mMatrices[i];
  }
  delete[] mMatrices;
}

void Frame::allocateNodes(unsigned int i)
{
  delete[] mMeshes;
  for(unsigned int j = 0; j < mNodeCount; j++)
  {
    delete mMatrices[j];
  }
  delete[] mMatrices;

  mMeshes = new Mesh*[i];
  mMatrices = new BoMatrix*[i];
  mNodeCount = i;

  for(unsigned int j = 0; j < mNodeCount; j++)
  {
    mMeshes[j] = 0;
    mMatrices[j] = new BoMatrix;
  }
}

void Frame::setMatrix(unsigned int i, BoMatrix* m)
{
  if(i >= nodeCount())
  {
    boError() << k_funcinfo << "index " << i << " is out of bounds. nodeCount=" << nodeCount() << endl;
    return;
  }
  mMatrices[i] = m;
}

void Frame::setMesh(unsigned int i, Mesh* m)
{
  if(i >= nodeCount())
  {
    boError() << k_funcinfo << "index " << i << " is out of bounds. nodeCount=" << nodeCount() << endl;
    return;
  }
  mMeshes[i] = m;
}

void Frame::removeMesh(Mesh* mesh)
{
  unsigned int removeCount = 0;
  for(unsigned int i = 0; i < mNodeCount; i++)
  {
    if(mMeshes[i] == mesh)
    {
      removeCount++;
    }
  }
  unsigned int newNodeCount = mNodeCount - removeCount;
  if(newNodeCount == 0)
  {
    boWarning() << k_funcinfo << "removing all remaining nodes" << endl;
    delete[] mMeshes;
    for(unsigned int i = 0; i < mNodeCount; i++)
    {
      delete mMatrices[i];
    }
    delete[] mMatrices;
    mMatrices = 0;
    mMeshes = 0;
    return;
  }

  Mesh** meshes = new Mesh*[newNodeCount];
  BoMatrix** matrices = new BoMatrix*[newNodeCount];
  unsigned int index = 0;
  for(unsigned int i = 0; i < mNodeCount; i++)
  {
    if(mMeshes[i] == mesh)
    {
      mMeshes[i] = 0;
      delete mMatrices[i];
      mMatrices[i] = 0;
    }
    else
    {
      meshes[index] = mMeshes[i];
      matrices[index] = mMatrices[i];
      index++;
    }
  }
  if(index != newNodeCount)
  {
    boError() << k_funcinfo << "index (" << index << ") != newNodeCount (" << newNodeCount << ")" << endl;
    for (unsigned int i = index; i < newNodeCount; i++)
    {
      meshes[i] = 0;
      matrices[i] = 0;
    }
  }
  mNodeCount = newNodeCount;
  delete[] mMeshes;
  delete[] mMatrices;
  mMeshes = meshes;
  mMatrices = matrices;
}

/*
 * vim: et sw=2
 */




See more files for this project here

Boson

Boson is an OpenGL real-time strategy game. It is designed to run on Unix (Linux) computers, and is built on top of the KDE, Qt and kdegames libraries.

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

  libgfx/
    gfx/
      arcball.h
      array.h
      baseball.h
      geom3d.h
      geom4d.h
      gfx.h
      gl.h
      glext.h
      gltools.h
      gui.h
      intvec.h
      mat2.h
      mat3.h
      mat4.h
      mfc.h
      quat.h
      raster.h
      script.h
      symmat3.h
      symmat4.h
      trackball.h
      vec2.h
      vec3.h
      vec4.h
      wintools.h
    CMakeLists.txt
    arcball.cxx
    baseball.cxx
    config-libgfx.h.cmake
    geom3d.cxx
    geom4d.cxx
    gltools.cxx
    gui.cxx
    mat2.cxx
    mat3.cxx
    mat4.cxx
    quat.cxx
    raster-jpeg.cxx
    raster-png.cxx
    raster-pnm.cxx
    raster-tiff.cxx
    raster.cxx
    script.cxx
    symmat3.cxx
    symmat4.cxx
    time.cxx
    trackball.cxx
    wintools.cxx
  loaders/
    lib3ds_test/
      README
      lib3ds_test_puma.c
      mob_puma.3ds
    loader-3ds.cpp
    loader-3ds.h
    loader-ac.cpp
    loader-ac.h
    loader-md2.cpp
    loader-md2.h
  mixkit/
    COPYING.txt
    MxAsp.cxx
    MxAsp.h
    MxBlock.h
    MxBlock2.h
    MxBlock3.h
    MxBlockModel.cxx
    MxBlockModel.h
    MxCamera.cxx
    MxCamera.h
    MxCmdParser.cxx
    MxCmdParser.h
    MxDualModel.cxx
    MxDualModel.h
    MxDualSlim.cxx
    MxDualSlim.h
    MxDynBlock.h
    MxEdgeFilter.cxx
    MxEdgeFilter.h
  processors/
  test/
  CMakeLists.txt
  bmf.h
  bo3dtools.cpp
  bo3dtools.h
  debug.h
  frame.cpp
  frame.h
  loader.cpp
  loader.h
  lod.cpp
  lod.h
  main.cpp
  material.cpp
  material.h
  mesh.cpp
  mesh.h
  model.cpp
  model.h
  processor.cpp
  processor.h
  saver.cpp
  saver.h
  texture.cpp
  texture.h