Big skeletal animation update
Added MeshInfos demo Added MD5Mesh/MD5Anim loader support Added Node class Fixed ResourceParams not being exported Added support for skeletal animation (Animation/Mesh/Joint/SkeletalMesh/Skeleton) Meshes are now only stored with VertexStruct_XYZ_Normal_UV_Tangent type Moved Sequence declaration to Sequence.hpp -Animation: Renamed Create to Create[Keyframe|Skeletal] -AxisAlignedBox: Added Contains method Added GetCorner method Added GetCube method Added Transform method -Cube/Rect: Added GetPosition method Added GetSize method (Almost) Fixed ExtendTo method Fixed GetCenter method -File: Added GetDirectory static function Added GetPath method Renamed GetDirectoryPath method to GetDirectory -Math module: Fixed constructor/methods taking a non-const array GetNormal/Normalize methods now takes an optionnal integer pointer (returning length) Made all classes default constructor trivial Inverse, MakeIdentity, MakeZero, Normalize, Set methods now returns reference to object -Matrix4: Modified methods to avoid copies Removed COW (Too much overhead) Removed Concatenate[Affine] static function -Mesh: Renamed Create to Create[Keyframe|Skeletal|Static] Renamed Skin to Material -MeshParams: No longer takes declaration argument Renamed loadAnimations to animated Storage default to BufferStorage_Hardware if supported and BufferStorage_Software otherwise -OpenGL: Added glGetBooleanv function Added glIsEnabled function -Quaternion: Added ComputeW method Added Conjugate method -Renderer: Added IsEnabled static function Fixed GetLineWidth function not being static Removed SetVertexDeclaration -RenderWindow: Made CopyTo[Image|Texture] method constant -Resource Fixed RemoveResourceListener crash -ResourceLoader: Loaders are now used in a LIFO context -Stream: Renamed GetLine method to ReadLine -String: Fixed Simplified -Utility module Added configuration define for strict resource parsing -VertexBuffer Now takes a VertexDeclaration pointer -VertexDeclaration No longer throw an error when getting a non-existing element Former-commit-id: f7358c1231d6af48b799d2f24f077a001e16785b
This commit is contained in:
@@ -158,18 +158,11 @@ nzUInt64 NzFile::GetCursorPos() const
|
||||
return m_impl->GetCursorPos();
|
||||
}
|
||||
|
||||
NzString NzFile::GetDirectoryPath() const
|
||||
NzString NzFile::GetDirectory() const
|
||||
{
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
return m_filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true);
|
||||
}
|
||||
|
||||
NzString NzFile::GetFilePath() const
|
||||
{
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
return m_filePath;
|
||||
return m_filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true, true);
|
||||
}
|
||||
|
||||
NzString NzFile::GetFileName() const
|
||||
@@ -193,6 +186,13 @@ time_t NzFile::GetLastWriteTime() const
|
||||
return GetLastWriteTime(m_filePath);
|
||||
}
|
||||
|
||||
NzString NzFile::GetPath() const
|
||||
{
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
return m_filePath;
|
||||
}
|
||||
|
||||
nzUInt64 NzFile::GetSize() const
|
||||
{
|
||||
NazaraLock(m_mutex)
|
||||
@@ -602,6 +602,11 @@ time_t NzFile::GetCreationTime(const NzString& filePath)
|
||||
return NzFileImpl::GetCreationTime(NormalizePath(filePath));
|
||||
}
|
||||
|
||||
NzString NzFile::GetDirectory(const NzString& filePath)
|
||||
{
|
||||
return filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true, true);
|
||||
}
|
||||
|
||||
time_t NzFile::GetLastAccessTime(const NzString& filePath)
|
||||
{
|
||||
if (filePath.IsEmpty())
|
||||
@@ -642,29 +647,25 @@ nzUInt64 NzFile::GetSize(const NzString& filePath)
|
||||
return NzFileImpl::GetSize(NormalizePath(filePath));
|
||||
}
|
||||
|
||||
bool NzFile::IsAbsolute(const NzString& path)
|
||||
bool NzFile::IsAbsolute(const NzString& filePath)
|
||||
{
|
||||
NzString wpath(path);
|
||||
wpath.Trim();
|
||||
|
||||
if (wpath.IsEmpty())
|
||||
NzString path(filePath.Trimmed());
|
||||
if (path.IsEmpty())
|
||||
return false;
|
||||
|
||||
#if NAZARA_CORE_NORMALIZE_DIRECTORY_SEPARATORS
|
||||
wpath = NormalizeSeparators(wpath);
|
||||
#endif
|
||||
path = NormalizeSeparators(path);
|
||||
|
||||
#ifdef NAZARA_PLATFORM_WINDOWS
|
||||
if (path.Match("?:*"))
|
||||
if (path.Match("?:*")) // Ex: C:\Hello
|
||||
return true;
|
||||
else if (path.Match("\\\\*"))
|
||||
else if (path.Match("\\\\*")) // Ex: \\Laptop
|
||||
return true;
|
||||
else if (wpath.StartsWith('\\')) // Spécial : '\' fait référence au disque racine
|
||||
else if (path.StartsWith('\\')) // Spécial : '\' fait référence au disque racine
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
#elif defined(NAZARA_PLATEFORM_LINUX)
|
||||
return wpath.StartsWith('/');
|
||||
return path.StartsWith('/');
|
||||
#else
|
||||
#error OS case not implemented
|
||||
#endif
|
||||
@@ -672,12 +673,7 @@ bool NzFile::IsAbsolute(const NzString& path)
|
||||
|
||||
NzString NzFile::NormalizePath(const NzString& filePath)
|
||||
{
|
||||
NzString path(filePath);
|
||||
path.Trim();
|
||||
|
||||
#if NAZARA_CORE_NORMALIZE_DIRECTORY_SEPARATORS
|
||||
path = NormalizeSeparators(path);
|
||||
#endif
|
||||
NzString path = NormalizeSeparators(filePath.Trimmed());
|
||||
|
||||
if (!IsAbsolute(path))
|
||||
path = NzDirectory::GetCurrent() + NAZARA_DIRECTORY_SEPARATOR + path;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
NzInputStream::~NzInputStream() = default;
|
||||
|
||||
NzString NzInputStream::GetLine(unsigned int lineSize)
|
||||
NzString NzInputStream::ReadLine(unsigned int lineSize)
|
||||
{
|
||||
NzString line;
|
||||
if (lineSize == 0) // Taille maximale indéterminée
|
||||
|
||||
@@ -79,7 +79,7 @@ NzString NzLog::GetFile() const
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
if (m_file)
|
||||
return m_file->GetFilePath();
|
||||
return m_file->GetPath();
|
||||
else
|
||||
return NzString();
|
||||
}
|
||||
|
||||
@@ -23,9 +23,13 @@ m_resourceReferenceCount(0)
|
||||
NzResource::~NzResource()
|
||||
{
|
||||
EnsureResourceListenerUpdate();
|
||||
for (const NzResourceEntry& entry : m_resourceListenersCache)
|
||||
entry.listener->OnResourceReleased(this, entry.index);
|
||||
|
||||
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
|
||||
(*it).listener->OnResourceReleased(this, (*it).index);
|
||||
#if NAZARA_CORE_SAFE
|
||||
if (m_resourceReferenceCount > 0)
|
||||
NazaraWarning("Resource destroyed while still referenced " + NzString::Number(m_resourceReferenceCount) + " time(s)");
|
||||
#endif
|
||||
}
|
||||
|
||||
void NzResource::AddResourceListener(NzResourceListener* listener, int index) const
|
||||
@@ -57,14 +61,31 @@ bool NzResource::IsPersistent() const
|
||||
|
||||
void NzResource::RemoveResourceListener(NzResourceListener* listener) const
|
||||
{
|
||||
NazaraLock(m_mutex)
|
||||
NazaraMutexLock(m_mutex);
|
||||
|
||||
if (m_resourceListeners.erase(listener) != 0)
|
||||
m_resourceListenerUpdated = false;
|
||||
else
|
||||
NazaraError(NzString::Pointer(listener) + " is not listening to " + NzString::Pointer(this));
|
||||
NazaraError(NzString::Pointer(listener) + " is not a listener of " + NzString::Pointer(this));
|
||||
|
||||
RemoveResourceReference();
|
||||
// RemoveResourceReference()
|
||||
#if NAZARA_CORE_SAFE
|
||||
if (m_resourceReferenceCount == 0)
|
||||
{
|
||||
NazaraError("Impossible to remove reference (Ref. counter is already 0)");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (--m_resourceReferenceCount == 0 && !m_resourcePersistent)
|
||||
{
|
||||
NazaraMutexUnlock(m_mutex);
|
||||
delete this;
|
||||
}
|
||||
else
|
||||
{
|
||||
NazaraMutexUnlock(m_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
void NzResource::RemoveResourceReference() const
|
||||
@@ -112,9 +133,8 @@ void NzResource::NotifyCreated()
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
EnsureResourceListenerUpdate();
|
||||
|
||||
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
|
||||
(*it).listener->OnResourceCreated(this, (*it).index);
|
||||
for (const NzResourceEntry& entry : m_resourceListenersCache)
|
||||
entry.listener->OnResourceCreated(this, entry.index);
|
||||
}
|
||||
|
||||
void NzResource::NotifyDestroy()
|
||||
@@ -122,9 +142,8 @@ void NzResource::NotifyDestroy()
|
||||
NazaraLock(m_mutex)
|
||||
|
||||
EnsureResourceListenerUpdate();
|
||||
|
||||
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
|
||||
(*it).listener->OnResourceDestroy(this, (*it).index);
|
||||
for (const NzResourceEntry& entry : m_resourceListenersCache)
|
||||
entry.listener->OnResourceDestroy(this, entry.index);
|
||||
}
|
||||
|
||||
void NzResource::EnsureResourceListenerUpdate() const
|
||||
|
||||
@@ -7,6 +7,16 @@
|
||||
|
||||
NzStream::~NzStream() = default;
|
||||
|
||||
NzString NzStream::GetDirectory() const
|
||||
{
|
||||
return NzString();
|
||||
}
|
||||
|
||||
NzString NzStream::GetPath() const
|
||||
{
|
||||
return NzString();
|
||||
}
|
||||
|
||||
unsigned int NzStream::GetStreamOptions() const
|
||||
{
|
||||
return m_streamOptions;
|
||||
|
||||
@@ -3369,7 +3369,7 @@ NzString NzString::Simplified(nzUInt32 flags) const
|
||||
while (++ptr != limit);
|
||||
}
|
||||
|
||||
if (!inword)
|
||||
if (!inword && p != str)
|
||||
p--;
|
||||
|
||||
*p = '\0';
|
||||
@@ -4040,7 +4040,7 @@ NzString NzString::Trimmed(char character, nzUInt32 flags) const
|
||||
{
|
||||
for (; endPos > 0; --endPos)
|
||||
{
|
||||
if (nzToLower(m_sharedString->string[startPos]) != ch)
|
||||
if (nzToLower(m_sharedString->string[endPos]) != ch)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4060,7 +4060,7 @@ NzString NzString::Trimmed(char character, nzUInt32 flags) const
|
||||
{
|
||||
for (; endPos > 0; --endPos)
|
||||
{
|
||||
if (m_sharedString->string[startPos] != character)
|
||||
if (m_sharedString->string[endPos] != character)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,10 +11,8 @@
|
||||
NzSemaphoreImpl::NzSemaphoreImpl(unsigned int count)
|
||||
{
|
||||
m_semaphore = CreateSemaphore(nullptr, count, std::numeric_limits<LONG>::max(), nullptr);
|
||||
#if NAZARA_CORE_SAFE ///FIXME: Ne peut échouer qu'à cause de mauvais paramètres ?
|
||||
if (!m_semaphore)
|
||||
NazaraError("Failed to create semaphore: " + NzGetLastSystemError());
|
||||
#endif
|
||||
}
|
||||
|
||||
NzSemaphoreImpl::~NzSemaphoreImpl()
|
||||
|
||||
Reference in New Issue
Block a user