/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
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
along with this program. If not, see .
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#ifndef PL_COMPONENT_TOOLS_H
#define PL_COMPONENT_TOOLS_H
#include "hsTypes.h"
#include "hsTemplates.h"
#include "pnKeyedObject/plKey.h"
class INode;
class plModifier;
class plKey;
class plLocation;
class plResponderModifier;
class plComponentBase;
class plMaxNodeBase;
typedef plKey (*PAddModFunc) (plMaxNodeBase *, plModifier *);
typedef plKey (*PGetNewKeyFunc) (const char*, plModifier*, plLocation);
typedef void (*PSetActivatorKeyFunc) (plMaxNodeBase*, plMaxNodeBase*, plMaxNodeBase*, plResponderModifier*);
typedef plKey (*PGetAnimModKeyFunc) (plComponentBase*, plMaxNodeBase*);
typedef const char* (*PGetAnimNameFunc) (plComponentBase*);
typedef int (*PGetMaterialAnimModKeyFunc) (Mtl* mtl, plMaxNodeBase* node, const char *segName, hsTArray& keys);
typedef int (*PGetSoundNameAndIndex) (plComponentBase*, plMaxNodeBase* node, const char*& name);
//
// A "toolbox" for external components to do their conversion with. The idea
// is to give components the functions they need without pulling in every source
// file.
//
class plComponentTools
{
protected:
PAddModFunc fAddModFunc;
PGetNewKeyFunc fNewKey;
PSetActivatorKeyFunc fActivator;
PGetAnimModKeyFunc fAnimKey;
// PGetAnimModKeyFunc fAnimLightKey;
PGetAnimNameFunc fAnimName;
PGetMaterialAnimModKeyFunc fMatMod;
PGetSoundNameAndIndex fSndNameAndIdx;
plComponentTools() {}
public:
plComponentTools(PAddModFunc addMod,
PGetNewKeyFunc NewKey,
PSetActivatorKeyFunc activator,
PGetAnimModKeyFunc animKey,
// PGetAnimModKeyFunc animLightKey,
PGetAnimNameFunc animName,
PGetMaterialAnimModKeyFunc matMod,
PGetSoundNameAndIndex sndNameAndIdx)
: fAddModFunc(addMod),
fNewKey(NewKey),
fActivator(activator),
fAnimKey(animKey),
// fAnimLightKey(animLightKey),
fAnimName(animName),
fMatMod(matMod),
fSndNameAndIdx(sndNameAndIdx)
{}
plKey AddModifier(plMaxNodeBase *node, plModifier *mod);
plKey GetNewKey(const char *name, plModifier *mod, plLocation loc);
void SetActivatorKey(plMaxNodeBase *activatorNode, plMaxNodeBase *responderNode, plMaxNodeBase *convertNode, plResponderModifier *responderLogic);
const char *GetAnimCompAnimName(plComponentBase *comp);
plKey GetAnimCompModKey(plComponentBase *comp, plMaxNodeBase *node);
// plKey GetAnimCompLightModKey(plComponentBase *comp, plMaxNodeBase *node);
int GetMaterialAnimModKey(Mtl* mtl, plMaxNodeBase* node, const char *segName, hsTArray& keys);
int GetSoundNameAndIndex(plComponentBase* comp, plMaxNodeBase* node, const char*& name);
};
#endif //PL_COMPONENT_TOOLS_H