Simple Window management system by Jack17th 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 |