# 界面都以class的方式来定义,初始化部分定义界面外观,处理消息部分定义界面内部逻辑
# "处理消息"并不是必须的.如果"处理消息"不返回一个非空值的话,则会在当前界面无限循环

## 注意:界面定义都是纯粹的python代码，所以定义界面的文件不能放到 剧本 目录下，必须放到 代码 目录下

class 右键菜单:
  def 初始化(self):
    图片(0, 0, "系统\\GrayBG.png")
    按钮(400, 100, 文本="保存进度", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "保存进度")
    按钮(400, 145, 文本="读取进度", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "读取进度")
    按钮(400, 190, 文本="自动前进", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "AutoContinue")
    按钮(400, 235, 文本="快速略过", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "FastSkip")
    按钮(400, 280, 文本="操作说明", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "操作说明")
    按钮(400, 325, 文本="系统设置", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "系统设置")
    按钮(400, 370, 文本="返回游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 字体 = ("华文琥珀", 22), 悬浮音效 = "鼠标悬浮.mp3", 返回值 = "返回游戏")
      
  def 处理消息(self, 消息):
    if 消息 == "保存进度":
      加载界面(存档界面)
      
    if 消息 == "读取进度":
      加载界面(读档界面)  
      
    if 消息 == "操作说明":
      加载界面(帮助界面)
      
    if 消息 == "系统设置":
      加载界面(系统设置界面)
      
    return 消息

class 存档界面:
  def 初始化(self):
    图片(0, 0, "系统\\GrayBG.png")
    文本(400, 0, "保存进度", 锚点 = "中上")
    按钮(400, 60, 文本="返回游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 返回值 = "返回游戏")
    存档列表 = 获取存档列表()
    显示存档列表(存档列表)
  
  # 消息 就是存档的编号 (0-9 共10个) 
  def 处理消息(self, 消息):
    if 消息 != "返回游戏":      
      存档编号 = 消息
      确定存档 = "确定"
      if 已有存档(存档编号):
        确定存档 = 加载界面(消息框界面, -1, "存档【%s】已存在,要覆盖吗?" % 存档编号, "确定取消")      
      if 确定存档 == "确定":
        保存进度(存档编号)
        加载界面(消息框界面, -1, "存档【%s】已保存!" % 存档编号, "确定")        
      
    return 消息
  
class 读档界面:
  def 初始化(self):
    图片(0, 0, "系统\\GrayBG.png")
    文本(400, 0, "读取进度", 锚点 = "中上")
    按钮(400, 60, 文本="返回游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 返回值 = "返回游戏")
    存档列表 = 获取存档列表()
    显示存档列表(存档列表)
  
  # 消息 就是存档的编号 (0-9 共10个)
  def 处理消息(self, 消息):
    if 消息 != "返回游戏":
      存档编号 = 消息
      if 已有存档(存档编号):
        确定读档 = 加载界面(消息框界面, -1, "要读取存档【%s】吗?(未保存的进度将会丢失!)" % 消息, "确定取消")      
        if 确定读档 == "确定":
          return 读取进度(消息)
      else:
        加载界面(消息框界面, -1, "没有存档可以读取...", "确定")        
      
    return 消息

  
class 帮助界面:
  def 初始化(self):
    图片(0, 0, "系统\\GrayBG.png")
    文本(100, 50, "快速略过:回车键，Page Down键，鼠标滚轮向下", 颜色=(255,255,255), 锚点="左中")
    文本(100, 80, "快速回退:Page Up键，鼠标滚轮向上", 颜色=(255,255,255), 锚点="左中")
    文本(100, 150, "无双论坛: http://bbs.gamediy.net",  颜色=(255,255,255), 锚点="左中")
    文本(100, 180, "无双QQ群:21750804",  颜色=(255,255,255), 锚点="左中")
    按钮(100, 240, 文本="返回游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "左中", 宽 = 100, 返回值 = "返回游戏")
    
class 系统设置界面:
  def 初始化(self):
    图片(0, 0, "系统\\GrayBG.png")
    按钮(400, 200, 文本="切换全屏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 返回值 = "切换全屏")
    按钮(400, 245, 文本="退出游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 返回值 = "退出游戏")
    按钮(400, 290, 文本="返回游戏", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点 = "中中", 宽 = 100, 返回值 = "返回游戏")
    
  def 处理消息(self, 消息):
    if 消息 == "切换全屏":
      切换全屏()      
    elif 消息 == "退出游戏":
      退出游戏()
    
    return 消息    
      
    
# 两种类型 "确定" 和 "确定取消"    
class 消息框界面:    
  def 初始化(self, 消息内容, 类型 = "确定"):    
    图片(0, 0, "系统\\GrayBG.png")
    文本(400, 150, 消息内容, 锚点="中中")
    if 类型 == "确定":
      按钮(400, 200, 文本="确定", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点="中中", 宽=100, 返回值="确定" )
    elif 类型 == "确定取消":
      按钮(390, 200, 文本="确定", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点="右中", 宽=100, 返回值="确定" )
      按钮(410, 200, 文本="取消", 图片="界面\\按钮1.png", 激活="界面\\按钮高亮.png", 锚点="左中", 宽=100, 返回值="取消" )
    
    
# 存档需要有日期(Date)、标签(Label)、对话(Dialogue)、缩略图(Thumb)和游玩时间(GameTime)
# 游玩时间为元组 (小时, 分, 秒)
# 对话 保存存档时的对白
def 显示存档列表(存档列表):
  x = 100
  y = 130
  锚点 = "左中"
  存档编号 = 0
  for 存档 in 存档列表:
  
    if 存档["Date"]: #有存档的情况
      存档描述 = 存档["Date"] + "\n" 
      
      if False: #以下分支将显示总时间
        存档描述 += "总时间:"
        if 存档["GameTime"][0] > 0:
          存档描述 += ( str(存档["GameTime"][0]) + "小时" )
        if 存档["GameTime"][1] > 0:
          存档描述 += ( str(存档["GameTime"][1]) + "分" )
        if 存档["GameTime"][2] > 0:
          存档描述 += ( str(存档["GameTime"][2]) + "秒" )
      else: #以下分支显示 对话
        存档描述 += 存档["Dialogue"][0:10] #显示前10个字符
    else: #无存档的情况
      存档描述 = "没有存档"
    
    按钮(x, y, 文本 = 存档描述, 图片 = "界面\\存档按钮1.png", 锚点 = 锚点, 宽 = 200, 高 = 66, 返回值 = 存档编号)
    y += 85
    存档编号 += 1
    if 存档编号 == len(存档列表) / 2:
      x = 700
      y = 130
      锚点 = "右中"

# 判断是否已有存档  
def 已有存档(存档编号):
  存档列表 = 获取存档列表()
  return 存档列表[存档编号]["Date"]   #没有存档时,日期为空,相当于 否 (False)