Initial commit: ROW Client source code
Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// File: SourceInfo.cpp
|
||||
//
|
||||
// Desc: DirectShow sample code
|
||||
// Implementation of CMediaList, play-list of media files
|
||||
//
|
||||
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "SourceInfo.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
CMediaList::CMediaList() :
|
||||
m_avgDuration(0L),
|
||||
m_N(0),
|
||||
m_ppSI(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
CMediaList::~CMediaList()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void CMediaList::Clean()
|
||||
{
|
||||
for( int i=0; i<m_N; i++)
|
||||
{
|
||||
delete m_ppSI[i];
|
||||
m_ppSI[i] = NULL;
|
||||
}// for
|
||||
|
||||
delete[] m_ppSI;
|
||||
m_ppSI = NULL;
|
||||
m_N = 0;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CMediaList::Add
|
||||
// Desc: adds a new source to the media list
|
||||
// return: true if success, false otherwise
|
||||
//------------------------------------------------------------------------------
|
||||
bool CMediaList::Add( SourceInfo * pSI)
|
||||
{
|
||||
SourceInfo ** ppSInew = NULL;
|
||||
|
||||
ppSInew = new SourceInfo*[m_N+1];
|
||||
if( !ppSInew )
|
||||
return false;
|
||||
|
||||
for( int i=0; i<m_N; i++)
|
||||
{
|
||||
ppSInew[i] = m_ppSI[i];
|
||||
}// for
|
||||
|
||||
ppSInew[m_N] = pSI;
|
||||
delete[] m_ppSI;
|
||||
m_ppSI = ppSInew;
|
||||
m_N++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CMediaList::Shuffle()
|
||||
// Desc: randomly shuffles media list content to
|
||||
// have different playback settings every time
|
||||
//------------------------------------------------------------------------------
|
||||
void CMediaList::Shuffle()
|
||||
{
|
||||
SourceInfo *pSIaux = NULL;
|
||||
int n1;
|
||||
int n2;
|
||||
|
||||
for(int i=0; i< m_N; i++)
|
||||
{
|
||||
n1 = rand() * (m_N+1) / RAND_MAX;
|
||||
n2 = rand() * (m_N+1) / RAND_MAX;
|
||||
|
||||
n1 = ( n1<0) ? 0 : n1;
|
||||
n2 = ( n2<0) ? 0 : n2;
|
||||
|
||||
n1 = ( n1>m_N-1) ? m_N-1 : n1;
|
||||
n2 = ( n2>m_N-1) ? m_N-1 : n2;
|
||||
|
||||
if( n1 == n2 )
|
||||
continue;
|
||||
|
||||
pSIaux = m_ppSI[n1];
|
||||
m_ppSI[n1] = m_ppSI[n2];
|
||||
m_ppSI[n2] = pSIaux;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Name: SetInitialParameters
|
||||
// Purpose: calculates initial demonstration parameters for each media file --
|
||||
// destination rectangles and alpha levels
|
||||
// Note that these values are used as parameters in CDemonstration and
|
||||
// that changing them can cause different appearence of the demonstration
|
||||
//------------------------------------------------------------------------------
|
||||
void CMediaList::SetInitialParameters()
|
||||
{
|
||||
NORMALIZEDRECT rectD;
|
||||
double Alpha;
|
||||
int i;
|
||||
// set alpha levels and destination rectangles here
|
||||
for( i=0; i< m_N; i++)
|
||||
{
|
||||
Alpha = 0.3 + 0.68 * (double)rand() / RAND_MAX; // random in [0.3; 0.98]
|
||||
|
||||
rectD.left = rectD.top = 0.1f;
|
||||
rectD.right = rectD.bottom = 0.9f;
|
||||
|
||||
this->GetItem(i)->m_fAlpha = Alpha;
|
||||
this->GetItem(i)->m_rD = rectD;
|
||||
}// for
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Name: Initialize
|
||||
// Purpose: go through m_szMediaFolder and retrieve all media files into
|
||||
// Parameters: none
|
||||
// Return: true if folder contains at least one valid file;
|
||||
// false otherewise
|
||||
//------------------------------------------------------------------------------
|
||||
bool CMediaList::Initialize(char *szFolder)
|
||||
{
|
||||
struct _finddata_t fileinfo;
|
||||
long filehandle = -1L;
|
||||
int nRes;
|
||||
int nCounter = 0; // to prevent loading huge number of files,
|
||||
// let's restrict it to 50
|
||||
char szMask[MAX_PATH];
|
||||
char szExt[] = "*.AVI;*.MOV;*.MPG;*.MPEG;*.VOB;*.QT;";
|
||||
char szCurExt[MAX_PATH];
|
||||
char szFilePath[MAX_PATH];
|
||||
char *psz = NULL;
|
||||
|
||||
// clean the list
|
||||
Clean();
|
||||
|
||||
if( !_strcmpi(szFolder,""))
|
||||
return false;
|
||||
|
||||
do
|
||||
{
|
||||
strcpy(szCurExt,szExt);
|
||||
psz = strstr(szCurExt,";");
|
||||
if( psz)
|
||||
{
|
||||
*psz = 0;
|
||||
psz = NULL;
|
||||
psz = strstr( szExt, ";");
|
||||
if( psz )
|
||||
{
|
||||
strcpy( szExt, psz+1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy( szExt, "");
|
||||
}
|
||||
sprintf(szMask, "%s%s", szFolder, szCurExt);
|
||||
|
||||
filehandle = _findfirst(szMask, &fileinfo);
|
||||
|
||||
if( filehandle == -1L)
|
||||
continue;
|
||||
|
||||
SourceInfo * pSI = NULL;
|
||||
pSI = new SourceInfo;
|
||||
if( !pSI )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
sprintf( szFilePath, "%s%s", szFolder, fileinfo.name);
|
||||
strcpy( pSI->m_szPath, (const char*)szFilePath);
|
||||
MultiByteToWideChar(CP_ACP, 0, (const char*)szFilePath, -1, pSI->m_wszPath, _MAX_PATH);
|
||||
|
||||
Add( pSI );
|
||||
nCounter++;
|
||||
|
||||
nRes = _findnext(filehandle, &fileinfo);
|
||||
|
||||
while( -1L != nRes )
|
||||
{
|
||||
pSI = NULL;
|
||||
pSI = new SourceInfo;
|
||||
if( !pSI )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
sprintf( szFilePath, "%s%s", szFolder,fileinfo.name);
|
||||
strcpy( pSI->m_szPath, (const char*)szFilePath);
|
||||
MultiByteToWideChar(CP_ACP, 0, (const char*)szFilePath, -1, pSI->m_wszPath, _MAX_PATH);
|
||||
|
||||
Add( pSI );
|
||||
nCounter++;
|
||||
nRes = _findnext(filehandle, &fileinfo);
|
||||
}// while
|
||||
|
||||
} while( _strcmpi(szExt, "") && nCounter < 50 );
|
||||
|
||||
if( 0 == Size() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Name: Clone
|
||||
// Purpose: copies elements (nStart; nStart+n) to the list pML
|
||||
// Parameters: n - number of elements
|
||||
// pML - cloned media list
|
||||
// nStart - start position in (this) list; default: 0
|
||||
// Return: true if success;
|
||||
// false otherewise
|
||||
//------------------------------------------------------------------------------
|
||||
bool CMediaList::Clone(int n, CMediaList *pML, int nStart /* = 0 */)
|
||||
{
|
||||
bool bRes = true;
|
||||
|
||||
if( n < 1 || nStart < 0 || nStart + n > m_N)
|
||||
return false;
|
||||
|
||||
pML->Clean();
|
||||
|
||||
for(int i = nStart; i< nStart + n; i++)
|
||||
{
|
||||
SourceInfo *pSI = NULL;
|
||||
|
||||
pSI = new SourceInfo;
|
||||
|
||||
if( !pSI )
|
||||
goto cleanup;
|
||||
|
||||
bRes = bRes && GetItem(i)->CopyTo( pSI);
|
||||
|
||||
if( false == bRes)
|
||||
{
|
||||
delete pSI;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
pSI->m_bInUse = false;
|
||||
|
||||
bRes = bRes && pML->Add(pSI);
|
||||
if( false == bRes)
|
||||
goto cleanup;
|
||||
}// for
|
||||
return true;
|
||||
|
||||
cleanup:
|
||||
pML->Clean();
|
||||
return false;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Name: AdjustDuration
|
||||
// Purpose: calculates demonstration time. Here, it is duration of the longest file
|
||||
// Change this function to set a fixed time, average time etc.
|
||||
//------------------------------------------------------------------------------
|
||||
void CMediaList::AdjustDuration()
|
||||
{
|
||||
m_avgDuration = 0L;
|
||||
|
||||
if( 0 == m_N )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for( int i=0; i<m_N; i++)
|
||||
{
|
||||
|
||||
m_avgDuration = (this->GetItem(i)->m_llDuration > m_avgDuration) ?
|
||||
this->GetItem(i)->m_llDuration :
|
||||
m_avgDuration;
|
||||
}// for
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user