TGC Codebase Backup



Simple Window management system by Jack

17th May 2017 5:26
Summary

Simple Window management System. You can add sprites/ text to the window, they will stay on place and be culled correctly. Add some kind of .jpg to the code, or remove the image lo



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    
// Project: DynamicWindow 
// Created: 12.03.2017

// show all errors
SetErrorMode(2)

// set window properties
SetWindowTitle( "DynamicWindow" )
SetWindowSize( 1024, 768, 0 )

// set display properties
SetVirtualResolution( 1024, 768 )
SetOrientationAllowed( 1, 1, 1, 1 )
SetSyncRate( 60, 0 ) // 30fps instead of 60 to save battery
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts



type Vec2_def
	x as float
	y as float
endtype


type dynWindow_def

	bgspr as integer
	bgimg as integer
	size as Vec2_def
	position as Vec2_def
	
	openspeed as float
	on as integer
	visible as integer
	effect as integer
	// assets 
	TextList as integer[]
	SpriteList as integer[]

	
endtype


Dim DynWindow[] as dynWindow_def


dynwin = CreateDynWindow(300,400,400,200)
AddTextToDynWindow("Infowindow",10,10,30,dynwin)


spr = AddSpriteToDynWindow(190,10,200,180,dynwin)
SetSpriteImage(spr,LoadImage("1451341672001.jpg"),0)

SetDynWindowVisible(dynwin,0)
SetDynWindowOn(dynwin,0)



do
	print("Very Simple window management system")
	print("press enter")

if GetRawKeyPressed(13)=1 then DynWindow[0].on=1-DynWindow[0].on
    
	HandleDynWin()
    Print( ScreenFPS() )
    Sync()
loop


function HandleDynWin()
	
	for i=0 to DynWindow.length
		
		
		spr = DynWindow[i].bgspr
			nsx# = GetSpriteWidth(spr)
			nsy# = GetSpriteHeight(spr)	
		
		
		if DynWindow[i].on=0

			
			// downscale
			maxv=0
			if GetSpriteWidth(spr)>1.0 
				nsx# = nsx#-DynWindow[i].openspeed
				if nsx#<2.0
					nsx#=2.0
					inc maxv
				endif
				
			endif
			if GetSpriteHeight(spr)>1.0
				nsy# = nsy#-DynWindow[i].openspeed
				if nsy#<2.0
					 nsy#=2.0
					 inc maxv
				endif

			endif
			
			if maxv=2
				SetDynWindowVisible(i,0)
			endif
			
			
			SetSpriteSize(spr,nsx#,nsy#)
		else
				SetDynWindowVisible(i,1)			
			// upscale
			maxv=0
			if GetSpriteWidth(spr)<DynWindow[i].size.x
				nsx# = nsx#+DynWindow[i].openspeed
				if nsx#>DynWindow[i].size.x
					nsx#=DynWindow[i].size.x
					inc maxv
				endif

				
			endif
			if GetSpriteHeight(spr)<DynWindow[i].size.y
				nsy# = nsy#+DynWindow[i].openspeed
				if nsy#>DynWindow[i].size.y 
					nsy#=DynWindow[i].size.y
					inc maxv
				endif

			endif
			if maxv=2 then DynWindow[i].visible=2
				
			SetSpriteSize(spr,nsx#,nsy#)
						
			
		endif
		
		if DynWindow[i].visible=1
			if DynWindow[i].TextList.length>-1
				bgspr = DynWindow[i].bgspr
					
					// set all texts in window scissor
				for txti = 0 to DynWindow[i].TextList.length
					SetTextScissor(DynWindow[i].TextList[txti],GetSpriteX(bgspr),GetSpriteY(bgspr),GetSpriteX(bgspr)+GetSpriteWidth(bgspr),GetSpriteY(bgspr)+GetSpriteHeight(bgspr))
				next txti

					// set all sprites in window scissor
				for spri = 0 to DynWindow[i].SpriteList.length
					SetSpriteScissor(DynWindow[i].SpriteList[spri],GetSpriteX(bgspr),GetSpriteY(bgspr),GetSpriteX(bgspr)+GetSpriteWidth(bgspr),GetSpriteY(bgspr)+GetSpriteHeight(bgspr))
				next spri

				
			endif
		endif
	
	next i
	
endfunction





function SetDynWindowOn(num,state)
	DynWindow[num].on=state
endfunction


function SetDynWindowVisible(num,state)
	
	SetSpriteVisible(DynWindow[num].bgspr,state)
	
			for txti = 0 to DynWindow[num].TextList.length
				SetTextVisible(DynWindow[num].TextList[txti],state)
			next txti

				
			for spri = 0 to DynWindow[num].SpriteList.length
				SetSpriteVisible(DynWindow[num].SpriteList[spri],state)
			next spri
DynWindow[num].visible=state
	
endfunction
	
function CreateDynWindow(px,py,sx,sy)
	
	bgimg = DrawBorderBox(sx,sy,0,0,255,255,10)
	bgspr = CreateSprite(bgimg)
	SetImageMinFilter(bgimg,0)

	SetSpriteOffset(bgspr,sx/2,sy/2)
	SetSpritePositionByOffset(bgspr,px,py)
	DynWindow.length = DynWindow.length + 1
	pos = DynWindow.length
	
	DynWindow[pos].bgimg = bgimg
	DynWindow[pos].bgspr = bgspr

	DynWindow[pos].size.x = sx
	DynWindow[pos].size.y = sy

	DynWindow[pos].position.x = px
	DynWindow[pos].position.y = py
DynWindow[pos].on=1
DynWindow[pos].visible=1
DynWindow[pos].openspeed = 10.0
endfunction pos

function AddTextToDynWindow(txt$,px,py,size,parent)



	bgspr = DynWindow[parent].bgspr


txt = CreateText(txt$)
SetTextSize(txt,size)
SetTextPosition(txt,GetSpriteX(bgspr)+px,GetSpriteY(bgspr)+py)


// add to array
DynWindow[parent].TextList.length = DynWindow[parent].TextList.length + 1
txtpos = DynWindow[parent].TextList.length

DynWindow[parent].TextList[txtpos] = txt


endfunction txt


function AddSpriteToDynWindow(px,py,sx,sy,parent)



	bgspr = DynWindow[parent].bgspr


spr = CreateSprite(0)
SetSpriteSize(spr,sx,sy)
SetSpritePosition(spr,GetSpriteX(bgspr)+px,GetSpriteY(bgspr)+py)


// add to array
DynWindow[parent].SpriteList.length = DynWindow[parent].SpriteList.length + 1
sprpos = DynWindow[parent].SpriteList.length

DynWindow[parent].SpriteList[sprpos] = spr


endfunction spr
























// draws a simple border box image
	function DrawBorderBox(sx,sy,r,g,b,a,border)

		// bg inputbox
		bg1=CreateSprite(0)
		SetSpriteSize(bg1,sx,sy)
		SetSpriteDepth(bg1,0)
		SetSpritePosition(bg1,GetVirtualWidth()/2-GetSpriteWidth(bg1)/2,GetVirtualHeight()/2-GetSpriteHeight(bg1)/2)   
		SetSpriteColor(bg1,r,g,b,a)   

		bg2=CreateSprite(0)
		SetSpriteSize(bg2,sx-border,sy-border)
		SetSpriteDepth(bg2,0)
		SetSpritePosition(bg2,GetVirtualWidth()/2-GetSpriteWidth(bg2)/2,GetVirtualHeight()/2-GetSpriteHeight(bg2)/2)   
		SetSpriteColor(bg2,0,0,0,255)   

		ClearScreen()

		
		DrawSprite(bg1)
DrawSprite(bg2)
		bg_img=GetImage(GetVirtualWidth()/2-GetSpriteWidth(bg1)/2,GetVirtualHeight()/2-GetSpriteHeight(bg1)/2,sx,sy)

		ClearScreen()

		DeleteSprite(bg1)
		DeleteSprite(bg2)


	endfunction bg_img