Implemented KRUnknown and KRUnknownManager to allow applications to use Kraken's resource management functionality for application-specific files.
--HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%40203
This commit is contained in:
@@ -35,6 +35,7 @@ KRContext::KRContext() {
|
||||
m_pSceneManager = new KRSceneManager(*this);
|
||||
m_pAnimationManager = new KRAnimationManager(*this);
|
||||
m_pAnimationCurveManager = new KRAnimationCurveManager(*this);
|
||||
m_pUnknownManager = new KRUnknownManager(*this);
|
||||
m_bDetectedExtensions = false;
|
||||
m_current_frame = 0;
|
||||
m_absolute_time = 0.0f;
|
||||
@@ -76,6 +77,11 @@ KRContext::~KRContext() {
|
||||
delete m_pAnimationCurveManager;
|
||||
m_pAnimationCurveManager = NULL;
|
||||
}
|
||||
|
||||
if(m_pUnknownManager) {
|
||||
delete m_pUnknownManager;
|
||||
m_pUnknownManager = NULL;
|
||||
}
|
||||
|
||||
// The bundles must be destroyed last, as the other objects may be using mmap'ed data from bundles
|
||||
if(m_pBundleManager) {
|
||||
@@ -108,6 +114,9 @@ KRAnimationManager *KRContext::getAnimationManager() {
|
||||
KRAnimationCurveManager *KRContext::getAnimationCurveManager() {
|
||||
return m_pAnimationCurveManager;
|
||||
}
|
||||
KRUnknownManager *KRContext::getUnknownManager() {
|
||||
return m_pUnknownManager;
|
||||
}
|
||||
|
||||
void KRContext::loadResource(const std::string &file_name, KRDataBlock *data) {
|
||||
std::string name = KRResource::GetFileBase(file_name);
|
||||
@@ -136,7 +145,7 @@ void KRContext::loadResource(const std::string &file_name, KRDataBlock *data) {
|
||||
} else if(extension.compare("mtl") == 0) {
|
||||
m_pMaterialManager->load(name.c_str(), data);
|
||||
} else {
|
||||
fprintf(stderr, "KRContext::loadResource - Unknown resource file type: %s\n", file_name.c_str());
|
||||
m_pUnknownManager->load(name, extension, data);
|
||||
delete data;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#import "KRModelManager.h"
|
||||
#import "KRAnimationManager.h"
|
||||
#import "KRAnimationCurveManager.h"
|
||||
#import "KRUnknownManager.h"
|
||||
|
||||
class KRContext {
|
||||
public:
|
||||
@@ -47,6 +48,7 @@ public:
|
||||
KRModelManager *getModelManager();
|
||||
KRAnimationManager *getAnimationManager();
|
||||
KRAnimationCurveManager *getAnimationCurveManager();
|
||||
KRUnknownManager *getUnknownManager();
|
||||
|
||||
KRCamera *createCamera(int width, int height);
|
||||
|
||||
@@ -74,6 +76,7 @@ private:
|
||||
KRModelManager *m_pModelManager;
|
||||
KRAnimationManager *m_pAnimationManager;
|
||||
KRAnimationCurveManager *m_pAnimationCurveManager;
|
||||
KRUnknownManager *m_pUnknownManager;
|
||||
|
||||
void detectExtensions();
|
||||
bool m_bDetectedExtensions;
|
||||
|
||||
42
KREngine/KREngine/Classes/KRUnknown.cpp
Normal file
42
KREngine/KREngine/Classes/KRUnknown.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// KRUnknown.cpp
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#include "KRUnknown.h"
|
||||
|
||||
KRUnknown::KRUnknown(KRContext &context, std::string name, std::string extension) : KRResource(context, name)
|
||||
{
|
||||
m_pData = new KRDataBlock();
|
||||
m_extension = extension;
|
||||
}
|
||||
|
||||
KRUnknown::KRUnknown(KRContext &context, std::string name, std::string extension, KRDataBlock *data) : KRResource(context, name)
|
||||
{
|
||||
m_pData = data;
|
||||
m_extension = extension;
|
||||
}
|
||||
|
||||
KRUnknown::~KRUnknown()
|
||||
{
|
||||
delete m_pData;
|
||||
}
|
||||
|
||||
std::string KRUnknown::getExtension()
|
||||
{
|
||||
return m_extension;
|
||||
}
|
||||
|
||||
bool KRUnknown::save(KRDataBlock &data)
|
||||
{
|
||||
data.append(*m_pData);
|
||||
return true;
|
||||
}
|
||||
|
||||
KRDataBlock *KRUnknown::getData()
|
||||
{
|
||||
return m_pData;
|
||||
}
|
||||
37
KREngine/KREngine/Classes/KRUnknown.h
Normal file
37
KREngine/KREngine/Classes/KRUnknown.h
Normal file
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// KRUnknown.h
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef KRUNKNOWN_H
|
||||
#define KRUNKNOWN_H
|
||||
|
||||
#import "KREngine-common.h"
|
||||
#import "KRContextObject.h"
|
||||
#import "KRDataBlock.h"
|
||||
#import "KRResource.h"
|
||||
#import <map>
|
||||
|
||||
class KRUnknown : public KRResource {
|
||||
|
||||
public:
|
||||
KRUnknown(KRContext &context, std::string name, std::string extension);
|
||||
KRUnknown(KRContext &context, std::string name, std::string extension, KRDataBlock *data);
|
||||
virtual ~KRUnknown();
|
||||
|
||||
virtual std::string getExtension();
|
||||
|
||||
virtual bool save(KRDataBlock &data);
|
||||
|
||||
KRDataBlock *getData();
|
||||
|
||||
private:
|
||||
|
||||
std::string m_extension;
|
||||
KRDataBlock *m_pData;
|
||||
};
|
||||
|
||||
#endif /* defined(KRUNKNOWN_H) */
|
||||
73
KREngine/KREngine/Classes/KRUnknownManager.cpp
Normal file
73
KREngine/KREngine/Classes/KRUnknownManager.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// FileManager.cpp
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#include "KRUnknownManager.h"
|
||||
|
||||
KRUnknownManager::KRUnknownManager(KRContext &context) : KRContextObject(context)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
KRUnknownManager::~KRUnknownManager()
|
||||
{
|
||||
for(map<std::string, map<std::string, KRUnknown *> >::iterator extension_itr = m_unknowns.begin(); extension_itr != m_unknowns.end(); extension_itr++) {
|
||||
for(map<std::string, KRUnknown *>::iterator name_itr=(*extension_itr).second.begin(); name_itr != (*extension_itr).second.end(); name_itr++) {
|
||||
delete (*name_itr).second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KRUnknownManager::add(KRUnknown *unknown)
|
||||
{
|
||||
std::string lower_name = unknown->getName();
|
||||
std::string lower_extension = unknown->getExtension();
|
||||
|
||||
std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower);
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
|
||||
map<std::string, map<std::string, KRUnknown *> >::iterator extension_itr = m_unknowns.find(lower_extension);
|
||||
if(extension_itr == m_unknowns.end()) {
|
||||
m_unknowns[lower_name] = map<std::string, KRUnknown *>();
|
||||
extension_itr = m_unknowns.find(lower_extension);
|
||||
}
|
||||
|
||||
map<std::string, KRUnknown *>::iterator name_itr = (*extension_itr).second.find(lower_name);
|
||||
if(name_itr != (*extension_itr).second.end()) {
|
||||
delete (*name_itr).second;
|
||||
(*name_itr).second = unknown;
|
||||
} else {
|
||||
(*extension_itr).second[lower_extension] = unknown;
|
||||
}
|
||||
}
|
||||
|
||||
KRUnknown *KRUnknownManager::load(const std::string &name, const std::string &extension, KRDataBlock *data)
|
||||
{
|
||||
KRUnknown *unknown = new KRUnknown(getContext(), name, extension, data);
|
||||
if(unknown) add(unknown);
|
||||
return unknown;
|
||||
}
|
||||
|
||||
KRUnknown *KRUnknownManager::get(const std::string &name, const std::string &extension)
|
||||
{
|
||||
std::string lower_name = name;
|
||||
std::string lower_extension = extension;
|
||||
|
||||
std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower);
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
|
||||
return m_unknowns[lower_extension][lower_name];
|
||||
}
|
||||
|
||||
|
||||
const map<std::string, KRUnknown *> &KRUnknownManager::get(const std::string &extension)
|
||||
{
|
||||
std::string lower_extension = extension;
|
||||
std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower);
|
||||
return m_unknowns[lower_extension];
|
||||
}
|
||||
|
||||
42
KREngine/KREngine/Classes/KRUnknownManager.h
Normal file
42
KREngine/KREngine/Classes/KRUnknownManager.h
Normal file
@@ -0,0 +1,42 @@
|
||||
//
|
||||
// FileManager.h
|
||||
// KREngine
|
||||
//
|
||||
// Created by Kearwood Gilbert on 2013-01-02.
|
||||
// Copyright (c) 2013 Kearwood Software. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef KRUNKNOWN_MANAGER_H
|
||||
#define KRUNKNOWN_MANAGER_H
|
||||
|
||||
#import "KREngine-common.h"
|
||||
|
||||
#include "KRUnknown.h"
|
||||
#include "KRContextObject.h"
|
||||
#include "KRDataBlock.h"
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
|
||||
using std::map;
|
||||
using std::set;
|
||||
|
||||
class KRUnknownManager : public KRContextObject {
|
||||
public:
|
||||
KRUnknownManager(KRContext &context);
|
||||
virtual ~KRUnknownManager();
|
||||
|
||||
void add(KRUnknown *unknown);
|
||||
|
||||
KRUnknown *load(const std::string &name, const std::string &extension, KRDataBlock *data);
|
||||
KRUnknown *get(const std::string &name, const std::string &extension);
|
||||
|
||||
|
||||
const map<std::string, KRUnknown *> &get(const std::string &extension);
|
||||
|
||||
private:
|
||||
map<std::string, map<std::string, KRUnknown *> > m_unknowns;
|
||||
};
|
||||
|
||||
#endif /* defined(KRUNKNOWN_MANAGER_H) */
|
||||
Reference in New Issue
Block a user