You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.6 KiB
154 lines
4.6 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
//
|
|
// File: d3drmanimationset2obj.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// d3drmAnimationSet2Obj.cpp : Implementation of CDirectApp and DLL registration.
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "Direct.h"
|
|
#include "dms.h"
|
|
#include "d3drmAnimationSet2Obj.h"
|
|
#include "d3drmAnimation2Obj.h"
|
|
#include "d3drmAnimationArrayObj.h"
|
|
|
|
extern void *g_dxj_Direct3dRMAnimationArray;
|
|
extern HRESULT BSTRtoGUID(LPGUID,BSTR);
|
|
|
|
CONSTRUCTOR( _dxj_Direct3dRMAnimationSet2,{});
|
|
DESTRUCTOR( _dxj_Direct3dRMAnimationSet2,{});
|
|
GETSET_OBJECT(_dxj_Direct3dRMAnimationSet2);
|
|
|
|
CLONE_R(_dxj_Direct3dRMAnimationSet2,Direct3DRMAnimationSet2);
|
|
SETNAME_R(_dxj_Direct3dRMAnimationSet2);
|
|
GETNAME_R(_dxj_Direct3dRMAnimationSet2);
|
|
GETCLASSNAME_R(_dxj_Direct3dRMAnimationSet2);
|
|
ADDDESTROYCALLBACK_R(_dxj_Direct3dRMAnimationSet2);
|
|
DELETEDESTROYCALLBACK_R(_dxj_Direct3dRMAnimationSet2);
|
|
|
|
PASS_THROUGH_CAST_1_R(_dxj_Direct3dRMAnimationSet2, setAppData, SetAppData, long,(DWORD));
|
|
PASS_THROUGH1_R( _dxj_Direct3dRMAnimationSet2, setTime, SetTime, d3dvalue);
|
|
|
|
GET_DIRECT_R(_dxj_Direct3dRMAnimationSet2, getAppData, GetAppData, long);
|
|
|
|
DO_GETOBJECT_ANDUSEIT_R(_dxj_Direct3dRMAnimationSet2, addAnimation, AddAnimation, _dxj_Direct3dRMAnimation2);
|
|
//DO_GETOBJECT_ANDUSEIT_R(_dxj_Direct3dRMAnimationSet2, deleteAnimation, DeleteAnimation, _dxj_Direct3dRMAnimation2);
|
|
|
|
|
|
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::deleteAnimation(I_dxj_Direct3dRMAnimation2 *anim)
|
|
{
|
|
HRESULT hr;
|
|
UINT i;
|
|
|
|
if (!anim) return E_INVALIDARG;
|
|
|
|
DO_GETOBJECT_NOTNULL(LPDIRECT3DRMANIMATION2,pRealAnim,anim);
|
|
|
|
i=pRealAnim->AddRef();
|
|
i=pRealAnim->Release();
|
|
|
|
hr=m__dxj_Direct3dRMAnimationSet2->DeleteAnimation(pRealAnim);
|
|
|
|
i=pRealAnim->AddRef();
|
|
i=pRealAnim->Release();
|
|
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::loadFromFile(BSTR filename,
|
|
VARIANT id, long flags, I_dxj_Direct3dRMLoadTextureCallback3 *callme,
|
|
IUnknown *useMe, I_dxj_Direct3dRMFrame3 *frame)
|
|
{
|
|
D3DRMLOADTEXTURE3CALLBACK d3dtcb = NULL;
|
|
LPVOID pArgs = NULL;
|
|
TextureCallback3 *tcb = NULL;
|
|
|
|
HRESULT hr;
|
|
|
|
if( callme ) {
|
|
tcb = (TextureCallback3*)AddCallbackLink((void**)&TextureCallbacks3,
|
|
(I_dxj_Direct3dRMCallback*)callme, (void*)useMe);
|
|
if( tcb ) {
|
|
d3dtcb = myLoadTextureCallback3;
|
|
pArgs = (void *)tcb;
|
|
|
|
} else {
|
|
DPF(1,"Callback object creation failed!\r\n");
|
|
return E_FAIL;
|
|
}
|
|
}
|
|
USES_CONVERSION;
|
|
LPSTR pszName = NULL;
|
|
__try { pszName = W2T(filename); /* Now convert to ANSI */ } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
|
|
|
|
DO_GETOBJECT_NOTNULL( LPDIRECT3DRMFRAME3, f, frame);
|
|
|
|
|
|
void *args=NULL;
|
|
DWORD pos=0;
|
|
GUID loadGuid;
|
|
VARIANT var;
|
|
VariantInit(&var);
|
|
if ((flags & D3DRMLOAD_BYNAME)||(D3DRMLOAD_FROMURL & flags)) {
|
|
hr=VariantChangeType(&var,&id,0,VT_BSTR);
|
|
if FAILED(hr) return E_INVALIDARG;
|
|
__try { args=(void*)W2T(V_BSTR(&id)); } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; }
|
|
}
|
|
else if(flags & D3DRMLOAD_BYPOSITION){
|
|
hr=VariantChangeType(&var,&id,0,VT_I4);
|
|
if FAILED(hr) return E_INVALIDARG;
|
|
pos=V_I4(&id);
|
|
args=&pos;
|
|
}
|
|
else if(flags & D3DRMLOAD_BYGUID){
|
|
hr=VariantChangeType(&var,&id,0,VT_BSTR);
|
|
if FAILED(hr) return E_INVALIDARG;
|
|
hr=BSTRtoGUID(&loadGuid,V_BSTR(&id));
|
|
if FAILED(hr) return E_INVALIDARG;
|
|
args=&loadGuid;
|
|
}
|
|
VariantClear(&var);
|
|
|
|
|
|
|
|
if (flags &D3DRMLOAD_FROMRESOURCE){
|
|
D3DRMLOADRESOURCE res;
|
|
ZeroMemory(&res,sizeof(D3DRMLOADRESOURCE));
|
|
res.lpName=pszName;
|
|
res.lpType="XFILE";
|
|
hr = m__dxj_Direct3dRMAnimationSet2->Load((void *)&res, (DWORD*)args, (DWORD)flags,
|
|
d3dtcb, pArgs, (IDirect3DRMFrame3*)f);
|
|
|
|
}
|
|
else {
|
|
hr = m__dxj_Direct3dRMAnimationSet2->Load((void *)pszName, (DWORD*)args, (DWORD)flags,
|
|
d3dtcb, pArgs, (IDirect3DRMFrame3*)f);
|
|
}
|
|
|
|
//We are done with the callback so remove the linked entry
|
|
if (tcb)
|
|
UndoCallbackLink( (GeneralCallback*)tcb,
|
|
(GeneralCallback**)&TextureCallbacks3 );
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP C_dxj_Direct3dRMAnimationSet2Object::getAnimations(I_dxj_Direct3dRMAnimationArray **ppret)
|
|
{
|
|
HRESULT hr;
|
|
LPDIRECT3DRMANIMATIONARRAY lpArray=NULL;
|
|
|
|
hr=m__dxj_Direct3dRMAnimationSet2->GetAnimations(&lpArray);
|
|
if FAILED(hr) return hr;
|
|
|
|
INTERNAL_CREATE(_dxj_Direct3dRMAnimationArray, lpArray, ppret);
|
|
return hr;
|
|
}
|