mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-24 09:39:51 +00:00
Move particle modifiers into a dedicated file
This commit is contained in:
parent
1d05aa2e37
commit
4a88726aba
@ -103,7 +103,7 @@ add_component_dir (sceneutil
|
|||||||
)
|
)
|
||||||
|
|
||||||
add_component_dir (nif
|
add_component_dir (nif
|
||||||
controlled effect niftypes record controller extra node record_ptr data niffile property nifkey base nifstream physics
|
base controlled controller data effect extra niffile nifkey nifstream niftypes node particle physics property record record_ptr
|
||||||
)
|
)
|
||||||
|
|
||||||
add_component_dir (nifosg
|
add_component_dir (nifosg
|
||||||
|
@ -53,90 +53,4 @@ namespace Nif
|
|||||||
nif->getSizedStrings(textures, nif->getUInt());
|
nif->getSizedStrings(textures, nif->getUInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void NiParticleModifier::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
mNext.read(nif);
|
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(3, 3, 0, 13))
|
|
||||||
mController.read(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleModifier::post(Reader& nif)
|
|
||||||
{
|
|
||||||
mNext.post(nif);
|
|
||||||
mController.post(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleGrowFade::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::read(nif);
|
|
||||||
nif->read(mGrowTime);
|
|
||||||
nif->read(mFadeTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleColorModifier::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::read(nif);
|
|
||||||
|
|
||||||
mData.read(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleColorModifier::post(Reader& nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::post(nif);
|
|
||||||
|
|
||||||
mData.post(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiGravity::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::read(nif);
|
|
||||||
|
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(3, 3, 0, 13))
|
|
||||||
nif->read(mDecay);
|
|
||||||
nif->read(mForce);
|
|
||||||
mType = static_cast<ForceType>(nif->get<uint32_t>());
|
|
||||||
nif->read(mPosition);
|
|
||||||
nif->read(mDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleCollider::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::read(nif);
|
|
||||||
|
|
||||||
nif->read(mBounceFactor);
|
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(4, 2, 0, 2))
|
|
||||||
{
|
|
||||||
nif->read(mSpawnOnCollision);
|
|
||||||
nif->read(mDieOnCollision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiPlanarCollider::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleCollider::read(nif);
|
|
||||||
|
|
||||||
nif->read(mExtents);
|
|
||||||
nif->read(mPosition);
|
|
||||||
nif->read(mXVector);
|
|
||||||
nif->read(mYVector);
|
|
||||||
nif->read(mPlaneNormal);
|
|
||||||
nif->read(mPlaneDistance);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiSphericalCollider::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleCollider::read(nif);
|
|
||||||
|
|
||||||
nif->read(mRadius);
|
|
||||||
nif->read(mCenter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiParticleRotation::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
NiParticleModifier::read(nif);
|
|
||||||
|
|
||||||
nif->read(mRandomInitialAxis);
|
|
||||||
nif->read(mInitialAxis);
|
|
||||||
nif->read(mRotationSpeed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,3 @@
|
|||||||
/*
|
|
||||||
OpenMW - The completely unofficial reimplementation of Morrowind
|
|
||||||
Copyright (C) 2008-2010 Nicolay Korslund
|
|
||||||
Email: < korslund@gmail.com >
|
|
||||||
WWW: https://openmw.org/
|
|
||||||
|
|
||||||
This file (controlled.h) is part of the OpenMW package.
|
|
||||||
|
|
||||||
OpenMW is distributed as free software: you can redistribute it
|
|
||||||
and/or modify it under the terms of the GNU General Public License
|
|
||||||
version 3, as published by the Free Software Foundation.
|
|
||||||
|
|
||||||
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
|
|
||||||
version 3 along with this program. If not, see
|
|
||||||
https://www.gnu.org/licenses/ .
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef OPENMW_COMPONENTS_NIF_CONTROLLED_HPP
|
#ifndef OPENMW_COMPONENTS_NIF_CONTROLLED_HPP
|
||||||
#define OPENMW_COMPONENTS_NIF_CONTROLLED_HPP
|
#define OPENMW_COMPONENTS_NIF_CONTROLLED_HPP
|
||||||
|
|
||||||
@ -83,85 +60,5 @@ namespace Nif
|
|||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NiParticleModifier : public Record
|
}
|
||||||
{
|
|
||||||
NiParticleModifierPtr mNext;
|
|
||||||
ControllerPtr mController;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
void post(Reader& nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiParticleGrowFade : public NiParticleModifier
|
|
||||||
{
|
|
||||||
float mGrowTime;
|
|
||||||
float mFadeTime;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiParticleColorModifier : public NiParticleModifier
|
|
||||||
{
|
|
||||||
NiColorDataPtr mData;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
void post(Reader& nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiGravity : public NiParticleModifier
|
|
||||||
{
|
|
||||||
enum class ForceType : uint32_t
|
|
||||||
{
|
|
||||||
Wind = 0, // Fixed direction
|
|
||||||
Point = 1, // Fixed origin
|
|
||||||
};
|
|
||||||
|
|
||||||
float mDecay{ 0.f };
|
|
||||||
float mForce;
|
|
||||||
ForceType mType;
|
|
||||||
osg::Vec3f mPosition;
|
|
||||||
osg::Vec3f mDirection;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiParticleCollider : public NiParticleModifier
|
|
||||||
{
|
|
||||||
float mBounceFactor;
|
|
||||||
bool mSpawnOnCollision{ false };
|
|
||||||
bool mDieOnCollision{ false };
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
// NiPinaColada
|
|
||||||
struct NiPlanarCollider : public NiParticleCollider
|
|
||||||
{
|
|
||||||
osg::Vec2f mExtents;
|
|
||||||
osg::Vec3f mPosition;
|
|
||||||
osg::Vec3f mXVector, mYVector;
|
|
||||||
osg::Vec3f mPlaneNormal;
|
|
||||||
float mPlaneDistance;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiSphericalCollider : public NiParticleCollider
|
|
||||||
{
|
|
||||||
float mRadius;
|
|
||||||
osg::Vec3f mCenter;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NiParticleRotation : public NiParticleModifier
|
|
||||||
{
|
|
||||||
uint8_t mRandomInitialAxis;
|
|
||||||
osg::Vec3f mInitialAxis;
|
|
||||||
float mRotationSpeed;
|
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // Namespace
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "controlled.hpp"
|
#include "controlled.hpp"
|
||||||
#include "data.hpp"
|
#include "data.hpp"
|
||||||
#include "node.hpp"
|
#include "node.hpp"
|
||||||
#include "recordptr.hpp"
|
#include "particle.hpp"
|
||||||
|
|
||||||
namespace Nif
|
namespace Nif
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "exception.hpp"
|
#include "exception.hpp"
|
||||||
#include "extra.hpp"
|
#include "extra.hpp"
|
||||||
#include "node.hpp"
|
#include "node.hpp"
|
||||||
|
#include "particle.hpp"
|
||||||
#include "physics.hpp"
|
#include "physics.hpp"
|
||||||
#include "property.hpp"
|
#include "property.hpp"
|
||||||
|
|
||||||
|
95
components/nif/particle.cpp
Normal file
95
components/nif/particle.cpp
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#include "particle.hpp"
|
||||||
|
|
||||||
|
#include "data.hpp"
|
||||||
|
|
||||||
|
namespace Nif
|
||||||
|
{
|
||||||
|
|
||||||
|
void NiParticleModifier::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
mNext.read(nif);
|
||||||
|
if (nif->getVersion() >= NIFStream::generateVersion(3, 3, 0, 13))
|
||||||
|
mController.read(nif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleModifier::post(Reader& nif)
|
||||||
|
{
|
||||||
|
mNext.post(nif);
|
||||||
|
mController.post(nif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleGrowFade::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::read(nif);
|
||||||
|
nif->read(mGrowTime);
|
||||||
|
nif->read(mFadeTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleColorModifier::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::read(nif);
|
||||||
|
|
||||||
|
mData.read(nif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleColorModifier::post(Reader& nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::post(nif);
|
||||||
|
|
||||||
|
mData.post(nif);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiGravity::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::read(nif);
|
||||||
|
|
||||||
|
if (nif->getVersion() >= NIFStream::generateVersion(3, 3, 0, 13))
|
||||||
|
nif->read(mDecay);
|
||||||
|
nif->read(mForce);
|
||||||
|
mType = static_cast<ForceType>(nif->get<uint32_t>());
|
||||||
|
nif->read(mPosition);
|
||||||
|
nif->read(mDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleCollider::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::read(nif);
|
||||||
|
|
||||||
|
nif->read(mBounceFactor);
|
||||||
|
if (nif->getVersion() >= NIFStream::generateVersion(4, 2, 0, 2))
|
||||||
|
{
|
||||||
|
nif->read(mSpawnOnCollision);
|
||||||
|
nif->read(mDieOnCollision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiPlanarCollider::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleCollider::read(nif);
|
||||||
|
|
||||||
|
nif->read(mExtents);
|
||||||
|
nif->read(mPosition);
|
||||||
|
nif->read(mXVector);
|
||||||
|
nif->read(mYVector);
|
||||||
|
nif->read(mPlaneNormal);
|
||||||
|
nif->read(mPlaneDistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiSphericalCollider::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleCollider::read(nif);
|
||||||
|
|
||||||
|
nif->read(mRadius);
|
||||||
|
nif->read(mCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiParticleRotation::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
NiParticleModifier::read(nif);
|
||||||
|
|
||||||
|
nif->read(mRandomInitialAxis);
|
||||||
|
nif->read(mInitialAxis);
|
||||||
|
nif->read(mRotationSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
90
components/nif/particle.hpp
Normal file
90
components/nif/particle.hpp
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
#ifndef OPENMW_COMPONENTS_NIF_PARTICLE_HPP
|
||||||
|
#define OPENMW_COMPONENTS_NIF_PARTICLE_HPP
|
||||||
|
|
||||||
|
#include "base.hpp"
|
||||||
|
|
||||||
|
namespace Nif
|
||||||
|
{
|
||||||
|
|
||||||
|
struct NiParticleModifier : public Record
|
||||||
|
{
|
||||||
|
NiParticleModifierPtr mNext;
|
||||||
|
ControllerPtr mController;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
void post(Reader& nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiParticleGrowFade : public NiParticleModifier
|
||||||
|
{
|
||||||
|
float mGrowTime;
|
||||||
|
float mFadeTime;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiParticleColorModifier : public NiParticleModifier
|
||||||
|
{
|
||||||
|
NiColorDataPtr mData;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
void post(Reader& nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiGravity : public NiParticleModifier
|
||||||
|
{
|
||||||
|
enum class ForceType : uint32_t
|
||||||
|
{
|
||||||
|
Wind = 0, // Fixed direction
|
||||||
|
Point = 1, // Fixed origin
|
||||||
|
};
|
||||||
|
|
||||||
|
float mDecay{ 0.f };
|
||||||
|
float mForce;
|
||||||
|
ForceType mType;
|
||||||
|
osg::Vec3f mPosition;
|
||||||
|
osg::Vec3f mDirection;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiParticleCollider : public NiParticleModifier
|
||||||
|
{
|
||||||
|
float mBounceFactor;
|
||||||
|
bool mSpawnOnCollision{ false };
|
||||||
|
bool mDieOnCollision{ false };
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
// NiPinaColada
|
||||||
|
struct NiPlanarCollider : public NiParticleCollider
|
||||||
|
{
|
||||||
|
osg::Vec2f mExtents;
|
||||||
|
osg::Vec3f mPosition;
|
||||||
|
osg::Vec3f mXVector, mYVector;
|
||||||
|
osg::Vec3f mPlaneNormal;
|
||||||
|
float mPlaneDistance;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiSphericalCollider : public NiParticleCollider
|
||||||
|
{
|
||||||
|
float mRadius;
|
||||||
|
osg::Vec3f mCenter;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiParticleRotation : public NiParticleModifier
|
||||||
|
{
|
||||||
|
uint8_t mRandomInitialAxis;
|
||||||
|
osg::Vec3f mInitialAxis;
|
||||||
|
float mRotationSpeed;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
@ -10,7 +10,7 @@
|
|||||||
#include <osgParticle/Placer>
|
#include <osgParticle/Placer>
|
||||||
#include <osgParticle/Shooter>
|
#include <osgParticle/Shooter>
|
||||||
|
|
||||||
#include <components/nif/controlled.hpp> // NiGravity::ForceType
|
#include <components/nif/particle.hpp> // NiGravity::ForceType
|
||||||
|
|
||||||
#include <components/sceneutil/nodecallback.hpp>
|
#include <components/sceneutil/nodecallback.hpp>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user