[Source Release]Day & Night System

11/23/2011 18:21 Jopsi332#1
Hier release ich mal das day & night system.
Was ist das day & night system?
Seht es euch am besten an mit den screens.
Dämmerung : [Only registered and activated users can see links. Click Here To Register...]

Dunkler : [Only registered and activated users can see links. Click Here To Register...]

Nochmal dunkler als voher :D : [Only registered and activated users can see links. Click Here To Register...]

das wird nacher noch viel dunkler und später wieder hell.

Jetzt zum Code
1.
Ihr geht in world.h
sucht nacht
Code:
public:
	BOOL			InitWorldEnvir( );		// 24½Ã°£ Light ¼³Á¤ ¹× ±âŸ ȯ°æ ÃʱâÈ* 

#if __VER >= 15 // __GUILD_HOUSE
	void			InProcessing( );		// gmpbigsun : ÇöÀç ¿ùµå·Î ÁøÀԽà Çѹø È£ÃâµÊ
	void			OutProcessing( );		// gmpibgsun : ÇöÀç ¿ùµå¿¡¼* ÅðÀå½Ã Çѹø È£ÃâµÊ 
#endif

	// Render
	void			Projection( LPDIRECT3DDEVICE9 pd3dDevice, int nWidth, int nHeight );
	void			Render( LPDIRECT3DDEVICE9 pd3dDevice, CD3DFont* pFont = NULL );
	void			RenderBase( LPDIRECT3DDEVICE9 pd3dDevice, CD3DFont* pFont );
		
	// Light, Camera and etc...
fügt darunter ein
Code:
	bool			IsNight();
	FLOAT			GetRealTime();
Dann geht ihr in
World3D.cpp
Sucht nach
Code:
// Ä«¸Þ¶ó Ãæµ¹Ã¼Å© ½Ã¿¡¸¸ ¾²´Âµí.. 
BOOL CWorld::CheckBound(D3DXVECTOR3* vPos,D3DXVECTOR3* vDest,D3DXVECTOR3* vOut, FLOAT* fLength )
{
	D3DXVECTOR3 tempVec=(*(vPos)-*(vDest));// /10.0f;
	float length=D3DXVec3Length(&tempVec);
	D3DXVec3Normalize(&tempVec,&tempVec);
	tempVec/=10;
	D3DXVECTOR3 tempVec2=*(vDest);
	D3DXVECTOR3 vDist1, vDist2;
	float tempheight;
	BOOL	b1, b2;
	b1 = FALSE;	b2 = FALSE;
	tempVec2 += (tempVec * 10);		// Ä«¸Þ¶ó°¡ ÀÚ²Ù ÁöÇü¿¡ ²¸µé¾î°¡¼* Á» »°´Ù.
	
	BOOL  bWaterChkDn = FALSE;
	BOOL  bWaterChkUp = FALSE;
	FLOAT fWaterHeight = 0.0f;
	LPWATERHEIGHT pWaterHeight = GetWaterHeight( *vDest );
	if( pWaterHeight && 
		( pWaterHeight->byWaterTexture & (byte)(~MASK_WATERFRAME)) == WTYPE_WATER )
	{
		fWaterHeight = (FLOAT)pWaterHeight->byWaterHeight;
		//vDest->y += 0.5f;
		
		if( fWaterHeight < vDest->y )
		{
			bWaterChkDn = TRUE;
		}
		else
		{
			bWaterChkUp = TRUE;
		}
	}					

	for( int i = 0; i < int( length * 10 ); i++ ) 
	{
		tempVec2+=tempVec;
		tempheight=GetLandHeight( tempVec2.x, tempVec2.z );
		#if __VER >= 11 // __FIX_PICKING
		// Ä«¸Þ¶ó¸¦ ¾à°£ ´õ µé¾îÁÖ±â À§Çؼ* ¼öÁ¤ - 07.10.24 - micky
		if(tempVec2.y<tempheight+0.6f)
		#else
		if(tempVec2.y<tempheight+0.3f)
		#endif
		{
			b1 = TRUE;
			vDist1 = tempVec2 - *vDest;		// »ç¶÷¿¡¼* ±³Â÷Á¡±îÁöÀÇ ¹æÇ⺤ÅÍ
//			*(vOut)=tempVec2;
//			vOut->y+=1.1f;
//			return TRUE;
			break;
		}

		// Äɸ¯ÅͰ¡ ¹°À§¿¡ ÀÖ°í, Àá±âÁö ¾Ê¾Ò´Ù¸é ¼ö¸é Ãæµ¹Ã¼Å©ÇÏ¿© Ä«¸Þ¶ó°¡ ¹°¼ÓÀ¸·Î ¾Èµé¾î°¡°Ô ó¸®ÇÔ.
		D3DXVECTOR3 vWaterVec = tempVec2;
		//vWaterVec.y+=0.5f;
		if( bWaterChkDn )
		{
			if(vWaterVec.y<fWaterHeight+0.3f)
			{
				b1 = TRUE;
				vDist1 = vWaterVec - *vDest;	
				break;
			}
		}
#if __VER < 10
		else
		// Äɸ¯ÅͰ¡ ¹°À§¿¡ ÀÖ°í, Àá°å´Ù¸é ¼ö¸é Ãæµ¹Ã¼Å©ÇÏ¿© Ä«¸Þ¶ó°¡ ¹°¹ÛÀ¸·Î ¸ø³ª°¡°Ô ó¸®ÇÔ
		if( bWaterChkUp )
		{
			if(vWaterVec.y>fWaterHeight-0.3f)
			{
				b1 = TRUE;
				vDist1 = vWaterVec - *vDest;	
				break;
			}
		}
#endif
	}
	D3DXVECTOR3 vIntersect;
	BOOL bRet = IntersectObjLine2( &vIntersect, *vDest, *vPos, TRUE );
	if( bRet )
	{
		b2 = TRUE;
		vDist2 = vIntersect - *vDest;		// »ç¶÷¿¡¼* ±³Â÷Á¡±îÁöÀÇ ¹æÇ⺤ÅÍ
//		*vOut = vIntersect;
	}
	FLOAT	fDist1, fDist2;
	if( b1 == TRUE && b2 == TRUE )	// ÁöÇüÀ̶û ¿ÀºêÁ§Æ® ¸ðµÎ ±³Â÷Çß´Ù
	{
		fDist1 = D3DXVec3LengthSq( &vDist1 );
		fDist2 = D3DXVec3LengthSq( &vDist2 );
		if( fDist1 < fDist2 )		// ±×Áß °¡±î¿î³ðÀ¸·Î ¾¸
		{
			*fLength = D3DXVec3Length( &vDist1 );
			*vOut = tempVec2;
		}
		else
		{
			*fLength = D3DXVec3Length( &vDist2 );
			*vOut = vIntersect;
		}
		return TRUE;
	} else
	if( b1 )	// ÁöÇü¿¡¸¸ ºÎµúÇû´Ù.
	{
		*fLength = D3DXVec3Length( &vDist1 );		
		*vOut = tempVec2;
		return TRUE;
	} else
	if( b2 )	// ¿ÀºêÁ§Æ®¿¡¸¸ ºÎµúÇû´Ù
	{
		*fLength = D3DXVec3Length( &vDist2 );		
		*vOut = vIntersect;
		return TRUE;
	}

	// ¾Æ¹«µ¥µµ ºÎµúÈ÷Áö ¾Ê¾Ò´Ù.
	*fLength = length;
	return FALSE;
}
fügt darunter ein
Code:
#ifdef __CLIENT
bool CWorld::IsNight(){
return ( g_GameTimer.m_nHour-1 <= 6 || g_GameTimer.m_nHour-1 >= 18 ); 
}
FLOAT CWorld::GetRealTime()
{
FLOAT nRlTime = 0;
nRlTime = (FLOAT)(g_GameTimer.m_nHour-1)*2;
if( g_GameTimer.m_nMin < 30 )
--nRlTime;
if( g_GameTimer.m_nHour-1 == 23 && g_GameTimer.m_nMin > 45 )
nRlTime+=0.5F;
if( nRlTime > 24 )
{
return ((-1)*(nRlTime - 48 ));
}
return nRlTime;
}
#endif
dadrunter set ihr
Code:
void CWorld::SetLight( BOOL bLight )
sucht in dieser funktion nach
Code:
			pLight->SetDir( m_v3LightDir.x, m_v3LightDir.y, m_v3LightDir.z );
			pLight->Appear( m_pd3dDevice, TRUE );
	
			DWORD dwR, dwG, dwB;
			dwR = (DWORD)( pLight->Ambient.r * 255 );
			dwG = (DWORD)( pLight->Ambient.g * 255 );
			dwB = (DWORD)( pLight->Ambient.b * 255 );
			dwAmbient = D3DCOLOR_ARGB( 255, dwR, dwG, dwB );
		}
	}
	else
	{
und added DADRÜBER!
Code:
#ifdef __DAY_NIGHT
if( !m_bIsIndoor ){
m_fFogStartValue = 10.0F;
m_fFogEndValue = 70.0F + GetRealTime() * 30.0F;
m_fFogDensity = 0.0F;
m_v3LightDir.x = 0.0F;
m_v3LightDir.y = -1.0F;
m_v3LightDir.z = 0.0F;
}
#endif // __DAY_NIGHT
jetz sucht ihr nach
Code:
if( m_bIsIndoor )
	{
		if( pLight )
		{		
			// À½¿µ º¯È* 
			pLight->Diffuse.r = ((m_dwDiffuse>>16) & 0xff) / 255.f;
			pLight->Diffuse.g = ((m_dwDiffuse>>8) & 0xff)  / 255.f;
			pLight->Diffuse.b = ((m_dwDiffuse) & 0xff)     / 255.f;
und macht daraus
Code:
	if( m_bIsIndoor
#ifdef __DAY_NIGHT
|| IsNight()
#endif // __DAY_NIGHT
)


	{
		if( pLight )
		{		
			// À½¿µ º¯È* 
			pLight->Diffuse.r = ((m_dwDiffuse>>16) & 0xff) / 255.f;
			pLight->Diffuse.g = ((m_dwDiffuse>>8) & 0xff)  / 255.f;
			pLight->Diffuse.b = ((m_dwDiffuse) & 0xff)     / 255.f;
dann in neuz/versioncommon.h
added ihr
Code:
#define __DAY_NIGHT
Fertig

Credütz an Pumbaaa
11/23/2011 18:46 Sedrika#2
gib wenigstens credits an...
eenn ich zuhaus bin nehm ich index auf
11/23/2011 18:49 Deda94#3
wo sind die Credits? das haste nie im Leben selbst gecodet
11/23/2011 18:53 Jopsi332#4
Quote:
Originally Posted by ToxicLibrary™ View Post
wo sind die Credits? das haste nie im Leben selbst gecodet
ich würd ja mal die augen aufmachen

Edit für die nachwelt :
wobei mir pumba auch nur 3snippets gegeben hat was ich damit machen muss mnusstte ich selber zusehen. also das war was er mir geschickt hat (genau so)
Code:
#ifdef __DAY_NIGHT
if( !m_bIsIndoor ){
m_fFogStartValue = 10.0F;
m_fFogEndValue = 70.0F + GetRealTime() * 30.0F;
m_fFogDensity = 0.0F;
m_v3LightDir.x = 0.0F;
m_v3LightDir.y = -1.0F;
m_v3LightDir.z = 0.0F;
}
#endif // __DAY_NIGHT
#ifdef __CLIENT
bool CWorld::IsNight(){
return ( g_GameTimer.m_nHour-1 <= 6 || g_GameTimer.m_nHour-1 >= 18 ); 
}
FLOAT CWorld::GetRealTime()
{
FLOAT nRlTime = 0;
nRlTime = (FLOAT)(g_GameTimer.m_nHour-1)*2;
if( g_GameTimer.m_nMin < 30 )
--nRlTime;
if( g_GameTimer.m_nHour-1 == 23 && g_GameTimer.m_nMin > 45 )
nRlTime+=0.5F;
if( nRlTime > 24 )
{
return ((-1)*(nRlTime - 48 ));
}
return nRlTime;
}
#endif
if( m_bIsIndoor
#ifdef __DAY_NIGHT
|| IsNight()
#endif // __DAY_NIGHT
)
11/23/2011 19:41 Sedrika#5
So es ist jetzt im Index
11/23/2011 19:43 Razzer'#6
Nice , könntest mir das auch vorher sagen das du das Releast ansonsten nice!
11/23/2011 19:43 Waat#7
Also ich muss sagen, ich finds echt n1 :D
Kann man gut gebrauchen ^^
11/23/2011 19:56 Deda94#8
Dann gib Pumbaaa Credits :awesome: Ist ja keine Meisterleistung es an den richtigen Platz zu setzen :D
11/23/2011 20:01 N8Schatten#9
Echt nice werde es auf jedne fall benutzten

EDIT: Brauch man keine Files für den Weather ordner?
11/23/2011 20:07 Razzer'#10
Nein , man braucht kein Weather files , der Ordner ist ja nur für Sternhimmel etc.
11/23/2011 20:10 Jopsi332#11
Quote:
Originally Posted by ToxicLibrary™ View Post
Dann gib Pumbaaa Credits :awesome: Ist ja keine Meisterleistung es an den richtigen Platz zu setzen :D
du bist immer noch blind. die stehen schon die ganze zeit . schon vor deinem 1.post im thread xD
11/23/2011 20:12 Flash!#12
Quote:
Originally Posted by ToxicLibrary™ View Post
Dann gib Pumbaaa Credits :awesome: Ist ja keine Meisterleistung es an den richtigen Platz zu setzen :D
Quote:
Originally Posted by Jopsi332

[...]
Fertig

Credütz an Pumbaaa
Lesen bildet :3
11/23/2011 20:16 .Tear#13
Meiner Meinung nach würds mehr sinn haben, wenn sichs an die Reale Zeit anpasst net an die Madrigal Time.. ^_^
11/23/2011 20:26 .Zephion#14
Nice Release

Endlich 1 Release mehr :)
11/23/2011 20:28 Jopsi332#15
Quote:
Originally Posted by Waat View Post
Aber dann würde es etwas lange dauern, wenn man sich z.B. ansehen will, wie es dunkler bzw. heller wird, oder nicht ? ^^
kommt drauf an in welchen zeitabständen du es dann dunkel lassen wirst.
rein theopraktisch <- lol xD
wäre es am coolsten die aktuelle server zeit dem client zu übermitteln und dadrüber. so könnte man night events machen. aber das nur in der theroie, die praxis wird da schwer XD