#!/usr/bin/env omake
#----------------------------------------------------------------------------
#
#    \[XRo[g OMakefile@2D/3D\[XȈՃRo[g@ev[g
#
#    ȉ
#    @USERS
#    @ARC_FILE
#    @TARGET_DIR
#      LAYOUT_HEADER_DIR
#       RESOURCE_2D_DIR
#       RESOURCE_3D_DIR
#       LAYOUT_OPTION
#       MODEL3D_OPTIN
#    ϐɒlK؂ɐݒ肷邱ƂŁACAEg\[XA3D\[X̃Ro[gsƂł܂B
#
#
#@ۂ̎gṕA
#    resource/makesample@ɂ܂B
#
#----------------------------------------------------------------------------


#----------------------------------------------------------------------------
#      [U[`
#       CONVERT̓etrueɂ[U[Lq
#       @̃t@C clytcmdlύXlB
#       jtakahashi_tomoya hoge hoge2
#----------------------------------------------------------------------------
USERS[] =  nagihashi_toru ohta_tetsuji


#----------------------------------------------------------------------------
#      ^[Qbgt@C
#       Ƀ^[Qbgt@CLq@
#       jlyt_test_res
#        lyt_test_res.garc lyt_test_res.gaix܂B
#----------------------------------------------------------------------------
ARC_FILE = zukan_gra


#----------------------------------------------------------------------------
#      ʕRs[tH_
#----------------------------------------------------------------------------
#A[JCut@C
TARGET_DIR = $(getenv PROJECT_ROOT)/arc/

#Layout̃Ro[gɐwb_[̃Rs[
#j$(getenv PROGRAMDIR)/src/field/
LAYOUT_HEADER_DIR = $(getenv PROGRAMDIR)/src/app/zukan/

#binlinker Őꂽwb_[̃Rs[(PACK_FLAGtruêƂ̂݁j
BINLINKER_HEADER_DIR = $(getenv PROGRAMDIR)/src/app/zukan/list/


#----------------------------------------------------------------------------
#      ˑt@C
#
#      RESOURCE_2D_DIRɂ́ACAEg̃f[^i[tH_
#      RESOURCE_3D_DIRɂ́ARD\[X@p[eBN\[Xi[tH_Lq
#
#      2D\[X̃tH_́Aȉ̂悤ȍ\ɂĂB
#      hoge/
#      @@.clyt
#          .clan
#          .tga
#
#      3D\[X̃Ro[g͈ȉ̂悤ȍ\ɂĂB
#      hoge/
#          .cmdl
#          .cmata
#          .cskla
#          Textures/
#                  .ctex    Kvctex́ASTexturestH_Ɋi[
#      
#      ftHgݒł́AeNX`́Acmdlcmataɓ܂Bi̋MODEL3D_OPTINőI\łBj
#
#   j
#    RESOURCE_2D_DIR[] = layout00 layout01
#    RESOURCE_3D_DIR[] = model00 model01
#
#----------------------------------------------------------------------------
RESOURCE_2D_DIR[] = list_2d
RESOURCE_3D_DIR[] = 


##-----------------------------------------------------------------------------
# * CAEgf[^̐IvV
#     [option]
#         -h    wv\܂B
#         -f    tHgCAEgɊ܂߂Ȃ
#         -t    eNX`A[JCuɊ܂߂ȂB
#         -l    CAEgA[JCuɊ܂߂ȂB
#         -d    [JfBNg̃t@CȊO̓A[JCuɊ܂߂ȂB 
#         -rtex XOx]eNX`gpăRo[g
#               ̋@\gƂ́AtH_ȉ̍\ɂKvB
#               Ro[gtH_/
#                                       hoge.clyt
#                                       hoge.clan
#                                       eNX`.tga
#                                       eNX`.tga
#                                       eNX`.tga
#                                       texture/
#                                               90x]eNX`.tga
#                                               90x]eNX`.tga
#                                               90x]eNX`.tga
#         -notrn O̒usȂ
#         -textnum[{mە] eLXgyC̒̕w`FbNB
#            j-textnum48   w`FbNĂȂꍇ @[{mە]ɂB
#                               w蕶񒷁@@yCɐݒ肳Ă镶̕@ȂG[I
#
#
#         ̑@LayoutConverter̃IvVwł܂B
#         --no-convert-cvtrchar     eLXg{bNXɊ܂܂PUi𕶎R[hɕϊȂB
#         --omit-samekey            ŏAj[VԂŒlωȂꍇɂ́AL[o͂ȂB
#         --omit-samekey-all        Aj[VԂŒlωȂꍇɂ́AL[o͂ȂB
#         --omit-nokey-all          L[f[^Ȃꍇɂ́AAj[Vf[^o͂܂B
#         --bake-infinity           L[t[ԊOu萔vȊÔƂɁAJ[uČ悤ɃL[s[gďo͂B
#         --no-taginfo              L[t[ԃ^Ȍ܂߂܂BAj[Vԃ^O̒Pʂŏo͂ƂɗLłB
#         --no-check-version        CAEgt@C̃o[W`FbN܂B\n"
#         --cvtr-ref-tex-only       }eAeNX`p^[AjŎۂɎgpĂeNX`t@C܂B
#
##-----------------------------------------------------------------------------
LAYOUT_OPTION = -f



##-----------------------------------------------------------------------------
#    3DfRo[g@IvV
#    [option]
#    @ftHg@eNX`́Acmdlcmataɓ܂B
#
#      -ntex      eNX`́AeNX`ŃoCiB
#                cmdlcmataɂ́Agݍ܂ȂB
#      
#    
##-----------------------------------------------------------------------------
MODEL3D_OPTIN = 


##-----------------------------------------------------------------------------
#     t@CktO
#     trueɂƁAk܂B
##-----------------------------------------------------------------------------
COMP_FLAG = true

##-----------------------------------------------------------------------------
#     PacktO
#     
#     etH_ȉ̃f[^pbNāAA[JCuB
##-----------------------------------------------------------------------------
PACK_FLAG = false

#----------------------------------------------------------------------------
#
#   R~bgSVNݒ̂肢B
#
#   ȉ̃t@CSVNǗKv܂B
#   ݒ肢܂B
#
#   ./*.tmp
#   ./*.omc
#   ./CAEg̃tH_/tmp
#   ./CAEg̃tH_/binary
#   ./CAEg̃tH_/*.arc
#   ./CAEg̃tH_/*.namedat
#
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
#  !!!!!!!!ȉ́A[U[PʂŕύXKv܂B!!!!!!!
#----------------------------------------------------------------------------




















#----------------------------------------------------------------------------
#      macro
#       ̃}NǂݍނƂŁACONVERTUSERȂǂ`B
#----------------------------------------------------------------------------
include $(getenv PROJECT_ROOT)/resource/macro_define
include $(getenv GFL_TOOL_DIR)/lytsys/maketool
include $(getenv GFL_TOOL_DIR)/g3d_tool/g3d_omake_tool

#----------------------------------------------------------------------------
#  gpXNvg
#----------------------------------------------------------------------------
BINLINKER = ruby $(GFL_TOOL_DIR)/binlinker.rb

#----------------------------------------------------------------------------
#  ֐S
#----------------------------------------------------------------------------

LayoutConvert(folder,option) =
  CONVERT_OBJ = $(glob $(folder)/*.clyt) $(glob i, $(folder)/*.clan) $(glob i, $(folder)/*.tga)
  TARGET_OBJ = $(MakeLytDatDir $(folder),$(folder),$(CONVERT_OBJ),$(option))
  return $(TARGET_OBJ)

#----------------------------------------------------------------------------
#  CAEgRo[g
#
#  param array    folderz
#  param  option  Ro[gIvV
#----------------------------------------------------------------------------
LayoutsConvert(array,option) =
  TARGET_OBJS[] =
  
  foreach(folder,$(array))
    TARGET_OBJS += $(LayoutConvert $(folder),$(option))
    export
  
  return $(TARGET_OBJS)


#----------------------------------------------------------------------------
#  CAEgwb_|Rs[
#
#  param array          folderz
#  param  header_dir    wb_[Rs[
#----------------------------------------------------------------------------
LayoutsHeaderCopy(array,header_dir) =
  TARGET_OBJS[] = 
  
  foreach(folder,$(array))
    $(header_dir)/$(folder)_pane.h:$(folder)/$(folder)_pane.h
      cp $(folder)/$(folder)_pane.h $(header_dir)/

    $(header_dir)/$(folder).h:$(folder)/$(folder).h
      cp $(folder)/$(folder).h $(header_dir)/

    TARGET_OBJS += $(header_dir)/$(folder).h
    TARGET_OBJS += $(header_dir)/$(folder)_pane.h
    export
  
  return $(TARGET_OBJS)


#----------------------------------------------------------------------------
#  CAEg̃NA
#
#  param array          folderz
#  param  header_dir    wb_[Rs[
#----------------------------------------------------------------------------
LayoutsClear(array,header_dir) =
  TARGET_OBJS[] =

  foreach(folder,$(array))
    TARGET = $(ClearLytDatDir $(folder), $(folder))
    TARGET_OBJS += $(TARGET)
    
    $(TARGET):
      rm -f $(header_dir)/$(folder).h
      rm -f $(header_dir)/$(folder)_pane.h
    export
  
  return $(TARGET_OBJS)


#----------------------------------------------------------------------------
#  3D\[XRo[g
#
#  param array    folderz
#  param  option  Ro[gIvV
#----------------------------------------------------------------------------
Resource3DConvert(folder,option) =
  INTERMEDIATE_FILES[] = 
  INTERMEDIATE_FILES_TEXTURE_REFERENCE_SOLOVED[] = 
  TARGET_TEX_OBJS[] = 
  
  #eNX`QƐ쐬
  echo $(folder)/Textures > $(folder)_list.tmp
  
  #eNX`̓eNX`ŁAł߂B
  if $(equal $(option), -ntex)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmdl)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.ccam)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.clgt)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cenv)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cres)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmata)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmcla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmtpa)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmtsa)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmdla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cskla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cptl)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.csdr)
    TARGET_TEX_OBJS += $(G3DTOOL_MakeOneG3dBinaryFileInDirectorySimple $(folder)/binary/$(folder)_texture.bcmdl, $(folder)/Textures) 
    export

    
  #eNX`́AcmdlcmataɌł߂B
  else
    INTERMEDIATE_FILES_TEXTURE_REFERENCE_SOLOVED += $(glob i, $(folder)/*.cmdl)
    INTERMEDIATE_FILES_TEXTURE_REFERENCE_SOLOVED += $(glob i, $(folder)/*.cmata)
    INTERMEDIATE_FILES_TEXTURE_REFERENCE_SOLOVED += $(glob i, $(folder)/*.cmtpa)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.ccam)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.clgt)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cenv)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cres)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmcla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmtsa)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cmdla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cskla)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.cptl)
    INTERMEDIATE_FILES += $(glob i, $(folder)/*.csdr)
    export

  #Ro[g
  TARGET_OBJS[] = $(G3DTOOL_MakeEachG3dBinaryFile $(folder)/binary, $(INTERMEDIATE_FILES), --auto_create_shader=off) 
  TARGET_OBJS += $(G3DTOOL_MakeTextureReferenceSolvedG3dBinaryFileUsingTemporaryUsingDirectoryListSimple $(folder)/binary, $(INTERMEDIATE_FILES_TEXTURE_REFERENCE_SOLOVED), temp_$(folder)_list.txt) 
  TARGET_OBJS += $(TARGET_TEX_OBJS)
  return $(TARGET_OBJS)


Resource3DConverts(array,option) =
  TARGET_OBJS[] =
  
  #1OɐXgj
  rm -f *.tmp
  
  foreach(folder,$(array))
    TARGET_OBJS += $(Resource3DConvert $(folder), $(option)) 
    export

  return $(TARGET_OBJS)

Resource3DClear(array) =
  TARGET_OBJS[] =

  foreach(folder,$(array))
    ret = $(G3DTOOL_RemoveG3dBinaryAndTemporaryFileInDirectory $(folder)/binary)
    rm -f $(folder)/binary/*.*
    export 

  return 0


#----------------------------------------------------------------------------
#      f[^pbN
#----------------------------------------------------------------------------
PackDatas(folder,files,out_dir) =
  $(out_dir)/$(folder).pack $(folder)/$(folder).h:$(files)
    $(BINLINKER) $(files) $(out_dir)/$(folder).pack TM 128
    cp $(out_dir)/$(folder).h $(folder)
  return $(out_dir)/$(folder).pack


CopyPackHeader(folders,copy_dir,flag) =
  
  HEADERS[] =
  if $(equal $(flag), true)
    foreach(folder,$(folders))
      header = $(folder)/$(folder).h
      $(copy_dir)/$(folder).h:$(header)
        cp $(header) $(copy_dir)
      HEADERS += $(copy_dir)/$(folder).h
      export
    export
  return $(HEADERS)
      

#----------------------------------------------------------------------------
#      k
#----------------------------------------------------------------------------
CompFiles(array) =
  TARGET_OBJS[] =

  foreach(filename, $(array))
    $(filename)_lz:$(filename)
      $(CTR_COMP) -lex -o $(filename)_lz $(filename)

    TARGET_OBJS += $(filename)_lz
    export

  return $(TARGET_OBJS)

#----------------------------------------------------------------------------
#      oCiXg
#----------------------------------------------------------------------------
BINARY_FILES[] =
if $(or $(equal $(TARGETS), .DEFAULT) $(equal $(TARGETS), build))
  if $(equal $(CONVERTUSER), true)

    if $(equal $(PACK_FLAG), false)
      BINARY_FILES = $(LayoutsConvert $(RESOURCE_2D_DIR), $(LAYOUT_OPTION)) $(Resource3DConverts $(RESOURCE_3D_DIR), $(MODEL3D_OPTIN))
      export
    else
      #PACKĂAA[JCu
      foreach(folder,$(RESOURCE_2D_DIR))
        FILES = $(LayoutConvert $(folder), $(LAYOUT_OPTION))
        BINARY_FILES += $(PackDatas $(folder), $(FILES), $(folder)/binary)
        export

      foreach(folder,$(RESOURCE_3D_DIR))
        FILES = $(Resource3DConvert $(folder), $(MODEL3D_OPTIN))
        BINARY_FILES += $(PackDatas $(folder), $(FILES), $(folder)/binary)
        export

      export

    if $(equal $(COMP_FLAG), true)
      BINARY_FILES = $(CompFiles $(BINARY_FILES))
      export
    export
  export



#----------------------------------------------------------------------------
#      rh[
#----------------------------------------------------------------------------
build: $(TARGET_DIR)/$(ARC_FILE).garc $(TARGET_DIR)/$(ARC_FILE).gaix $(LayoutsHeaderCopy $(RESOURCE_2D_DIR), $(LAYOUT_HEADER_DIR)) $(CopyPackHeader $(RESOURCE_2D_DIR),$(BINLINKER_HEADER_DIR),$(PACK_FLAG)) $(CopyPackHeader $(RESOURCE_3D_DIR),$(BINLINKER_HEADER_DIR),$(PACK_FLAG))

$(TARGET_DIR)/$(ARC_FILE).garc $(TARGET_DIR)/$(ARC_FILE).gaix:$(ARC_FILE).garc $(ARC_FILE).gaix
  cp $(ARC_FILE).garc $(TARGET_DIR)
  cp $(ARC_FILE).gaix $(TARGET_DIR)

#ƁAUSER삵Ȃ
if $(equal $(CONVERTUSER), true)
  $(ARC_FILE).garc $(ARC_FILE).gaix:$(BINARY_FILES)
    $(GFARC) $(ARC_FILE) $(BINARY_FILES)
  

clean:
  rm -f $(TARGET_DIR)/$(ARC_FILE).garc
  rm -f $(TARGET_DIR)/$(ARC_FILE).gaix
  
if $(equal $(CONVERTUSER), true)
  clean:$(LayoutsClear $(RESOURCE_2D_DIR), $(LAYOUT_HEADER_DIR))
    ret = $(Resource3DClear $(RESOURCE_3D_DIR))
    rm -f $(ARC_FILE).garc
    rm -f $(ARC_FILE).gaix
    rm -f *.tmp


DefineDefaultRules()

