#166775 - hacker013 - Tue Feb 17, 2009 4:54 pm
hey everybody,
I've written my own menu layering system. Zo the menu can have different layers. But the only thing I got is a black screen. I using the nitro engine. I hope you can help me with this, i'm already a week long trying to get this work.
UZMenuLayer.h
UZMenuLayer.c
_________________
Website / Blog
Let the nds be with you.
I've written my own menu layering system. Zo the menu can have different layers. But the only thing I got is a black screen. I using the nitro engine. I hope you can help me with this, i'm already a week long trying to get this work.
UZMenuLayer.h
Code: |
#ifndef __UZ_MENULAYER_H__ #define __UZ_MENULAYER_H__ #include <nds.h> #include "NE2D.h" #define UZ_MAX_WINDOWS 128 #define UZ_MAX_LAYERS 128 typedef struct{ bool visible; NE_Window ** window; int priority; bool screen; /* 0 = down / 1 = top*/ }UZ_MenuLayer; /* Functions */ // -- Initing / Freeing void UZ_MenuLayerInit(int mlayers, int mwindows); void UZ_MenuLayerFree(); // -- Adding / Deleting UZ_MenuLayer* UZ_MenuLayerCreate(); void UZ_MenuLayerDelete(UZ_MenuLayer* menulayer); // -- Drawing down / top void UZ_MenuLayerDrawDown(); void UZ_MenuLayerDrawTop(); // -- Edit Settings void UZ_MenuLayerSetPriority(UZ_MenuLayer* menulayer, int priority); void UZ_MenuLayerSetVisible(UZ_MenuLayer* menulayer, bool visible); void UZ_MenuLayerSetScreen(UZ_MenuLayer* menulayer, bool screen); // -- Window Settings / Adding / Removing int UZ_MenuLayerWindowAdd(UZ_MenuLayer* menulayer, NE_Window* window); void UZ_MenuLayerWindowRemove(UZ_MenuLayer* menulayer, NE_Window* window); #endif |
UZMenuLayer.c
Code: |
#include "UZMenuLayer.h" bool uz_menulayerinited = false; UZ_MenuLayer ** MenuLayers; int uz_max_layers; int uz_max_windows; void UZ_MenuLayerInit(int mlayers, int mwindows) { if(uz_menulayerinited==true)UZ_MenuLayerFree(); /* Set Max Layers */ if(mlayers>0){ uz_max_layers=mlayers; } else { uz_max_layers=UZ_MAX_LAYERS; } /* Set Max Windows */ if(mwindows>0){ uz_max_windows=mwindows; } else { uz_max_windows=UZ_MAX_WINDOWS; } /* Allocated Enough Memory */ MenuLayers = malloc(sizeof(UZ_MenuLayer)*uz_max_layers); int i=0; for(i=0;i<uz_max_layers;i++) { MenuLayers[i]=NULL; } } void UZ_MenuLayerFree() { if(uz_menulayerinited==false)return; int i=0; /* Free All Menu Layers */ for(i=0;i<uz_max_layers;i++) { if(MenuLayers[i]!=NULL) { UZ_MenuLayerDelete(MenuLayers[i]); } } free(MenuLayers); } UZ_MenuLayer* UZ_MenuLayerCreate() { if(uz_menulayerinited==false)return NULL; int i=0; /* Check if id is free */ for(i=0;i<uz_max_layers;i++) { /* If id is free */ if(MenuLayers[i]==NULL) { UZ_MenuLayer* menulayer; menulayer = malloc(sizeof(UZ_MenuLayer)); //Set memory menulayer->visible=true; //Set visible menulayer->priority=0; //Set priority menulayer->screen=0; //Set screen menulayer->window = malloc(sizeof(NE_Window)*uz_max_windows); for(i=0;i<uz_max_windows;i++) { menulayer->window[i]=NULL; //Init Windows } MenuLayers[i]=menulayer; //Keep pointer return menulayer; } } return NULL; } void UZ_MenuLayerDelete(UZ_MenuLayer* menulayer) { if(uz_menulayerinited==false)return; if(menulayer==NULL)return; int i; for(i=0;i<uz_max_layers;i++) { if(MenuLayers[i]==menulayer) { MenuLayers[i]=NULL; for(i=0;i<uz_max_windows;i++) { UZ_MenuLayerWindowRemove(menulayer,menulayer->window[i]); } free(menulayer); return; //Don't loop unnessary loops. } } } void UZ_MenuLayerDrawDown() { if(uz_menulayerinited==false)return; int i=0; for(i=0;i<uz_max_layers;i++) { if(MenuLayers[i]!=NULL) { if(MenuLayers[i]->screen==0 && MenuLayers[i]->visible==true) { int j=0; for(j=0;j<uz_max_windows;j++) { /* Get Original Priority */ int tmp_priority=MenuLayers[i]->window[j]->priority; /* Set to the correct depth for MenuLayers */ NE_WindowSetPriority(MenuLayers[i]->window[j],MenuLayers[i]->priority+tmp_priority); /* Draw Window */ NE_WindowDraw(MenuLayers[i]->window[j]); /* Reset Priority */ NE_WindowSetPriority(MenuLayers[i]->window[j],tmp_priority); } } } } } void UZ_MenuLayerDrawTop() { if(uz_menulayerinited==false)return; int i=0; for(i=0;i<uz_max_layers;i++) { if(MenuLayers[i]!=NULL) { if(MenuLayers[i]->screen==1 && MenuLayers[i]->visible==true) { int j=0; for(j=0;j<uz_max_windows;j++) { /* Get Original Priority */ int tmp_priority=MenuLayers[i]->window[j]->priority; /* Set to the correct depth for MenuLayers */ NE_WindowSetPriority(MenuLayers[i]->window[j],MenuLayers[i]->priority+tmp_priority); /* Draw Window */ NE_WindowDraw(MenuLayers[i]->window[j]); /* Reset Priority */ NE_WindowSetPriority(MenuLayers[i]->window[j],tmp_priority); } } } } } void UZ_MenuLayerSetPriority(UZ_MenuLayer* menulayer, int priority) { if(uz_menulayerinited==false)return; if(menulayer==NULL)return; menulayer->priority = priority; } void UZ_MenuLayerSetVisible(UZ_MenuLayer* menulayer, bool visible) { if(uz_menulayerinited==false)return; if(menulayer==NULL)return; menulayer->visible = visible; } void UZ_MenuLayerSetScreen(UZ_MenuLayer* menulayer, bool screen) { if(uz_menulayerinited==false)return; if(menulayer==NULL)return; menulayer->screen = screen; } int UZ_MenuLayerWindowAdd(UZ_MenuLayer* menulayer, NE_Window* window) { if(uz_menulayerinited==false)return 0; if(menulayer==NULL)return 0; int i=0; for(i=0;i<uz_max_windows;i++) { if(menulayer->window[i]==NULL) { menulayer->window[i]=malloc(sizeof(NE_Window)); menulayer->window[i]=window; return 1; } } return 0; } void UZ_MenuLayerWindowRemove(UZ_MenuLayer* menulayer, NE_Window* window) { if(uz_menulayerinited==false)return; if(menulayer==NULL)return; int i=0; for(i=0;i<uz_max_windows;i++) { if(menulayer->window[i]==window) { free(menulayer->window[i]); menulayer->window[i]=NULL; } } } |
_________________
Website / Blog
Let the nds be with you.