irrlicht/source/Irrlicht.NET/ISceneNode.cpp

261 lines
5.9 KiB
C++

// Copyright (C) 2002-2006 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
#include "ISceneNode.h"
#include "ISceneNodeAnimator.h"
#include "NativeConverter.h"
#include <vcclr.h> // for PtrToStringChars
namespace Irrlicht
{
namespace Scene
{
ISceneNode::ISceneNode(irr::scene::ISceneNode* realSceneNode)
: SceneNode(realSceneNode)
{
SceneNode->grab();
}
ISceneNode::~ISceneNode()
{
SceneNode->drop();
}
void ISceneNode::Render()
{
SceneNode->render();
}
System::String* ISceneNode::get_Name()
{
return new System::String(SceneNode->getName());
}
void ISceneNode::set_Name(System::String* name)
{
char* str2 = (char*)(void*)Marshal::StringToHGlobalAnsi(name);
SceneNode->setName(str2);
Marshal::FreeHGlobal(str2);
}
Core::Box3D ISceneNode::get_BoundingBox()
{
return irr::NativeConverter::getNETBox(SceneNode->getBoundingBox());
}
Core::Box3D ISceneNode::get_TransformedBoundingBox()
{
return irr::NativeConverter::getNETBox(SceneNode->getTransformedBoundingBox());
}
Core::Matrix4 ISceneNode::get_AbsoluteTransformation()
{
return irr::NativeConverter::getNETMatrix(SceneNode->getAbsoluteTransformation());
}
Core::Matrix4 ISceneNode::get_RelativeTransformation()
{
return irr::NativeConverter::getNETMatrix(SceneNode->getRelativeTransformation());
}
bool ISceneNode::get_Visible()
{
return SceneNode->isVisible();
}
void ISceneNode::set_Visible(bool visible)
{
SceneNode->setVisible(visible);
}
int ISceneNode::get_ID()
{
return SceneNode->getID();
}
void ISceneNode::set_ID(int id)
{
SceneNode->setID(id);
}
void ISceneNode::AddChild(ISceneNode* child)
{
SceneNode->addChild(child ? child->SceneNode : 0);
}
bool ISceneNode::RemoveChild(ISceneNode* child)
{
return SceneNode->removeChild(child ? child->SceneNode : 0);
}
void ISceneNode::RemoveAll()
{
return SceneNode->removeAll();
}
void ISceneNode::Remove()
{
SceneNode->remove();
}
Video::Material ISceneNode::GetMaterial(int i)
{
return irr::NativeConverter::getNETMaterial(SceneNode->getMaterial(i));
}
void ISceneNode::SetMaterial(int i, Video::Material mat)
{
SceneNode->getMaterial(i) = irr::NativeConverter::getNativeMaterial(mat);
}
int ISceneNode::get_MaterialCount()
{
return SceneNode->getMaterialCount();
}
void ISceneNode::SetMaterialFlag(Video::MaterialFlag flag, bool newvalue)
{
SceneNode->setMaterialFlag((irr::video::E_MATERIAL_FLAG)flag, newvalue);
}
void ISceneNode::SetMaterialTexture(int textureLayer, Video::ITexture* texture)
{
SceneNode->setMaterialTexture(textureLayer, texture ? texture->get_NativeTexture() : 0);
}
void ISceneNode::SetMaterialType(Video::MaterialType newType)
{
SceneNode->setMaterialType((irr::video::E_MATERIAL_TYPE)newType);
}
Core::Vector3D ISceneNode::get_Scale()
{
return irr::NativeConverter::getNETVector(SceneNode->getScale());
}
void ISceneNode::set_Scale(Core::Vector3D scale)
{
SceneNode->setScale(irr::NativeConverter::getNativeVector(scale));
}
Core::Vector3D ISceneNode::get_Rotation()
{
return irr::NativeConverter::getNETVector(SceneNode->getRotation());
}
void ISceneNode::set_Rotation(Core::Vector3D v)
{
SceneNode->setRotation(irr::NativeConverter::getNativeVector(v));
}
Core::Vector3D ISceneNode::get_Position()
{
return irr::NativeConverter::getNETVector(SceneNode->getPosition());
}
void ISceneNode::set_Position(Core::Vector3D v)
{
SceneNode->setPosition(irr::NativeConverter::getNativeVector(v));
}
Core::Vector3D ISceneNode::get_AbsolutePosition()
{
return irr::NativeConverter::getNETVector(SceneNode->getAbsolutePosition());
}
void ISceneNode::set_AutomaticCulling(bool enabled)
{
// TODO: culling enum
SceneNode->setAutomaticCulling(enabled ? irr::scene::EAC_BOX : irr::scene::EAC_OFF);
}
bool ISceneNode::get_AutomaticCulling()
{
// TODO: culling enum
return SceneNode->getAutomaticCulling() != irr::scene::EAC_OFF;
}
void ISceneNode::set_DebugDataVisible(bool visible)
{
SceneNode->setDebugDataVisible(visible ? irr::scene::EDS_FULL : irr::scene::EDS_OFF);
}
bool ISceneNode::get_DebugDataVisible()
{
return SceneNode->isDebugDataVisible() != irr::scene::EDS_OFF;
}
void ISceneNode::set_IsDebugObject(bool debugObject)
{
SceneNode->setIsDebugObject(debugObject);
}
bool ISceneNode::get_IsDebugObject()
{
return SceneNode->isDebugObject();
}
void ISceneNode::SetParent(ISceneNode* newParent)
{
SceneNode->setParent(newParent ? newParent->SceneNode : 0);
}
void ISceneNode::UpdateAbsolutePosition()
{
SceneNode->updateAbsolutePosition();
}
irr::scene::ISceneNode* ISceneNode::get_NativeSceneNode()
{
return SceneNode;
}
/// <summary>
/// Adds an animator which should animate this node.
/// </summary>
void ISceneNode::AddAnimator(ISceneNodeAnimator* animator)
{
if (!animator)
return;
SceneNode->addAnimator(animator->get_NativeSceneNodeAnimator());
}
void ISceneNode::RemoveAnimators()
{
SceneNode->removeAnimators();
}
void ISceneNode::RemoveAnimator(ISceneNodeAnimator* animator)
{
SceneNode->removeAnimator(animator->get_NativeSceneNodeAnimator());
}
SceneNodeType ISceneNode::get_SceneNodeType()
{
return (Irrlicht::Scene::SceneNodeType)SceneNode->getType();
}
ISceneNode* ISceneNode::get_Children() []
{
ISceneNode* ret[] = new ISceneNode*[SceneNode->getChildren().getSize()];
int i=0;
const irr::core::list<irr::scene::ISceneNode*>& children = SceneNode->getChildren();
for ( irr::core::list<irr::scene::ISceneNode*>::Iterator it = children.begin();
it != children.end(); ++it, ++i )
{
ret[i] = new ISceneNode(*it);
}
return ret;
}
}
}