Code : Tout sélectionner
;- Window Constants
;
Enumeration
#Main
EndEnumeration
;- Gadget Constants
;
Enumeration
#Btn_Apply
#Btn_OK
#Btn_Cancel
#Frm_E
#Lst_E
#Btn_E_Add
#Btn_E_Edit
#Btn_E_Del
#Lbl_Credits
#Frm_C
#Frm_Effet
#Lbl_E_Name
#Str_E_Name
#Lbl_E_Type
#Cmb_E_Type
#Chk_E_Actif
#Chk_E_Started
#Chk_E_Loop
#Lbl_C_Type
#Cmb_C_Type
#Btn_C_Add
#Btn_C_Apply
#Btn_C_Del
#Lst_C
#Lst_Effet
#Lbl_Effet_Type
#Cmb_Effet_Type
#Btn_Effet_Add
#Btn_Effet_Apply
#Btn_Effet_Del
#Lbl_C_List
#Lsl_C_List
EndEnumeration
;-Variables
Global ProjectFP$,EventFP$
Structure TEvent
name$
type.l
actif.l
lance.l
boucle.l
EndStructure
NewList TEventList.TEvent()
Procedure.l EventExists(eventname$)
; Debug "CountList()"
; Debug "Recherche de doublons sur "+Str(CountList(TEventList()))
Debug "ResetList()" : ResetList(TEventList())
While NextElement(TEventList())
Debug "TEventList()"
If TEventList()\name$=eventname$ : ProcedureReturn 1 : EndIf
Wend
Debug "Terminé"
ProcedureReturn 0
EndProcedure
Procedure ShowEventInfos(eventname$)
Debug "Recherche des infos..."
ResetList(TEventList())
While NextElement(TEventList())
If TEventList()\name$=eventname$
SetGadgetText(#Str_E_Name,TEventList()\name$)
SetGadgetState(#Cmb_E_Type,TEventList()\type)
SetGadgetState(#Chk_E_Actif,TEventList()\actif)
SetGadgetState(#Chk_E_Started,TEventList()\lance)
SetGadgetState(#Chk_E_Loop,TEventList()\boucle)
EndIf
Wend
EndProcedure
Procedure CreateEvent(name$,type,actif,lance,boucle)
r=EventExists(name$)
If r=0
AddGadgetItem(#Lst_E,-1,name$)
DefType.TEvent *dev
*dev=AddElement(TEventList())
If *dev<>0
*dev\name$=name$
*dev\type=type
*dev\actif=actif
*dev\lance=lance
*dev\boucle=boucle
Debug "Added!"
Else
MessageRequester("Erreur", "Impossible d'allouer de la mémoire pour un nouvel évenement !", 16)
EndIf
Else
MessageRequester("Erreur","Un évenement avec un nom identique existe déja.",#MB_ICONEXCLAMATION)
EndIf
EndProcedure
Procedure OpenProjectEvents()
If ProjectFP$="omicronle" : ProjectFP$="test.olp" : EndIf
EventFP$=Left(ProjectFP$,len-3)+"event"
If FileSize(EventFp$)>-1
fp=ReadFile(0,EventFP$)
If fp
Repeat
name$=ReadString()
type=Val(ReadString())
actif=Val(ReadString())
lance=Val(ReadString())
boucle=Val(ReadString())
ReadString()
CreateEvent(name$,type,actif,lance,boucle)
Until Eof(0)<>0
Else
MessageRequester("Erreur","Impossible de lire le fichier des évenements !",16)
EndIf
EndIf
EndProcedure
Procedure SaveProjectEvents()
If ProjectFP$="omicronle" : ProjectFP$="test.olp" : EndIf
len=Len(ProjectFP$)
EventFP$=Left(ProjectFP$,len-3)+"event"
fp=CreateFile(0,EventFP$)
If fp
ResetList(TEventList())
Debug "saving"
While NextElement(TEventList())
WriteStringN(TEventList()\name$)
WriteStringN(Str(TEventList()\type))
WriteStringN(Str(TEventList()\actif))
WriteStringN(Str(TEventList()\lance))
WriteStringN(Str(TEventList()\boucle))
WriteStringN("")
Wend
Debug "saved"
CloseFile(0)
Else
MessageRequester("Erreur","Impossible de créer le fichier "+EventFP$,16)
EndIf
EndProcedure
Procedure EventItemRequester(event_type,event_id)
EndProcedure
Procedure Open_Main()
If OpenWindow(#Main, 137, 52, 1000, 665, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Editeur d'évenements - ("+ProjectFP$+")")
If CreateGadgetList(WindowID())
ButtonGadget(#Btn_Apply, 885, 630, 110, 30, "Appliquer")
ButtonGadget(#Btn_OK, 655, 630, 110, 30, "OK")
ButtonGadget(#Btn_Cancel, 770, 630, 110, 30, "Annuler")
Frame3DGadget(#Frm_E, 5, 0, 215, 625, "Evenements")
ListViewGadget(#Lst_E, 10, 15, 205, 300)
ButtonGadget(#Btn_E_Add, 10, 595, 60, 25, "Ajouter")
ButtonGadget(#Btn_E_Edit, 80, 595, 60, 25, "Appliquer")
ButtonGadget(#Btn_E_Del, 150, 595, 65, 25, "Supprimer")
TextGadget(#Lbl_Credits, 5, 635, 325, 20, "Event Editor pour OMICRON Level Editor v0.5 - CYBISOFT")
Frame3DGadget(#Frm_C, 230, 0, 765, 310, "Conditions : causes de l'évenement")
Frame3DGadget(#Frm_Effet, 230, 315, 765, 310, "Effets : conséquences de l'évenement")
TextGadget(#Lbl_E_Name, 10, 330, 205, 15, "Nom de l'évenement")
StringGadget(#Str_E_Name, 10, 345, 205, 20, "")
TextGadget(#Lbl_E_Type, 10, 375, 205, 15, "Type d'évenement")
ComboBoxGadget(#Cmb_E_Type, 10, 390, 205, 140)
;items
AddGadgetItem(#Cmb_E_Type,0,"Camera Collision")
AddGadgetItem(#Cmb_E_Type,1,"Mesh Collision")
AddGadgetItem(#Cmb_E_Type,2,"Processus Parallèle")
CheckBoxGadget(#Chk_E_Actif, 10, 425, 205, 15, "Actif")
CheckBoxGadget(#Chk_E_Started, 10, 445, 205, 15, "Lancé au demarrage")
CheckBoxGadget(#Chk_E_Loop, 10, 465, 205, 15, "Répéter en boucle")
ButtonGadget(#Btn_C_Add, 760, 280, 75, 25, "Ajouter")
ButtonGadget(#Btn_C_Apply, 845, 280, 65, 25, "Modifier")
ButtonGadget(#Btn_C_Del, 920, 280, 70, 25, "Supprimer")
ListIconGadget(#Lst_C, 235, 15, 520, 290, "Condition", 200)
AddGadgetColumn(#Lst_C,1,"Description",320)
;items
;AddGadgetItem(#Lst_C,0,"Code Blitz3d"+Chr(10)+"Code source au langage Blitz3d.")
AddGadgetItem(#Lst_C,0,"Toujours"+Chr(10)+"Les effets se produisent toujours.")
ListIconGadget(#Lst_Effet, 235, 330, 520, 290, "Effet", 200)
AddGadgetColumn(#Lst_Effet,1,"Description",320)
;items
AddGadgetItem(#Lst_Effet,0,"Code Blitz3d"+Chr(10)+"Code source au langage Blitz3d.")
ButtonGadget(#Btn_Effet_Add, 760, 595, 75, 25, "Ajouter")
ButtonGadget(#Btn_Effet_Apply, 845, 595, 65, 25, "Modifier")
ButtonGadget(#Btn_Effet_Del, 920, 595, 70, 25, "Supprimer")
TextGadget(#Lbl_C_List, 760, 15, 230, 15, "Liste des conditions de l'évenement")
ListViewGadget(#Lsl_C_List, 760, 30, 230, 245)
OpenProjectEvents()
Repeat
e=WaitWindowEvent()
If e=#PB_Event_Gadget
Select EventGadgetID()
;MAIN WINDOW
Case #Btn_Cancel
e=#PB_Event_CloseWindow
Case #Btn_Ok
SaveProjectEvents()
e=#PB_Event_CloseWindow
Case #Btn_Apply
SaveProjectEvents()
;EVENT FRAME
Case #Btn_E_Add
eventname$=GetGadgetText(#Str_E_Name)
eventtype=GetGadgetState(#Cmb_E_Type)
If eventname$="" Or GetGadgetText(#Cmb_E_Type)=""
MessageRequester("Erreur","Vous n'avez pas indiqué le nom et/ou le type de l'évenement")
Else
CreateEvent(eventname$,eventtype,GetGadgetState(#Chk_E_Actif),GetGadgetState(#Chk_E_Started),GetGadgetState(#Chk_E_Loop))
EndIf
Case #Lst_E
ShowEventInfos(GetGadgetText(#Lst_E))
;CONDITIONS FRAME
Case #Lst_C
EndSelect
EndIf
Until e=#PB_Event_CloseWindow
End
EndIf
EndIf
EndProcedure
Procedure CheckFrom()
ProjectFP$=ProgramParameter()
If projectfp$<>"omicronle"
If FileSize(ProjectFP$)=-1 : MessageRequester("Erreur","Le fichier spécifié par OmicronLE n'existe pas !",16) : End : EndIf
EndIf
Open_Main()
EndProcedure