Change resolution during the game

Blitz3D Forums/Blitz3D Programming/Change resolution during the game

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

I'll post it to the code archives when it's complete but just to give you something to look at here it is. This also backs up Michael's statement. A resource manager isn't hard to right. This is simple at the moment. I was just trying to solve the mode switch problem. I'm not sure the resource manager will help with that. What do the pro games written in Blitz do? Does anyone know? Do they destroy then reload ***everything*** on mode change?



; Resource Manager 
; Kenneth "Physt" Lemieux 
; kenlem@...
; 4/27/2003
; No Rights Reserved


; CONSTANTS
Const RT_MESH=1
Const RT_ANIMMESH=2
Const RT_TEXTURE=3  


; TYPES
Type ResourceEntry
	Field name$
	Field filename$
	Field resourceHandle
	Field resourceType%
	Field flags%
	Field x#
	Field y#
	Field z#
	Field yaw#
	Field pitch#
	Field roll#
End Type


;---------------------------------------------------------------------------------------------
;
; RM_FreeAllResources
;		
;			Free all currently loaded resources. Used at the End of a program
;
; 		Params
;			None
;
;		Returned
;			None
;---------------------------------------------------------------------------------------------
Function RM_FreeAllResources() 

	; free the resource for each entry
	RM_UnloadAllResources()
	
	; free all the entries
	Delete Each ResourceEntry

End Function 

;---------------------------------------------------------------------------------------------
;
; RM_UnloadAllResources
;		
;			Walks the list of loaded resources and frees each one. The entry in the resourse 
;			table is not deleted.
;
; 		Params
;			None
;
;		Returned
;			None
;---------------------------------------------------------------------------------------------
Function RM_UnloadAllResources()

	For res.ResourceEntry = Each ResourceEntry
		Select (res\resourceType%)
			Case RT_MESH
				;SavePosistion(res)	
				FreeEntity(res\resourceHandle)
			Case RT_ANIMMESH
				;SavePosistion(res)				
				FreeEntity(res\resourceHandle)
			Case RT_TEXTURE
				FreeTexture(res\resourceHandle)
		End Select
	Next
	
End Function

;---------------------------------------------------------------------------------------------
;
; RM_ReloadAllResources
;		
;			Walks the resourse table and loads each resource 
;
; 		Params
;			None
;
;		Returned
;			None
;---------------------------------------------------------------------------------------------
Function RM_ReloadAllResources()

	For res.ResourceEntry = Each ResourceEntry
		res\resourceHandle = RM_LoadResourceFromDisk(res\filename$, res\resourceType%, res\flags%)
		;If (res\resourceType = RM_MESH) Or (res\resourceType = RM_ANIMMESH) Then
		;	RestorePosition(res)	
		;EndIf 
	Next

End Function 



;---------------------------------------------------------------------------------------------
;
; RM_AddResourceEntry
;		
;			Loads resource from disk and adds an entry to the resource table
;
; 		Params
;			argFile
;
;		Returned
;			None
;---------------------------------------------------------------------------------------------
Function RM_LoadResource(argName$, argFilename$, argType%, argFlags%)
	
	resHandle = RM_LoadResourceFromDisk(argFilename$, argType%, argFlags%)	
	If resHandle <> 0 Then 
		res.ResourceEntry = New ResourceEntry
		res\name$ = argName$
		res\filename$ = argFilename$
		res\resourceType% = argType%
		res\flags% = argFlags%
		res\resourceHandle = resHandle
		DebugLog "Loading resource: " + argFilename$
	Else
		DebugLog "Can not load resource: " + argFilename$
	End If 
	
	Return resHandle

End Function 

;---------------------------------------------------------------------------------------------
;
; RM_LoadResourceFromDisk
;		
;			Loads resource
;
; 		Params
;			argFile
;
;		Returned
;			handle to resource
;---------------------------------------------------------------------------------------------
Function RM_LoadResourceFromDisk(argFilename$, argType%, argFlags%)
	
	Local resHandle
	
	Select argType%
		Case RT_MESH
			resHandle = LoadMesh(argFilename$)
		Case RT_ANIMMESH
			resHandle = LoadAnimMesh(argFilename$)
		Case RT_TEXTURE
			resHandle = LoadTexture(argFilename$, argFlags%)
		Default
	End Select
	
	Return resHandle
		
End Function 


;---------------------------------------------------------------------------------------------
;
; RM_FindResourceByName
;		
;			Loads resource
;
; 		Params
;			argResourceName
;
;		Returned
;			handle to resource
;---------------------------------------------------------------------------------------------
Function RM_FindResourceByName(argName$)
	
	Local retVal

	For res.ResourceEntry = Each ResourceEntry
		If (res\name$ = argName$)
			retVal = res\resourceHandle
		End If 
	Next

	Return retVal

End Function 


Function SavePosistion(argRes.ResourceEntry)

	entity = argRes\resourceHandle	

	argRes\x# = EntityX(entity)
	argRes\y# = EntityX(entity)
	argRes\x# = EntityX(entity)
	
	argRes\roll# = EntityRoll(entity)
	argRes\pitch# = EntityPitch(entity)
	argRes\yaw# = EntityYaw(entity)

End Function 

Function RestorePosition(argRes.ResourceEntry)

	entity = argRes\resourceHandle	

	PositionEntity(entity, argRes\x#, argRes\y#, argRes\x#)
	EntityRoll(entity, argRes\roll#) 
	EntityPitch(entity, argRes\pitch#) 
	EntityYaw(entity, argRes\yaw#) 
	
End Function