And here is the source code for the graphic integration. I have not yet finished it. But it is working with sound and image update. ;)Code:#include "machine.h"
void CreateVideo(PVIDEO ToCreate,char * Clan,char * ID){
UNIVERSE TVideo;
CreateUniverse(&TVideo,"Class",Clan);
if(!MaxClass(TVideo)){
InsertClass(&TVideo,"Word","ID");
InsertClass(&TVideo,"Word","Mode");
InsertClass(&TVideo,"Word","Manager");
InsertClass(&TVideo,"Double","Width");
InsertClass(&TVideo,"Double","Height");
InsertClass(&TVideo,"Int","R");
InsertClass(&TVideo,"Int","G");
InsertClass(&TVideo,"Int","B");
SaveClass(TVideo);
}
ToCreate->Clan = Write(Clan);
ToCreate->ID = Write(ID);
ToCreate->Manager = Write("Administrator");
ToCreate->Mode = Write("Standard");
ToCreate->Width = 800.0f;
ToCreate->Height = 600.0f;
ToCreate->Color = RGBAColor(0,0,0,255);
if(MaxData(TVideo)){
STATUS Exists = Off;
UINT LastData,LastClass=0;
for(LastData=0;LastData<TVideo.Data.Max;LastData++){
if(!strncmp(TVideo.Data.Buffer[LastData].Text,ID,strlen(ID))){Exists = On;}
LastClass++;
if(LastClass==TVideo.Class.Max){
LastClass=0;
if(Exists==On){
UINT BackData,Start = LastData - TVideo.Class.Max + 1;
for(BackData=Start;BackData<Start+TVideo.Class.Max;BackData++){
if(!strncmp(TVideo.Class.Value[LastClass].Text,"ID",strlen("ID"))){
ToCreate->ID = Write(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"Mode",strlen("Mode"))){
ToCreate->Mode = Write(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"Manager",strlen("Manager"))){
ToCreate->Manager = Write(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"Width",strlen("Width"))){
ToCreate->Width = ToCreate->WidthOffset = atof(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"Height",strlen("Height"))){
ToCreate->Height = ToCreate->HeightOffset = atof(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"R",strlen("R"))){
ToCreate->Color.R = atoi(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"G",strlen("G"))){
ToCreate->Color.G = atoi(TVideo.Data.Buffer[BackData].Text);
}
if(!strncmp(TVideo.Class.Value[LastClass].Text,"B",strlen("B"))){
ToCreate->Color.B = atoi(TVideo.Data.Buffer[BackData].Text);
}
LastClass++;
}
break;
}
}
}
}
}
void SaveVideo(VIDEO ToSave){
UNIVERSE TVideo;
CreateUniverse(&TVideo,"Class",ToSave.Clan.Text);
StartData(TVideo);
AppendData("ID",ToSave.ID.Text);
AppendData("Mode",ToSave.Mode.Text);
AppendData("Manager",ToSave.Manager.Text);
AppendData("Width",DoubleToString(ToSave.Width));
AppendData("Height",DoubleToString(ToSave.Height));
AppendData("R",IntToString(ToSave.Color.R));
AppendData("G",IntToString(ToSave.Color.G));
AppendData("B",IntToString(ToSave.Color.B));
if(!Equal(TVideo,"ID")){
InsertData(&TVideo);
SaveLastData(TVideo);
}
else if(ModifyData(&TVideo,ToSave.ID.Text))SaveAllData(TVideo);
}
void CreateMachine(PMACHINE ToCreate,char * ClanMachine,char * ClanVideo,char * ID){
UNIVERSE TMachine;
CreateUniverse(&TMachine,"Class",ClanMachine);
if(!MaxClass(TMachine)){
InsertClass(&TMachine,"Word","ID");
InsertClass(&TMachine,"Int","Mouse");
InsertClass(&TMachine,"Int","Audio");
SaveClass(TMachine);
}
ToCreate->Clan = Write(ClanMachine);
ToCreate->ID = Write(ID);
ToCreate->Run = ToCreate->Mouse = ToCreate->Audio = On;
ToCreate->EventRow = NULL;
CreateVideo(&ToCreate->Camera,ClanVideo,ID);
if(MaxData(TMachine)){
STATUS Exists = Off;
UINT LastData,LastClass=0;
for(LastData=0;LastData<TMachine.Data.Max;LastData++){
if(!strncmp(TMachine.Data.Buffer[LastData].Text,ID,strlen(ID)))Exists = On;
LastClass++;
if(LastClass==TMachine.Class.Max){
LastClass=0;
if(Exists==On){
UINT UpdateData,Start=LastData - TMachine.Class.Max + 1;
for(UpdateData=Start;UpdateData<Start+TMachine.Class.Max;UpdateData++){
if(!strncmp("ID",TMachine.Class.Value[LastClass].Text,TMachine.Class.Value[LastClass].Length)){
ToCreate->ID = Write(TMachine.Data.Buffer[UpdateData].Text);}
if(!strncmp("Mouse",TMachine.Class.Value[LastClass].Text,TMachine.Class.Value[LastClass].Length)){
ToCreate->Mouse = atoi(TMachine.Data.Buffer[UpdateData].Text);}
if(!strncmp("Audio",TMachine.Class.Value[LastClass].Text,TMachine.Class.Value[LastClass].Length)){
ToCreate->Audio = atoi(TMachine.Data.Buffer[UpdateData].Text);}
LastClass++;
}
break;
}
}
}
}
}
STATUS RunMachine(PMACHINE MachineLeader,char * ClanMachine,char * ClanVideo,char * Id){
CreateMachine(MachineLeader,ClanMachine,ClanVideo,Id);
if(!al_init()||
!al_install_keyboard()||
!al_init_primitives_addon()||
!al_init_image_addon())return Off;
if(MachineLeader->Mouse==On&&!al_install_mouse())return Off;
if(MachineLeader->Audio==On&&
!al_install_audio()||
!al_init_acodec_addon()||
!al_reserve_samples(8))return Off;
if(!strncmp("Full",MachineLeader->Camera.Mode.Text,MachineLeader->Camera.Mode.Length)){
al_set_new_display_flags(ALLEGRO_FULLSCREEN);}
else al_set_new_display_flags(ALLEGRO_WINDOWED);
if(!strncmp("System",MachineLeader->Camera.Manager.Text,MachineLeader->Camera.Manager.Length)){
ALLEGRO_DISPLAY_MODE mode;
al_get_display_mode(al_get_num_display_modes() - 1, &mode);
MachineLeader->Camera.Width = MachineLeader->Camera.WidthOffset = mode.width;
MachineLeader->Camera.Height = MachineLeader->Camera.HeightOffset = mode.height;
}
if((MachineLeader->Camera.View = al_create_display((int)MachineLeader->Camera.Width,(int)MachineLeader->Camera.Height))==NULL)return Off;
if((MachineLeader->EventRow = al_create_event_queue())==NULL)return Off;
al_register_event_source(MachineLeader->EventRow,al_get_display_event_source(MachineLeader->Camera.View));
al_register_event_source(MachineLeader->EventRow,al_get_keyboard_event_source());
if(MachineLeader->Mouse==On)al_register_event_source(MachineLeader->EventRow,al_get_mouse_event_source());
al_clear_to_color(al_map_rgba(MachineLeader->Camera.Color.R,MachineLeader->Camera.Color.G,MachineLeader->Camera.Color.B,MachineLeader->Camera.Color.A));
al_flip_display();
al_set_window_title(MachineLeader->Camera.View,MachineLeader->Camera.Manager.Text);
return On;
}
STATUS RunningMachine(MACHINE MachineLeader){
if(MachineLeader.Run){
al_get_next_event(MachineLeader.EventRow,&MachineLeader.Event);
al_set_target_bitmap(al_get_backbuffer(MachineLeader.Camera.View));
al_clear_to_color(al_map_rgb(MachineLeader.Camera.Color.R,MachineLeader.Camera.Color.G,MachineLeader.Camera.Color.B));
return MachineLeader.Run;
}
return Off;
}
void ClearMachine(MACHINE MachineLeader){
al_flip_display();
}
STATUS GetKeyMachine(MACHINE MachineLeader,int key){
al_get_keyboard_state(&MachineLeader.Event.keyboard.keycode);
if (al_key_down(&MachineLeader.Event.keyboard.keycode,key))return On;
return Off;
}
void StopMachine(PMACHINE ToStop){
printf("Saving Machine, Wait...\n");
ToStop->Run = Off;
SaveMachine(*ToStop);
}
void SaveMachine(MACHINE ToSave){
UNIVERSE TMachine;
CreateUniverse(&TMachine,"Class",ToSave.Clan.Text);
StartData(TMachine);
AppendData("ID",ToSave.ID.Text);
AppendData("Mouse",IntToString(ToSave.Mouse));
AppendData("Audio",IntToString(ToSave.Audio));
if(!Equal(TMachine,"ID")){
InsertData(&TMachine);
SaveLastData(TMachine);
}
else if(ModifyData(&TMachine,ToSave.ID.Text))SaveAllData(TMachine);
SaveVideo(ToSave.Camera);
}
void LoadALObject(AL_POBJECT ToCreate,char * Id){
CreateObject(&ToCreate->Object,"Object",Id);
CreateImage(&ToCreate->Object.ImageInfo,ToCreate->Object.ImageClan.Text);
CreateSound(&ToCreate->Object.SoundInfo,ToCreate->Object.SoundClan.Text);
ToCreate->Image = NULL;
ToCreate->Sound = NULL;
if(ToCreate->Object.ImageInfo.Max>0){
ToCreate->Image = al_load_bitmap(ToCreate->Object.ImageInfo.Path[ToCreate->Object.ImageInfo.Update].Text);
if(ToCreate->Image==NULL)printf("Image not created\n");
else {
ToCreate->Object.Width = al_get_bitmap_width(ToCreate->Image);
ToCreate->Object.Height = al_get_bitmap_height(ToCreate->Image);
}
}
if(ToCreate->Object.SoundInfo.Max>0){
ToCreate->Sound = al_load_sample(ToCreate->Object.SoundInfo.Path[ToCreate->Object.SoundInfo.Update].Text);
if(ToCreate->Sound==NULL)printf("Sound not created\n");
}
}
void GetImage(AL_POBJECT ToGet,char * Name){
STATUS Empty = Off;
if(ToGet->Object.ImageInfo.Max==0){Empty = On;goto ........;}
UINT LastImage;
for(LastImage=0;LastImage<ToGet->Object.ImageInfo.Max;LastImage++){
if(!strncmp(ToGet->Object.ImageInfo.Name[LastImage].Text,Name,strlen(Name))){
ToGet->Object.ImageInfo.Update = LastImage;
ToGet->Image = al_load_bitmap(ToGet->Object.ImageInfo.Path[LastImage].Text);
if(ToGet->Image==NULL)printf("Image not created\n");
else {
ToGet->Object.Width = al_get_bitmap_width(ToGet->Image);
ToGet->Object.Height = al_get_bitmap_height(ToGet->Image);
}
break;
}
}
........:
if(Empty==On){
ToGet->Object.ImageInfo.Name = NULL;
ToGet->Object.ImageInfo.Path = NULL;
ToGet->Object.ImageInfo.Pattern = NULL;
ToGet->Object.ImageInfo.Action = NULL;
ToGet->Object.ImageInfo.Max = 0;
}
}
void DrawAlObject(AL_OBJECT ToDraw){
if(ToDraw.Image!=NULL&&ToDraw.Object.ImageInfo.Max>0)al_draw_tinted_scaled_rotated_bitmap(ToDraw.Image,al_map_rgba(ToDraw.Object.Color.A,ToDraw.Object.Color.A,ToDraw.Object.Color.A,ToDraw.Object.Color.A),ToDraw.Object.XScroll,ToDraw.Object.YScroll,ToDraw.Object.XView,ToDraw.Object.YView,ToDraw.Object.WidthSize,ToDraw.Object.HeightSize,ToDraw.Object.Angle * ALLEGRO_PI / 180,ToDraw.Object.ImageInfo.Position);
}
void GetSound(AL_POBJECT ToGet,char * Name){
STATUS LastSound;
for(LastSound=0;LastSound<ToGet->Object.SoundInfo.Max;LastSound++){
if(!strncmp(ToGet->Object.SoundInfo.Name[LastSound].Text,Name,strlen(Name))){
ToGet->Object.SoundInfo.Update = LastSound;
ToGet->Sound = al_load_sample(ToGet->Object.SoundInfo.Path[LastSound].Text);
break;
}
}
}
void PlayAudio(AL_OBJECT ToPlay){
if(ToPlay.Sound!=NULL){
if(!strncmp(ToPlay.Object.SoundInfo.Loop[ToPlay.Object.SoundInfo.Update].Text,"Loop",strlen("Loop")))al_play_sample(ToPlay.Sound,ToPlay.Object.SoundInfo.Volume,ToPlay.Object.SoundInfo.Balance,ToPlay.Object.SoundInfo.Speed,ALLEGRO_PLAYMODE_LOOP,NULL);
else al_play_sample(ToPlay.Sound,ToPlay.Object.SoundInfo.Volume,ToPlay.Object.SoundInfo.Balance,ToPlay.Object.SoundInfo.Speed,ALLEGRO_PLAYMODE_ONCE,NULL);
}
}
void SoundLoopType(AL_POBJECT ToChange,const char * SoundLoop){
if(ToChange->Object.SoundInfo.Update>0)ToChange->Object.SoundInfo.Loop[ToChange->Object.SoundInfo.Update] = Write(SoundLoop);
else {
ToChange->Object.SoundInfo.Loop = (PSTRING)malloc(sizeof(STRING));
ToChange->Object.SoundInfo.Loop[ToChange->Object.SoundInfo.Update] = Write(SoundLoop);
}
}
void CameraMove(AL_POBJECT Map,AL_POBJECT Stuff,MACHINE Pc,MAPMOVE Choice){
XSpeed(&Map->Object,Stuff->Object.XSpeed);
YSpeed(&Map->Object,Stuff->Object.YSpeed);
if(Choice==MAP_LEFT){
double XMin = Map->Object.Width-(Pc.Camera.Width/Map->Object.WidthSize);
system("cls");
printf("%lf %lf\n",XMin,(Pc.Camera.Width/2)-((Stuff->Object.Width*Stuff->Object.WidthSize)/2));
if(XScrollDecrease(&Map->Object,0)){}
if(!XDecrease(&Stuff->Object,0)){}
else {
if(XAround(Stuff->Object,0,(Pc.Camera.Width/2)-((Stuff->Object.Width*Stuff->Object.WidthSize)/2))){
if(!XViewDecrease(&Stuff->Object,0)){}
}
if(XAround(Stuff->Object,XMin-(Pc.Camera.Width/2)+((Stuff->Object.Width*Stuff->Object.WidthSize)/2) ,XMin)){
if(!XViewDecrease(&Stuff->Object,0)){}
}
printf("\rX %lf ",Stuff->Object.X);
}
}
if(Choice==MAP_RIGHT){
double Max = 0;
double XMax;
if((Map->Object.Width*Map->Object.WidthSize)>(Pc.Camera.Width/Map->Object.WidthSize)){
XMax = (Map->Object.Width*Map->Object.WidthSize)-(Pc.Camera.Width/Map->Object.WidthSize);
}
else XMax = XMax = (Map->Object.Width*Map->Object.WidthSize);
system("cls");
printf("%lf %lf\n",XMax,(Pc.Camera.Width/2)-((Stuff->Object.Width*Stuff->Object.WidthSize)/2));
if(Pc.Camera.Width<(Map->Object.Width*Map->Object.WidthSize)){Max = Map->Object.Width - (Pc.Camera.Width/Map->Object.WidthSize);}
if(XScrollIncrease(&Map->Object,Max)){}
if(!XIncrease(&Stuff->Object,XMax)){}
else {
if(XAround(Stuff->Object,0,(Pc.Camera.Width/2)-((Stuff->Object.Width*Map->Object.WidthSize)/2))){
if(!XViewIncrease(&Stuff->Object,Pc.Camera.Width-(Stuff->Object.Width*Stuff->Object.WidthSize))){}
}
if(XAround(Stuff->Object,XMax-(Pc.Camera.Width/2),XMax))if(!XViewIncrease(&Stuff->Object,Pc.Camera.Width-(Stuff->Object.Width*Stuff->Object.WidthSize))){}
printf("\rX %lf ",Stuff->Object.X);
}
}
if(Choice==MAP_UP){
double YMin = Map->Object.Height-(Pc.Camera.Height/Map->Object.HeightSize);
system("cls");
printf("%lf %lf\n",YMin,(Pc.Camera.Height/2)-((Stuff->Object.Height*Stuff->Object.HeightSize)/2));
if(YScrollDecrease(&Map->Object,0)){}
if(!YDecrease(&Stuff->Object,0)){}
else {
if(YAround(Stuff->Object,0,(Pc.Camera.Height/2)-((Stuff->Object.Height*Stuff->Object.HeightSize)/2))){
if(!YViewDecrease(&Stuff->Object,0)){}
}
if(YAround(Stuff->Object,YMin-(Pc.Camera.Height/2)+((Stuff->Object.Height*Stuff->Object.HeightSize)/2) ,YMin)){
if(!YViewDecrease(&Stuff->Object,0)){}
}
printf("\rY %lf ",Stuff->Object.Y);
}
}
if(Choice==MAP_DOWN){
double Max = 0;
double YMax;
if((Map->Object.Height*Map->Object.HeightSize)>(Pc.Camera.Height/Map->Object.HeightSize)){
YMax = (Map->Object.Height*Map->Object.HeightSize)-(Pc.Camera.Height/Map->Object.HeightSize);
}
else YMax = (Map->Object.Height*Map->Object.HeightSize);
system("cls");
printf("%lf %lf\n",YMax,(Pc.Camera.Height/2)-((Stuff->Object.Height*Stuff->Object.HeightSize)/2));
if(Pc.Camera.Height<(Map->Object.Height*Map->Object.HeightSize)){Max = Map->Object.Height - (Pc.Camera.Height/Map->Object.HeightSize);}
if(YScrollIncrease(&Map->Object,Max)){}
if(!YIncrease(&Stuff->Object,YMax)){}
else {
if(YAround(Stuff->Object,0,(Pc.Camera.Height/2)-((Stuff->Object.Height*Map->Object.HeightSize)/2))){
if(!YViewIncrease(&Stuff->Object,Pc.Camera.Height-(Stuff->Object.Height*Stuff->Object.HeightSize))){}
}
if(YAround(Stuff->Object,YMax-(Pc.Camera.Height/2),YMax))if(!YViewIncrease(&Stuff->Object,Pc.Camera.Height-(Stuff->Object.Height*Stuff->Object.HeightSize))){}
printf("\rY %lf ",Stuff->Object.Y);
}
}
}