Skip to main content

History: PUDotNet

Preview of version: 2

This code snippet is related to the Particle Universe plugin for use with Mogre.

Look to the Particle page for further links and particle information.

Contributer of this code snippet: mstoyke

TODO:
Write how to use/embedd it. (It seems so that you need to compile C++ code ... for use with C#.)



PUDotNet.h

Copy to clipboard
#pragma once #include <Ogre.h> #include <ParticleUniverseSystem.h> #include <ParticleUniverseSystemManager.h> using namespace System; namespace PUDotNet { public ref class PUManager { private: Mogre::SceneManager^ mScene; ParticleUniverse::ParticleSystemManager* mPUMgr; Collections::Generic::Dictionary<System::String^, IntPtr>^ mSystems; public: PUManager( Mogre::SceneManager^ _scene ); !PUManager(); ~PUManager(); property bool IsDisposed { bool get(); } array<System::String^>^ GetTemplateNames(); bool CreateParticleSystem( System::String^ _name, System::String^ _templateName ); void DestroyParticleSystem( System::String^ _name ); void AddToSceneNode( Mogre::SceneNode^ _node, System::String^ _name ); void RemoveFromSceneNode( Mogre::SceneNode^ _node, System::String^ _name ); void Start( System::String^ _name ); void Stop( System::String^ _name ); void Pause( System::String^ _name ); void Resume( System::String^ _name ); private: ParticleUniverse::ParticleSystem* GetByName( System::String^ _name ); }; }





PUDotNet.cpp

Copy to clipboard
#include "stdafx.h" #include "PUDotNet.h" namespace PUDotNet { PUManager::PUManager( Mogre::SceneManager^ _scene ) { if( _scene == nullptr ) throw gcnew System::ArgumentNullException( "_scene" ); mScene = _scene; mPUMgr = ParticleUniverse::ParticleSystemManager::getSingletonPtr(); mSystems = gcnew Collections::Generic::Dictionary<System::String^, IntPtr>(); } PUManager::!PUManager() { if( mSystems != nullptr ) { Collections::Generic::Dictionary<System::String^, IntPtr>::Enumerator it; it = mSystems->GetEnumerator(); array<System::String^>^ names = gcnew array<System::String^>( mSystems->Keys->Count ); int pos = 0; while( it.MoveNext() ) names[ pos++ ] = it.Current.Key; for( int i = 0; i < names->Length; ++i ) DestroyParticleSystem( names[i] ); mSystems->Clear(); } mSystems = nullptr; mPUMgr = NULL; mScene = nullptr; } PUManager::~PUManager() { this->!PUManager(); } bool PUManager::IsDisposed::get() { return ( mPUMgr == NULL ); } array<System::String^>^ PUManager::GetTemplateNames() { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); std::vector<Ogre::String> tNames; mPUMgr->particleSystemTemplateNames( tNames ); array<System::String^>^ names = gcnew array<System::String^>( tNames.size() ); std::vector<Ogre::String>::iterator it; int i = 0; for ( it = tNames.begin(); it != tNames.end(); ++it, ++i ) { Ogre::String name = *it; names[ i ] = TO_CLR_STRING( name ); } return names; } bool PUManager::CreateParticleSystem( System::String^ _name, System::String^ _templateName ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); if( _templateName == nullptr ) throw gcnew System::ArgumentNullException( "_templateName" ); ParticleUniverse::ParticleSystem* psys; DECLARE_OGRE_STRING( name, _name ) DECLARE_OGRE_STRING( templateName, _templateName ) psys = mPUMgr->createParticleSystem( name, templateName, mScene ); if( psys == NULL ) return false; IntPtr psysPtr = IntPtr( psys ); mSystems->Add( _name, psysPtr ); return true; } void PUManager::DestroyParticleSystem( System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; mSystems->Remove( _name ); Ogre::SceneNode* node = psys->getParentSceneNode(); if( node != NULL ) node->detachObject( psys ); mPUMgr->destroyParticleSystem( psys, mScene ); } void PUManager::AddToSceneNode( Mogre::SceneNode^ _node, System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _node == nullptr ) throw gcnew System::ArgumentNullException( "_node" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; Ogre::SceneNode* node = (Ogre::SceneNode*) _node->NativePtr; if( node == NULL ) return; node->attachObject( psys ); } void PUManager::RemoveFromSceneNode( Mogre::SceneNode^ _node, System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _node == nullptr ) throw gcnew System::ArgumentNullException( "_node" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; Ogre::SceneNode* node = (Ogre::SceneNode*) _node->NativePtr; if( node == NULL ) return; node->detachObject( psys ); } void PUManager::Start( System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; psys->start(); } void PUManager::Stop( System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; psys->stop(); } void PUManager::Pause( System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; psys->pause(); } void PUManager::Resume( System::String^ _name ) { if( IsDisposed ) throw gcnew System::ObjectDisposedException( "PUManager" ); if( _name == nullptr ) throw gcnew System::ArgumentNullException( "_name" ); ParticleUniverse::ParticleSystem* psys; psys = GetByName( _name ); if( psys == NULL ) return; psys->resume(); } ParticleUniverse::ParticleSystem* PUManager::GetByName( System::String^ _name ) { IntPtr sys; if( !mSystems->TryGetValue( _name, sys ) ) return NULL; ParticleUniverse::ParticleSystem* psys = (ParticleUniverse::ParticleSystem*) sys.ToPointer(); return psys; } }

History

Information Version
Fri 24 of Feb, 2012 16:42 GMT-0000 tafkag Added scale methods 12
Thu 28 of Apr, 2011 11:07 GMT-0000 Beauty linked to PU website where to buy it 11
Thu 03 of Mar, 2011 00:37 GMT-0000 Beauty added version notes 10
Thu 03 of Mar, 2011 00:29 GMT-0000 Beauty updated cpp file for PU 1.4 9
Thu 03 of Mar, 2011 00:28 GMT-0000 Beauty updated header file for PU 1.4 8
Thu 03 of Mar, 2011 00:21 GMT-0000 Beauty improved note related to the file plugins.cfg 7
Wed 02 of Mar, 2011 22:42 GMT-0000 Beauty added note related to the file plugins.cfg 6
Sat 19 of Feb, 2011 23:53 GMT-0000 Beauty added PU version number + compilation notes 5
Thu 17 of Feb, 2011 22:35 GMT-0000 Beauty tiny changes 4
Thu 17 of Feb, 2011 22:32 GMT-0000 Beauty added more information + forum link 3
Thu 17 of Feb, 2011 22:20 GMT-0000 Beauty added information about this code snippet 2
Wed 16 of Feb, 2011 18:01 GMT-0000 mstoyke 1