1876 lines
67 KiB
C#
1876 lines
67 KiB
C#
|
|
/*
|
|||
|
|
********************************************************************************
|
|||
|
|
*Copyright(C),coolae.net
|
|||
|
|
*Author: chenbin
|
|||
|
|
*Version: 2.0
|
|||
|
|
*Date: 2017-01-09
|
|||
|
|
*Description: 打包工具
|
|||
|
|
*Others:
|
|||
|
|
*History:
|
|||
|
|
*********************************************************************************
|
|||
|
|
*/
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEditor;
|
|||
|
|
using System;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.IO.Compression;
|
|||
|
|
using Coolape;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using CSObjectWrapEditor;
|
|||
|
|
using UnityEditor.Callbacks;
|
|||
|
|
using UnityEditor.Purchasing;
|
|||
|
|
using UnityEditor.SceneManagement;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Coolape Publisher .
|
|||
|
|
/// 库猿编译发布工具
|
|||
|
|
/// 2013-11-16
|
|||
|
|
/// create by chenbin
|
|||
|
|
/// </summary>
|
|||
|
|
|
|||
|
|
|
|||
|
|
public class ECLPublisher : EditorWindow
|
|||
|
|
{
|
|||
|
|
public delegate void OnClickCallback();
|
|||
|
|
|
|||
|
|
string[] AndroidIconsName = {
|
|||
|
|
"192x192",
|
|||
|
|
"144x144",
|
|||
|
|
"96x96",
|
|||
|
|
"72x72",
|
|||
|
|
"48x48",
|
|||
|
|
"36x36"
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
string[] IosIconsName = {
|
|||
|
|
"180x180",
|
|||
|
|
"167x167",
|
|||
|
|
"152x152",
|
|||
|
|
"144x144",
|
|||
|
|
"120x120",
|
|||
|
|
"114x114",
|
|||
|
|
"76x76",
|
|||
|
|
"72x72",
|
|||
|
|
"57x57",
|
|||
|
|
"120x120(Spotlight)",
|
|||
|
|
"80x80(Spotlight)",
|
|||
|
|
"40x40(Spotlight)",
|
|||
|
|
"87x87(Settings)",
|
|||
|
|
"58x58(Settings)",
|
|||
|
|
"29x29(Settings)",
|
|||
|
|
"60x60(Notification)",
|
|||
|
|
"40x40(Notification)",
|
|||
|
|
"20x20(Notification)",
|
|||
|
|
"1024x1024(App Store)"
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
string[] standandsIconsName = {
|
|||
|
|
"1024x1024",
|
|||
|
|
"512x512",
|
|||
|
|
"256x256",
|
|||
|
|
"128x128",
|
|||
|
|
"64x64",
|
|||
|
|
"32x32",
|
|||
|
|
"16x16",
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const string configFile = ECLProjectManager.FrameData + "/cfg/publishChannel.cfg";
|
|||
|
|
//渠道列表
|
|||
|
|
Hashtable channelMap = new Hashtable();
|
|||
|
|
ArrayList channelEnum = new ArrayList();
|
|||
|
|
ArrayList channelKey = new ArrayList();
|
|||
|
|
ArrayList channelAliasEnum = new ArrayList();
|
|||
|
|
Hashtable channelData = new Hashtable();
|
|||
|
|
|
|||
|
|
//配置渠道
|
|||
|
|
int channelCount = 0;
|
|||
|
|
int enumCount = 0;
|
|||
|
|
bool isFinishInit = false;
|
|||
|
|
string newChlKey = "";
|
|||
|
|
string newChlName = "";
|
|||
|
|
string newChlAlias = "";
|
|||
|
|
string copyChlFromKey = "";
|
|||
|
|
bool isShowCfgChlDesc = false;
|
|||
|
|
int currChlIndex = -1;
|
|||
|
|
bool isComfireDelete = false;
|
|||
|
|
bool isShowHelpBox = false;
|
|||
|
|
bool isShowCfgFileDesc = false;
|
|||
|
|
string currChlKey = "";
|
|||
|
|
string currChlID = "";
|
|||
|
|
string currChlAlias = "";
|
|||
|
|
ChlData currChlData = new ChlData();
|
|||
|
|
Vector2 scrollPos = Vector2.zero;
|
|||
|
|
Vector2 scrollPos2 = Vector2.zero;
|
|||
|
|
bool isShowIcons = false;
|
|||
|
|
bool isCanEdite = false;
|
|||
|
|
bool haveModifyChlCfg = false;
|
|||
|
|
static UnityEngine.Object tmpCopyFolder2PluginObj;
|
|||
|
|
static bool tmpCopyFolder2PluginUnZip = false;
|
|||
|
|
|
|||
|
|
string[] tabs = new string[] { "Channel List", "Channel Config" };
|
|||
|
|
int tabIndex = 0;
|
|||
|
|
|
|||
|
|
void OnLostFocus()
|
|||
|
|
{
|
|||
|
|
isFinishInit = false;
|
|||
|
|
}
|
|||
|
|
// 防止在 onGUI 中处理点击事件会出现编辑器报错,从而使用 delayCall 的方式来实现点击处理 - by Ken.
|
|||
|
|
void onClickOK()
|
|||
|
|
{
|
|||
|
|
if (onClickCallbak != null)
|
|||
|
|
{
|
|||
|
|
onClickCallbak();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void OnGUI()
|
|||
|
|
{
|
|||
|
|
if (!isFinishInit)
|
|||
|
|
{
|
|||
|
|
isFinishInit = true;
|
|||
|
|
initData();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!ECLProjectSetting.isProjectExit(ECLProjectManager.self))
|
|||
|
|
{
|
|||
|
|
GUIStyle style = new GUIStyle();
|
|||
|
|
style.fontSize = 20;
|
|||
|
|
style.normal.textColor = Color.yellow;
|
|||
|
|
GUILayout.Label("The scene is not ready, create it now?", style);
|
|||
|
|
if (GUILayout.Button("Show Project Manager"))
|
|||
|
|
{
|
|||
|
|
EditorWindow.GetWindow<ECLProjectManager>(false, "CoolapeProject", true);
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
//==========title============
|
|||
|
|
tabIndex = GUILayout.Toolbar(tabIndex, tabs);
|
|||
|
|
|
|||
|
|
//配置渠道
|
|||
|
|
if (tabIndex == 1)
|
|||
|
|
{
|
|||
|
|
scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
|
|||
|
|
{
|
|||
|
|
showCfgChannel();
|
|||
|
|
}
|
|||
|
|
EditorGUILayout.EndScrollView();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (haveModifyChlCfg)
|
|||
|
|
{
|
|||
|
|
if (EditorUtility.DisplayDialog("Alert", "You have modified the channel config,do you want to save the data?", "Save", "Cancel"))
|
|||
|
|
{
|
|||
|
|
saveData();
|
|||
|
|
}
|
|||
|
|
haveModifyChlCfg = false;
|
|||
|
|
}
|
|||
|
|
//渠道详细信息
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
//--------------------left------------------------------------
|
|||
|
|
scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(245));
|
|||
|
|
{
|
|||
|
|
ECLEditorUtl.BeginContents();
|
|||
|
|
{
|
|||
|
|
//channel list
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
if (channelEnum != null)
|
|||
|
|
{
|
|||
|
|
channelCount = channelEnum.Count;
|
|||
|
|
for (int i = 0; i < channelCount; i++)
|
|||
|
|
{
|
|||
|
|
if (i == currChlIndex)
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button(channelEnum[i].ToString() + " (" + channelAliasEnum[i] + ")"))
|
|||
|
|
{
|
|||
|
|
currChlKey = channelKey[i].ToString();
|
|||
|
|
currChlID = channelEnum[i].ToString();
|
|||
|
|
currChlAlias = channelAliasEnum[i].ToString();
|
|||
|
|
isComfireDelete = false;
|
|||
|
|
isShowHelpBox = false;
|
|||
|
|
isShowIcons = false;
|
|||
|
|
currChlIndex = i;
|
|||
|
|
getChlData(currChlKey, currChlID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
ECLEditorUtl.EndContents();
|
|||
|
|
}
|
|||
|
|
EditorGUILayout.EndScrollView();
|
|||
|
|
|
|||
|
|
//========right========
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
GUILayout.BeginVertical();
|
|||
|
|
{
|
|||
|
|
if (currChlIndex >= 0 && currChlIndex < channelEnum.Count)
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(-5);
|
|||
|
|
using (new UnityEditorHelper.HighlightBox())
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
if (!isComfireDelete && !isShowHelpBox)
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Save"))
|
|||
|
|
{
|
|||
|
|
saveChlBuildSetting();
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Chg4Edit"))
|
|||
|
|
{
|
|||
|
|
chgChl4Edit();
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Apply"))
|
|||
|
|
{
|
|||
|
|
applySetting();
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Apply&Build"))
|
|||
|
|
{
|
|||
|
|
showMsgBox(currChlKey + ":确认各参数是否正确!", MessageType.Warning, applyAndBuild);
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
if (GUILayout.Button(isCanEdite ? "Lock Edite" : "Unlock Edite"))
|
|||
|
|
{
|
|||
|
|
isCanEdite = !isCanEdite;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.red;
|
|||
|
|
if (GUILayout.Button("Clean"))
|
|||
|
|
{
|
|||
|
|
isComfireDelete = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (isComfireDelete)
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
EditorGUILayout.HelpBox("确定要清除所选的渠道的配置信息?", MessageType.Warning);
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Cancel"))
|
|||
|
|
{
|
|||
|
|
isComfireDelete = false;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.red;
|
|||
|
|
if (GUILayout.Button("Clean Now"))
|
|||
|
|
{
|
|||
|
|
isComfireDelete = false;
|
|||
|
|
cleanChlSetting(currChlKey, currChlID);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (isShowHelpBox)
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
EditorGUILayout.HelpBox(msgBoxMsg, msgBoxType);
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Okey"))
|
|||
|
|
{
|
|||
|
|
isShowHelpBox = false;
|
|||
|
|
EditorApplication.delayCall += onClickOK;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.red;
|
|||
|
|
if (GUILayout.Button("Cancel"))
|
|||
|
|
{
|
|||
|
|
isShowHelpBox = false;
|
|||
|
|
onClickCallbak = null;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
GUILayout.Space(10);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.Space(-11);
|
|||
|
|
scrollPos2 = EditorGUILayout.BeginScrollView(scrollPos2);
|
|||
|
|
{
|
|||
|
|
if (currChlIndex >= 0)
|
|||
|
|
{
|
|||
|
|
using (new UnityEditorHelper.HighlightBox())
|
|||
|
|
{
|
|||
|
|
GUILayout.Space(10);
|
|||
|
|
GUI.enabled = isCanEdite;
|
|||
|
|
channelCell(currChlKey, false);
|
|||
|
|
GUI.enabled = true;
|
|||
|
|
GUI.backgroundColor = Color.white;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
EditorGUILayout.EndScrollView();
|
|||
|
|
}
|
|||
|
|
GUILayout.EndVertical();
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void showCfgChannel()
|
|||
|
|
{
|
|||
|
|
ECLEditorUtl.BeginContents();
|
|||
|
|
{
|
|||
|
|
using (new UnityEditorHelper.HighlightBox())
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
GUILayout.Label("#", GUILayout.Width(20));
|
|||
|
|
GUILayout.Label("Key", GUILayout.Width(125));
|
|||
|
|
GUILayout.Label("ID", GUILayout.Width(125));
|
|||
|
|
GUILayout.Label("Symbols", GUILayout.Width(125));
|
|||
|
|
GUILayout.Label("Alias", GUILayout.Width(125));
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Save", GUILayout.Width(125)))
|
|||
|
|
{
|
|||
|
|
saveData();
|
|||
|
|
copyChlFromKey = "";
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
if (GUILayout.Button("!", GUILayout.Width(20)))
|
|||
|
|
{
|
|||
|
|
isShowCfgChlDesc = !isShowCfgChlDesc;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
if (isShowCfgChlDesc)
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
EditorGUILayout.HelpBox(
|
|||
|
|
"以下为渠道定义。注意当定义好渠道后," +
|
|||
|
|
"可以在对应的渠道代码中加上宏的预编译判断处理渠道特殊的逻辑," +
|
|||
|
|
"例如小米渠道=“mi”,宏为:“CHL_MI”",
|
|||
|
|
MessageType.Info);
|
|||
|
|
}
|
|||
|
|
showChannelConfigList();
|
|||
|
|
showNewChannel();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
ECLEditorUtl.EndContents();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public void showChannelConfigList()
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
if (channelEnum != null)
|
|||
|
|
{
|
|||
|
|
enumCount = channelEnum.Count;
|
|||
|
|
for (int i = 0; i < enumCount; i++)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label((i + 1).ToString(), GUILayout.Width(20));
|
|||
|
|
channelKey[i] = GUILayout.TextField(channelKey[i].ToString(), GUILayout.Width(125));
|
|||
|
|
channelEnum[i] = GUILayout.TextField(channelEnum[i].ToString(), GUILayout.Width(125));
|
|||
|
|
string symbols = "CHL_" + channelEnum[i].ToString().ToUpper();
|
|||
|
|
GUILayout.TextField(symbols, GUILayout.Width(125));
|
|||
|
|
if (i >= channelAliasEnum.Count)
|
|||
|
|
{
|
|||
|
|
channelAliasEnum.Add("");
|
|||
|
|
}
|
|||
|
|
channelAliasEnum[i] = GUILayout.TextField(channelAliasEnum[i] == null ? "" : channelAliasEnum[i].ToString(), GUILayout.Width(125));
|
|||
|
|
|
|||
|
|
if (GUILayout.Button("Modify", GUILayout.Width(60f)))
|
|||
|
|
{
|
|||
|
|
haveModifyChlCfg = true;
|
|||
|
|
channelData["channelKey"] = channelKey;
|
|||
|
|
channelData["channelEnum"] = channelEnum;
|
|||
|
|
channelData["channelAliasEnum"] = channelAliasEnum;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (GUILayout.Button("Copy", GUILayout.Width(60f)))
|
|||
|
|
{
|
|||
|
|
haveModifyChlCfg = true;
|
|||
|
|
copyChlFromKey = channelKey[i].ToString();
|
|||
|
|
newChlKey = "Copy " + channelKey[i];
|
|||
|
|
newChlName = "Copy " + channelEnum[i];
|
|||
|
|
newChlAlias = "Copy " + channelAliasEnum[i];
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.red;
|
|||
|
|
if (GUILayout.Button("-", GUILayout.Width(20)))
|
|||
|
|
{
|
|||
|
|
if (EditorUtility.DisplayDialog("Alert", string.Format("Really want to delete [{0}] Chanel!", channelKey[i]), "Okay", "Cancel"))
|
|||
|
|
{
|
|||
|
|
haveModifyChlCfg = true;
|
|||
|
|
channelKey.RemoveAt(i);
|
|||
|
|
channelEnum.RemoveAt(i);
|
|||
|
|
channelAliasEnum.RemoveAt(i);
|
|||
|
|
channelData["channelKey"] = channelKey;
|
|||
|
|
channelData["channelEnum"] = channelEnum;
|
|||
|
|
channelData["channelAliasEnum"] = channelAliasEnum;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void showNewChannel()
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.cyan;
|
|||
|
|
GUILayout.Label((enumCount + 1).ToString(), GUILayout.Width(20));
|
|||
|
|
newChlKey = GUILayout.TextField(newChlKey, GUILayout.Width(125));
|
|||
|
|
newChlName = GUILayout.TextField(newChlName, GUILayout.Width(125));
|
|||
|
|
string symbols = "";
|
|||
|
|
if (!string.IsNullOrEmpty(newChlName))
|
|||
|
|
{
|
|||
|
|
symbols = "CHL_" + newChlName.ToUpper();
|
|||
|
|
}
|
|||
|
|
GUILayout.TextField(symbols, GUILayout.Width(125));
|
|||
|
|
newChlAlias = GUILayout.TextField(newChlAlias, GUILayout.Width(125));
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
|
|||
|
|
GUI.color = Color.green;
|
|||
|
|
if (GUILayout.Button("Add", GUILayout.Width(60f)))
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(newChlKey)
|
|||
|
|
|| string.IsNullOrEmpty(newChlName))
|
|||
|
|
{
|
|||
|
|
EditorUtility.DisplayDialog("Alert", "Channel key || Channel ID is null!", "Okey");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (!string.IsNullOrEmpty(newChlKey) &&
|
|||
|
|
!string.IsNullOrEmpty(newChlName))
|
|||
|
|
{
|
|||
|
|
if (channelMap[newChlKey] != null)
|
|||
|
|
{
|
|||
|
|
EditorUtility.DisplayDialog("Alert", string.Format("The key [{0}] is allready exist, Plese given a unique key!", newChlKey), "Okey");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
channelKey.Add(newChlKey);
|
|||
|
|
channelEnum.Add(newChlName);
|
|||
|
|
channelAliasEnum.Add(newChlAlias);
|
|||
|
|
channelData["channelKey"] = channelKey;
|
|||
|
|
channelData["channelEnum"] = channelEnum;
|
|||
|
|
channelData["channelAliasEnum"] = channelAliasEnum;
|
|||
|
|
|
|||
|
|
haveModifyChlCfg = true;
|
|||
|
|
|
|||
|
|
if (!string.IsNullOrEmpty(copyChlFromKey))
|
|||
|
|
{
|
|||
|
|
object tmpData = channelMap[copyChlFromKey];
|
|||
|
|
ChlData ChlData = tmpData == null ? new ChlData() : ChlData.parse((Hashtable)tmpData);
|
|||
|
|
ChlData.mChlName = newChlName;
|
|||
|
|
channelMap[newChlKey] = ChlData.toMap();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
newChlName = "";
|
|||
|
|
newChlKey = "";
|
|||
|
|
newChlAlias = "";
|
|||
|
|
saveData();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning("Please input the channel name!");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
if (GUILayout.Button("Clear", GUILayout.Width(60f)))
|
|||
|
|
{
|
|||
|
|
newChlName = "";
|
|||
|
|
newChlKey = "";
|
|||
|
|
newChlAlias = "";
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
if (channelMap.ContainsKey(newChlKey))
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
EditorGUILayout.HelpBox(
|
|||
|
|
string.Format("The key [{0}] is allready exist, Plese given a unique key!", newChlKey),
|
|||
|
|
MessageType.Error);
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string msgBoxMsg = "";
|
|||
|
|
MessageType msgBoxType = MessageType.None;
|
|||
|
|
OnClickCallback onClickCallbak;
|
|||
|
|
|
|||
|
|
void showMsgBox(string msg, MessageType type, OnClickCallback callbak = null)
|
|||
|
|
{
|
|||
|
|
msgBoxMsg = msg;
|
|||
|
|
msgBoxType = type;
|
|||
|
|
onClickCallbak = callbak;
|
|||
|
|
isShowHelpBox = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Inits the data.
|
|||
|
|
/// 初始化数据
|
|||
|
|
/// </summary>
|
|||
|
|
void initData()
|
|||
|
|
{
|
|||
|
|
if (FileEx.FileExists(Application.dataPath + "/" + configFile))
|
|||
|
|
{
|
|||
|
|
byte[] buffer = FileEx.ReadAllBytes(Application.dataPath + "/" + configFile);
|
|||
|
|
if (buffer.Length <= 0)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
MemoryStream ms = new MemoryStream();
|
|||
|
|
ms.Write(buffer, 0, buffer.Length);
|
|||
|
|
ms.Position = 0;
|
|||
|
|
object obj = B2InputStream.readObject(ms);
|
|||
|
|
if (obj != null)
|
|||
|
|
{
|
|||
|
|
channelData = (Hashtable)obj;
|
|||
|
|
channelEnum = (ArrayList)(channelData["channelEnum"]);
|
|||
|
|
channelEnum = channelEnum == null ? new ArrayList() : channelEnum;
|
|||
|
|
|
|||
|
|
channelKey = (ArrayList)(channelData["channelKey"]);
|
|||
|
|
channelKey = channelKey == null ? new ArrayList() : channelKey;
|
|||
|
|
if (channelEnum.Count > channelKey.Count)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < channelEnum.Count; i++)
|
|||
|
|
{
|
|||
|
|
channelKey.Add("");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
channelAliasEnum = (ArrayList)(channelData["channelAliasEnum"]);
|
|||
|
|
channelAliasEnum = channelAliasEnum == null ? new ArrayList() : channelAliasEnum;
|
|||
|
|
channelMap = (Hashtable)(channelData["channelMap"]);
|
|||
|
|
channelMap = channelMap == null ? new Hashtable() : channelMap;
|
|||
|
|
|
|||
|
|
ArrayList delKeys = new ArrayList();
|
|||
|
|
foreach (DictionaryEntry item in channelMap)
|
|||
|
|
{
|
|||
|
|
if (!channelKey.Contains(item.Key.ToString()))
|
|||
|
|
{
|
|||
|
|
delKeys.Add(item.Key.ToString());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (int i = 0; i < delKeys.Count; i++)
|
|||
|
|
{
|
|||
|
|
channelMap.Remove(delKeys[i].ToString());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
channelMap = new Hashtable();
|
|||
|
|
channelEnum = new ArrayList();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void refreshData()
|
|||
|
|
{
|
|||
|
|
// isCanEdite = false;
|
|||
|
|
// copyChlFromKey = "";
|
|||
|
|
// newChlKey = "";
|
|||
|
|
// newChlName = "";
|
|||
|
|
// newChlAlias = "";
|
|||
|
|
// isFinishInit = false;
|
|||
|
|
// isFinishInit = false;
|
|||
|
|
// isShowIcons = false;
|
|||
|
|
// isShowCfgChlDesc = false;
|
|||
|
|
// currChlIndex = -1;
|
|||
|
|
// isComfireDelete = false;
|
|||
|
|
// isShowHelpBox = false;
|
|||
|
|
// scrollPos = Vector2.zero;
|
|||
|
|
// scrollPos2 = Vector2.zero;
|
|||
|
|
initData();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void saveData()
|
|||
|
|
{
|
|||
|
|
MemoryStream ms = new MemoryStream();
|
|||
|
|
B2OutputStream.writeObject(ms, channelData);
|
|||
|
|
FileEx.WriteAllBytes(Application.dataPath + "/" + configFile, ms.ToArray());
|
|||
|
|
haveModifyChlCfg = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Channels the cell.
|
|||
|
|
/// 渠道单元
|
|||
|
|
/// </summary>
|
|||
|
|
void channelCell(string chlName, bool canEdit)
|
|||
|
|
{
|
|||
|
|
if (currChlData == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
int width = 200;
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
//Product Name
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Product Name", GUILayout.Width(width));
|
|||
|
|
currChlData.mProductName = GUILayout.TextField(currChlData.mProductName);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//Platform ios or android
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Select Platform", GUILayout.Width(width));
|
|||
|
|
currChlData.mPlatform = (ChlPlatform)EditorGUILayout.EnumPopup("", currChlData.mPlatform);
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.ios)
|
|||
|
|
{
|
|||
|
|
currChlData.mCreateEclipseProject = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Md5 of APK Sign Code", GUILayout.Width(width));
|
|||
|
|
currChlData.md5SignCode = GUILayout.TextField(currChlData.md5SignCode);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("use Unity IAP plugin", GUILayout.Width(width));
|
|||
|
|
currChlData.isUseUnityIAP = GUILayout.Toggle(currChlData.isUseUnityIAP, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
// app store
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Target Android Store", GUILayout.Width(width));
|
|||
|
|
#if USE_UNITYIAP
|
|||
|
|
currChlData.mTargetAndroidStore = (UnityEngine.Purchasing.AndroidStore)EditorGUILayout.EnumPopup ("", currChlData.mTargetAndroidStore);
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Default Icon
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUI.enabled = true;
|
|||
|
|
if (GUILayout.Button("Icons"))
|
|||
|
|
{
|
|||
|
|
isShowIcons = !isShowIcons;
|
|||
|
|
}
|
|||
|
|
GUI.enabled = isCanEdite;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
if (isShowIcons)
|
|||
|
|
{
|
|||
|
|
using (new UnityEditorHelper.HighlightBox(Color.gray))
|
|||
|
|
{
|
|||
|
|
string[] iconsName = { };
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
iconsName = AndroidIconsName;
|
|||
|
|
}
|
|||
|
|
else if (currChlData.mPlatform == ChlPlatform.ios)
|
|||
|
|
{
|
|||
|
|
iconsName = IosIconsName;
|
|||
|
|
} else if(currChlData.mPlatform == ChlPlatform.standaloneWIN || currChlData.mPlatform == ChlPlatform.StandaloneOSX) {
|
|||
|
|
iconsName = standandsIconsName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (int i = 0; i < iconsName.Length; i++)
|
|||
|
|
{
|
|||
|
|
currChlData.mDefaultIcon[iconsName[i]] =
|
|||
|
|
EditorGUILayout.ObjectField(iconsName[i],
|
|||
|
|
(Texture2D)(currChlData.mDefaultIcon[iconsName[i]]),
|
|||
|
|
typeof(Texture2D), false) as Texture2D;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Splash Image
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
currChlData.mSplashImage = EditorGUILayout.ObjectField("Splash Image",
|
|||
|
|
currChlData.mSplashImage,
|
|||
|
|
typeof(Texture2D), false) as Texture2D;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//Bundle Indentifier
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Bundle Indentifier", GUILayout.Width(width));
|
|||
|
|
currChlData.mBundleIndentifier = GUILayout.TextField(currChlData.mBundleIndentifier);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//Bundle Version
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Bundle Version", GUILayout.Width(width));
|
|||
|
|
currChlData.mBundleVersion = GUILayout.TextField(currChlData.mBundleVersion);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//Bundle Version Code
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Bundle Version Code", GUILayout.Width(width));
|
|||
|
|
currChlData.mBundleVersionCode = EditorGUILayout.IntField(currChlData.mBundleVersionCode);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//Scripting Define Symbols
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Scripting Define Symbols", GUILayout.Width(width));
|
|||
|
|
GUILayout.Label(currChlData.mScriptingDefineSymbols);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Other Scripting Define Symbols", GUILayout.Width(width));
|
|||
|
|
currChlData.mOtherScriptingDefineSymbols = GUILayout.TextField(currChlData.mOtherScriptingDefineSymbols);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
// SubChannel
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("SubChannel", GUILayout.Width(width));
|
|||
|
|
currChlData.mSubChannel = EditorGUILayout.TextField(currChlData.mSubChannel);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("SubChannel2", GUILayout.Width(width));
|
|||
|
|
currChlData.mCtccChannel = EditorGUILayout.TextField(currChlData.mCtccChannel);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("isThirdExit", GUILayout.Width(width));
|
|||
|
|
currChlData.isThirdExit = GUILayout.Toggle(currChlData.isThirdExit, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("isMoreGame", GUILayout.Width(width));
|
|||
|
|
currChlData.isMoreGame = GUILayout.Toggle(currChlData.isMoreGame, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("isSwitchAccount", GUILayout.Width(width));
|
|||
|
|
currChlData.isSwitchAccount = GUILayout.Toggle(currChlData.isSwitchAccount, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
GUILayout.Label("isBuildWithLogView", GUILayout.Width(width));
|
|||
|
|
currChlData.isBuildWithLogView = GUILayout.Toggle(currChlData.isBuildWithLogView, "");
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
// Create Eclipse Project
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Create Eclipse Project", GUILayout.Width(width));
|
|||
|
|
currChlData.mCreateEclipseProject = GUILayout.Toggle(currChlData.mCreateEclipseProject, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Build Location
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.ios ||
|
|||
|
|
currChlData.mPlatform == ChlPlatform.webgl ||
|
|||
|
|
currChlData.mCreateEclipseProject)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Build Location", GUILayout.Width(width));
|
|||
|
|
currChlData.mBuildLocation = GUILayout.TextField(currChlData.mBuildLocation);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
GUILayout.Label("***Build Location是相对于工程目录的路径,但是不包括“Assets/”目录!");
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
//copy files
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Folder Copy to Plugin", GUILayout.Width(width));
|
|||
|
|
GUI.color = Color.yellow;
|
|||
|
|
GUILayout.Label("Note: copy to [Assets/Plugins/Android/] or [Assets/Plugins/iOS/]");
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
for (int i = 0; i < currChlData.mCopyDirPaths.Count; i++)
|
|||
|
|
{
|
|||
|
|
Hashtable m = currChlData.mCopyDirPaths[i] as Hashtable;
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("", GUILayout.Width(width));
|
|||
|
|
//dir:copy路径, unZip:true
|
|||
|
|
UnityEngine.Object obj = EditorGUILayout.ObjectField(getObjByPath(MapEx.getString(m, "dir")), typeof(UnityEngine.Object));
|
|||
|
|
if (obj != getObjByPath(MapEx.getString(m, "dir")))
|
|||
|
|
{
|
|||
|
|
if (obj == null)
|
|||
|
|
{
|
|||
|
|
m["dir"] = "";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m["dir"] = AssetDatabase.GetAssetPath(obj.GetInstanceID());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
m["unZip"] = GUILayout.Toggle(MapEx.getBool(m, "unZip"), "And UnZip the Zip files");
|
|||
|
|
currChlData.mCopyDirPaths[i] = m;
|
|||
|
|
if (GUILayout.Button("-", GUILayout.Width(50)))
|
|||
|
|
{
|
|||
|
|
if (EditorUtility.DisplayDialog("Alert", "Really want to remove it?", "Okay", "Cancel"))
|
|||
|
|
{
|
|||
|
|
currChlData.mCopyDirPaths.RemoveAt(i);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("", GUILayout.Width(width));
|
|||
|
|
//dir:copy路径, unZip:true
|
|||
|
|
tmpCopyFolder2PluginObj = EditorGUILayout.ObjectField(tmpCopyFolder2PluginObj, typeof(UnityEngine.Object));
|
|||
|
|
tmpCopyFolder2PluginUnZip = GUILayout.Toggle(tmpCopyFolder2PluginUnZip, "And UnZip the Zip files");
|
|||
|
|
if (GUILayout.Button("+", GUILayout.Width(50)))
|
|||
|
|
{
|
|||
|
|
if (tmpCopyFolder2PluginObj != null)
|
|||
|
|
{
|
|||
|
|
Hashtable m = new Hashtable();
|
|||
|
|
m["dir"] = AssetDatabase.GetAssetPath(tmpCopyFolder2PluginObj.GetInstanceID());
|
|||
|
|
m["unZip"] = tmpCopyFolder2PluginUnZip;
|
|||
|
|
currChlData.mCopyDirPaths.Add(m);
|
|||
|
|
tmpCopyFolder2PluginObj = null;
|
|||
|
|
tmpCopyFolder2PluginUnZip = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
|
|||
|
|
// GUILayout.BeginHorizontal ();
|
|||
|
|
// {
|
|||
|
|
// GUILayout.Label ("Special Folder Copy to Plugin", GUILayout.Width (width));
|
|||
|
|
// currChlData.mSpecialCopyDir = EditorGUILayout.ObjectField (currChlData.mSpecialCopyDir, typeof(UnityEngine.Object));
|
|||
|
|
// }
|
|||
|
|
// GUILayout.EndHorizontal ();
|
|||
|
|
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
//server
|
|||
|
|
ECLEditorUtl.BeginContents();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Server settings", GUILayout.Width(width));
|
|||
|
|
List<string> toolbarNames = new List<string>();
|
|||
|
|
for (int i = 0; i < ECLProjectManager.data.hotUpgradeServers.Count; i++)
|
|||
|
|
{
|
|||
|
|
HotUpgradeServerInfor dd = ECLProjectManager.data.hotUpgradeServers[i] as HotUpgradeServerInfor;
|
|||
|
|
toolbarNames.Add(dd.name);
|
|||
|
|
}
|
|||
|
|
currChlData.serverIndex = GUILayout.Toolbar(currChlData.serverIndex, toolbarNames.ToArray());
|
|||
|
|
if (ECLProjectManager.data.hotUpgradeServers.Count > 0)
|
|||
|
|
{
|
|||
|
|
HotUpgradeServerInfor selectedServer = ECLProjectManager.data.hotUpgradeServers[currChlData.serverIndex] as HotUpgradeServerInfor;
|
|||
|
|
currChlData.serverKey = selectedServer.key;
|
|||
|
|
|
|||
|
|
//===================================================
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Host 4 entry:", GUILayout.Width(width));
|
|||
|
|
GUILayout.TextField(selectedServer.host4Entry);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//===================================================
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Port 4 entry:", GUILayout.Width(width));
|
|||
|
|
GUILayout.TextField(selectedServer.port4Entry.ToString());
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
//===================================================
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
ECLEditorUtl.EndContents();
|
|||
|
|
|
|||
|
|
//publishing settings
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Publishing settings", GUILayout.Width(width));
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Use Keystore", GUILayout.Width(width));
|
|||
|
|
currChlData.mLicenseVerification = GUILayout.Toggle(currChlData.mLicenseVerification, "");
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
if (currChlData.mLicenseVerification)
|
|||
|
|
{
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Keystore", GUILayout.Width(width));
|
|||
|
|
currChlData.mKeystoreName = EditorGUILayout.ObjectField(currChlData.mKeystoreName, typeof(UnityEngine.Object));
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Keystore Pass", GUILayout.Width(width));
|
|||
|
|
currChlData.mKeystorePass = EditorGUILayout.TextField(currChlData.mKeystorePass);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Keyalias Name", GUILayout.Width(width));
|
|||
|
|
currChlData.mKeyaliasName = EditorGUILayout.TextField(currChlData.mKeyaliasName);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUILayout.Label("Keyalias Pass", GUILayout.Width(width));
|
|||
|
|
currChlData.mKeyaliasPass = EditorGUILayout.TextField(currChlData.mKeyaliasPass);
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//Be careful
|
|||
|
|
GUILayout.BeginHorizontal();
|
|||
|
|
{
|
|||
|
|
GUI.color = Color.red;
|
|||
|
|
GUILayout.Label("Special Instructions", GUILayout.Width(width));
|
|||
|
|
GUI.color = Color.white;
|
|||
|
|
GUI.contentColor = Color.yellow;
|
|||
|
|
currChlData.mAlertDesc = GUILayout.TextArea(currChlData.mAlertDesc, GUILayout.Height(50f));
|
|||
|
|
GUI.contentColor = Color.white;
|
|||
|
|
}
|
|||
|
|
GUILayout.EndHorizontal();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void getChlData(string chlKey, string chlID)
|
|||
|
|
{
|
|||
|
|
currChlData = new ChlData();
|
|||
|
|
if (channelMap == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
object tmpData = channelMap[chlKey];
|
|||
|
|
currChlData = tmpData == null ? new ChlData() : ChlData.parse((Hashtable)tmpData);
|
|||
|
|
currChlData.mChlName = chlID;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Saves the chl build setting.
|
|||
|
|
/// 保存渠道打包设置
|
|||
|
|
/// </summary>
|
|||
|
|
void saveChlBuildSetting()
|
|||
|
|
{
|
|||
|
|
if (currChlData == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
currChlData.refreshData();
|
|||
|
|
if (channelMap == null)
|
|||
|
|
{
|
|||
|
|
channelMap = new Hashtable();
|
|||
|
|
}
|
|||
|
|
channelMap[currChlKey] = currChlData.toMap();
|
|||
|
|
channelData["channelKey"] = channelKey;
|
|||
|
|
channelData["channelMap"] = channelMap;
|
|||
|
|
channelData["channelAliasEnum"] = channelAliasEnum;
|
|||
|
|
saveData();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Cleans the chl setting.
|
|||
|
|
/// 清空渠道打包设置
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name='chlName'>
|
|||
|
|
/// Chl name.
|
|||
|
|
/// </param>
|
|||
|
|
void cleanChlSetting(string chlName, string chlID)
|
|||
|
|
{
|
|||
|
|
channelMap[chlName] = null;
|
|||
|
|
channelData["channelKey"] = channelKey;
|
|||
|
|
channelData["channelMap"] = channelMap;
|
|||
|
|
channelData["channelAliasEnum"] = channelAliasEnum;
|
|||
|
|
saveData();
|
|||
|
|
getChlData(chlName, chlID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void chgChl4Edit()
|
|||
|
|
{
|
|||
|
|
resetScriptingDefineSymbols();
|
|||
|
|
|
|||
|
|
applyIcons();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void applyIcons()
|
|||
|
|
{
|
|||
|
|
/*
|
|||
|
|
* Most platforms support viewing icons in multiple sizes so Unity lets
|
|||
|
|
* you specify multiple icon textures for each platform. The list will only
|
|||
|
|
* be assigned if it has the same length as the list of icon sizes returned
|
|||
|
|
* by GetIconSizesForTargetGroup and if the specified platform is supported in this editor.
|
|||
|
|
*/
|
|||
|
|
List<Texture2D> icons = new List<Texture2D>();
|
|||
|
|
// int[] iconSize = PlayerSettings.GetIconSizesForTargetGroup(currChlData.buildTargetGroup);
|
|||
|
|
// Debug.Log("iconSize==" + iconSize.Length);
|
|||
|
|
// for (int i = 0; i< iconSize.Length; i++) {
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
string[] iconNames = null;
|
|||
|
|
if (currChlData.buildTarget == BuildTarget.Android)
|
|||
|
|
{
|
|||
|
|
iconNames = AndroidIconsName;
|
|||
|
|
#if USE_UNITYIAP
|
|||
|
|
UnityPurchasingEditor.TargetAndroidStore (currChlData.mTargetAndroidStore);
|
|||
|
|
#endif
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
}
|
|||
|
|
else if (currChlData.buildTarget == BuildTarget.iOS)
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
} else if (currChlData.buildTarget == BuildTarget.iPhone) {
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
iconNames = IosIconsName;
|
|||
|
|
}
|
|||
|
|
else if (currChlData.mPlatform == ChlPlatform.standaloneWIN || currChlData.mPlatform == ChlPlatform.StandaloneOSX)
|
|||
|
|
{
|
|||
|
|
iconNames = standandsIconsName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (CLCfgBase.self != null)
|
|||
|
|
{
|
|||
|
|
CLCfgBase.self.singinMd5Code = currChlData.md5SignCode;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (int i = 0; iconNames != null && i < iconNames.Length; i++)
|
|||
|
|
{
|
|||
|
|
icons.Add((Texture2D)(currChlData.mDefaultIcon[iconNames[i]]));
|
|||
|
|
}
|
|||
|
|
PlayerSettings.SetIconsForTargetGroup(currChlData.buildTargetGroup, icons.ToArray());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void resetScriptingDefineSymbols()
|
|||
|
|
{
|
|||
|
|
string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(currChlData.buildTargetGroup);
|
|||
|
|
if (!string.IsNullOrEmpty(symbols))
|
|||
|
|
{
|
|||
|
|
string[] symbolsList = symbols.Split(';');
|
|||
|
|
for (int i = 0; i < symbolsList.Length; i++)
|
|||
|
|
{
|
|||
|
|
if (symbolsList[i].StartsWith("CHL_"))
|
|||
|
|
{
|
|||
|
|
symbolsList[i] = "";
|
|||
|
|
}
|
|||
|
|
else if (symbolsList[i].StartsWith("USE_UNITYIAP"))
|
|||
|
|
{
|
|||
|
|
symbolsList[i] = "";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
symbols = "";
|
|||
|
|
for (int i = 0; i < symbolsList.Length; i++)
|
|||
|
|
{
|
|||
|
|
if (!string.IsNullOrEmpty(symbolsList[i]))
|
|||
|
|
{
|
|||
|
|
symbols += symbolsList[i] + ";";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
symbols += (";" + currChlData.mScriptingDefineSymbols);
|
|||
|
|
if (currChlData.isUseUnityIAP)
|
|||
|
|
{
|
|||
|
|
symbols += (";USE_UNITYIAP");
|
|||
|
|
}
|
|||
|
|
if(!string.IsNullOrEmpty(currChlData.mOtherScriptingDefineSymbols))
|
|||
|
|
{
|
|||
|
|
symbols += (";" + currChlData.mOtherScriptingDefineSymbols);
|
|||
|
|
}
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(currChlData.buildTargetGroup, symbols);
|
|||
|
|
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, symbols);
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, symbols);
|
|||
|
|
#else
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup (BuildTargetGroup.iPhone, symbols);
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, symbols);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Applies the setting.
|
|||
|
|
/// 应用渠道设置
|
|||
|
|
/// </summary>
|
|||
|
|
void applySetting()
|
|||
|
|
{
|
|||
|
|
if (currChlData == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
PlayerSettings.productName = currChlData.mProductName;
|
|||
|
|
//Icons
|
|||
|
|
applyIcons();
|
|||
|
|
|
|||
|
|
//Splash imgae
|
|||
|
|
PlayerSettings.resolutionDialogBanner = currChlData.mSplashImage;
|
|||
|
|
//indentifier & version
|
|||
|
|
|
|||
|
|
#if UNITY_5_6_OR_NEWER
|
|||
|
|
PlayerSettings.applicationIdentifier = currChlData.mBundleIndentifier;
|
|||
|
|
PlayerSettings.SetApplicationIdentifier(currChlData.buildTargetGroup, currChlData.mBundleIndentifier);
|
|||
|
|
#else
|
|||
|
|
PlayerSettings.bundleIdentifier = currChlData.mBundleIndentifier;
|
|||
|
|
#endif
|
|||
|
|
PlayerSettings.bundleVersion = currChlData.mBundleVersion;
|
|||
|
|
// modifyCfgFile();
|
|||
|
|
if (currChlData.buildTargetGroup == BuildTargetGroup.Android)
|
|||
|
|
{
|
|||
|
|
PlayerSettings.Android.bundleVersionCode = currChlData.mBundleVersionCode;
|
|||
|
|
} else if (currChlData.buildTargetGroup == BuildTargetGroup.iOS)
|
|||
|
|
{
|
|||
|
|
PlayerSettings.iOS.buildNumber = currChlData.mBundleVersionCode + "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
resetScriptingDefineSymbols();
|
|||
|
|
|
|||
|
|
// subchannel
|
|||
|
|
string chlCfgPath = Application.streamingAssetsPath + "/chnCfg.json";
|
|||
|
|
Hashtable chlMap = null;
|
|||
|
|
if (File.Exists(chlCfgPath))
|
|||
|
|
{
|
|||
|
|
chlMap = JSON.DecodeMap(File.ReadAllText(chlCfgPath));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
chlMap = new Hashtable();
|
|||
|
|
}
|
|||
|
|
chlMap["SubChannel"] = currChlData.mSubChannel;
|
|||
|
|
chlMap["SubChannel2"] = currChlData.mCtccChannel;
|
|||
|
|
chlMap["chn"] = currChlData.mChlName;
|
|||
|
|
chlMap["isThirdExit"] = currChlData.isThirdExit;
|
|||
|
|
chlMap["isMoreGame"] = currChlData.isMoreGame;
|
|||
|
|
chlMap["IsSwitchAccount"] = currChlData.isSwitchAccount;
|
|||
|
|
File.WriteAllText(chlCfgPath, JSON.JsonEncode(chlMap));
|
|||
|
|
|
|||
|
|
// copy files
|
|||
|
|
if (currChlData.mCopyDirPaths != null)
|
|||
|
|
{
|
|||
|
|
Hashtable m = null;
|
|||
|
|
for (int i = 0; i < currChlData.mCopyDirPaths.Count; i++)
|
|||
|
|
{
|
|||
|
|
m = currChlData.mCopyDirPaths[i] as Hashtable;
|
|||
|
|
copyFilesToPlugin(MapEx.getString(m, "dir"), MapEx.getBool(m, "unZip"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// special copy
|
|||
|
|
// if (currChlData.mSpecialCopyDir != null) {
|
|||
|
|
// copyFilesToPlugin (currChlData.mSpecialCopyDirPath);
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
//PlayerSettings.Android.useCustomKeystore = currChlData.mLicenseVerification;
|
|||
|
|
if (currChlData.mLicenseVerification)
|
|||
|
|
{
|
|||
|
|
PlayerSettings.Android.keystoreName = currChlData.mKeystoreNamePath;
|
|||
|
|
PlayerSettings.Android.keystorePass = currChlData.mKeystorePass;
|
|||
|
|
PlayerSettings.Android.keyaliasName = currChlData.mKeyaliasName;
|
|||
|
|
PlayerSettings.Android.keyaliasPass = currChlData.mKeyaliasPass;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
PlayerSettings.Android.keystoreName = "";
|
|||
|
|
PlayerSettings.Android.keystorePass = "";
|
|||
|
|
PlayerSettings.Android.keyaliasName = "";
|
|||
|
|
PlayerSettings.Android.keyaliasPass = "";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (currChlData.isBuildWithLogView && ReporterMessageReceiver.self == null)
|
|||
|
|
{
|
|||
|
|
ReporterEditor.CreateReporter();
|
|||
|
|
ReporterModificationProcessor.BuildInfo.addUpdateDelegate();
|
|||
|
|
}
|
|||
|
|
if (ECLProjectManager.data.hotUpgradeServers != null &&
|
|||
|
|
ECLProjectManager.data.hotUpgradeServers.Count > 0)
|
|||
|
|
{
|
|||
|
|
HotUpgradeServerInfor serverInfor = ECLProjectManager.data.hotUpgradeServers[currChlData.serverIndex] as HotUpgradeServerInfor;
|
|||
|
|
CLVerManager.self.baseUrl = serverInfor.hotUpgradeBaseUrl;
|
|||
|
|
#if !UNITY_WEBGL
|
|||
|
|
//Net.self.host4Publish = serverInfor.host4Entry;
|
|||
|
|
//Net.self.gatePort = serverInfor.port4Entry;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
[PostProcessBuildAttribute(1)]
|
|||
|
|
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
|
|||
|
|
{
|
|||
|
|
if (buildTarget == BuildTarget.iOS)
|
|||
|
|
{
|
|||
|
|
// string projPath = PBXProject.GetPBXProjectPath(path);
|
|||
|
|
// PBXProject proj = new PBXProject();
|
|||
|
|
//
|
|||
|
|
// proj.ReadFromString(File.ReadAllText(projPath));
|
|||
|
|
// string target = proj.TargetGuidByName("Unity-iPhone");
|
|||
|
|
//
|
|||
|
|
// // システムのフレームワークを追加
|
|||
|
|
// proj.AddFrameworkToProject(target, "AssetsLibrary.framework", false);
|
|||
|
|
//
|
|||
|
|
// // 自前のフレームワークを追加
|
|||
|
|
// CopyAndReplaceDirectory("Assets/Lib/mylib.framework", Path.Combine(path, "Frameworks/mylib.framework"));
|
|||
|
|
// proj.AddFileToBuild(target, proj.AddFile("Frameworks/mylib.framework", "Frameworks/mylib.framework", PBXSourceTree.Source));
|
|||
|
|
//
|
|||
|
|
// // ファイルを追加
|
|||
|
|
// var fileName = "my_file.xml";
|
|||
|
|
// var filePath = Path.Combine("Assets/Lib", fileName);
|
|||
|
|
// File.Copy(filePath, Path.Combine(path, fileName));
|
|||
|
|
// proj.AddFileToBuild(target, proj.AddFile(fileName, fileName, PBXSourceTree.Source));
|
|||
|
|
//
|
|||
|
|
// // Yosemiteでipaが書き出せないエラーに対応するための設定
|
|||
|
|
// proj.SetBuildProperty(target, "CODE_SIGN_RESOURCE_RULES_PATH", "$(SDKROOT)/ResourceRules.plist");
|
|||
|
|
//
|
|||
|
|
// // フレームワークの検索パスを設定・追加
|
|||
|
|
// proj.SetBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(inherited)");
|
|||
|
|
// proj.AddBuildProperty(target, "FRAMEWORK_SEARCH_PATHS", "$(PROJECT_DIR)/Frameworks");
|
|||
|
|
//
|
|||
|
|
// // 書き出し
|
|||
|
|
// File.WriteAllText(projPath, proj.WriteToString());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Applies the and build.
|
|||
|
|
/// 设置并编译
|
|||
|
|
/// </summary>
|
|||
|
|
void applyAndBuild()
|
|||
|
|
{
|
|||
|
|
if (currChlData == null)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
if (currChlData.buildTarget == BuildTarget.iOS)
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
if (currChlData.buildTarget == BuildTarget.iPhone) {
|
|||
|
|
#endif
|
|||
|
|
if (string.IsNullOrEmpty(currChlData.mBuildLocation))
|
|||
|
|
{
|
|||
|
|
EditorUtility.DisplayDialog("Alert", "The BuildLocation is empty!", null);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
applySetting();
|
|||
|
|
|
|||
|
|
if (!File.Exists(GeneratorConfig.common_path + "XLuaGenAutoRegister.cs"))
|
|||
|
|
{
|
|||
|
|
if (!EditorUtility.DisplayDialog("Alert", "Code has not been genrated for Xlua!", "Generate Now", "Cancel"))
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Generator.GenAll();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//如果平台不一样,先切到
|
|||
|
|
if (EditorUserBuildSettings.activeBuildTarget != currChlData.buildTarget)
|
|||
|
|
{
|
|||
|
|
// EditorUserBuildSettings.SwitchActiveBuildTarget (currChlData.buildTarget);
|
|||
|
|
EditorUtility.DisplayDialog("Alert", "The active build target is not the same with current build target!", null);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (currChlData.mCreateEclipseProject)
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning("The channel need Create Eclipse Project!!");
|
|||
|
|
showMsgBox("The channel need Create Eclipse Project!!", MessageType.Warning);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
AssetDatabase.Refresh();
|
|||
|
|
|
|||
|
|
string[] levels = null;
|
|||
|
|
if (EditorSceneManager.sceneCount > 0)
|
|||
|
|
{
|
|||
|
|
levels = new string[EditorSceneManager.sceneCount];
|
|||
|
|
for (int i = 0; i < EditorSceneManager.sceneCount; i++)
|
|||
|
|
{
|
|||
|
|
levels[i] = EditorSceneManager.GetSceneAt(i).path;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
levels = new string[1];
|
|||
|
|
levels[0] = EditorSceneManager.GetActiveScene().path;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string locationName = currChlData.mPlatform.ToString() + "_" + currChlData.mChlName + "_" + currChlData.mBundleIndentifier + "_v" + currChlData.mBundleVersion + "_" + DateEx.format(DateEx.fmt_yyyy_MM_dd_HH_mm_ss_fname);
|
|||
|
|
// string locationName = currChlData.mBundleIndentifier;
|
|||
|
|
// locationName = locationName.Substring(locationName.LastIndexOf(".")+1);
|
|||
|
|
// locationName += "_v" + currChlData.mBundleVersion + "_" + DateEx.format (DateEx.fmt_yyyy_MM_dd_HH_mm_ss_fname);
|
|||
|
|
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
if (!currChlData.mCreateEclipseProject)
|
|||
|
|
{
|
|||
|
|
locationName += ".apk";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
locationName = dataPath() + currChlData.mBuildLocation;
|
|||
|
|
}
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
}
|
|||
|
|
else if (currChlData.buildTarget == BuildTarget.iOS)
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
} else if (currChlData.buildTarget == BuildTarget.iPhone) {
|
|||
|
|
#endif
|
|||
|
|
// EditorUserBuildSettings.appendProject = true;
|
|||
|
|
locationName = dataPath() + currChlData.mBuildLocation;
|
|||
|
|
}
|
|||
|
|
else if (currChlData.buildTarget == BuildTarget.StandaloneWindows64)
|
|||
|
|
{
|
|||
|
|
locationName = currChlData.mProductName + ".exe";
|
|||
|
|
}
|
|||
|
|
else if (currChlData.buildTarget == BuildTarget.StandaloneOSX)
|
|||
|
|
{
|
|||
|
|
locationName = currChlData.mProductName + ".app";
|
|||
|
|
} else if(currChlData.buildTarget == BuildTarget.WebGL)
|
|||
|
|
{
|
|||
|
|
locationName = dataPath() + currChlData.mBuildLocation;
|
|||
|
|
}
|
|||
|
|
bool needApend = true;
|
|||
|
|
if (!string.IsNullOrEmpty(currChlData.mBuildLocation))
|
|||
|
|
{
|
|||
|
|
if (!Directory.Exists(locationName))
|
|||
|
|
{
|
|||
|
|
needApend = false;
|
|||
|
|
Directory.CreateDirectory(locationName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Debug.Log("Publish path:" + locationName);
|
|||
|
|
|
|||
|
|
if (Reporter.self != null)
|
|||
|
|
{
|
|||
|
|
Reporter.self.gameObject.SetActive(false);
|
|||
|
|
}
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
if (currChlData.buildTarget == BuildTarget.iOS && needApend)
|
|||
|
|
{
|
|||
|
|
#else
|
|||
|
|
if (currChlData.buildTarget == BuildTarget.iPhone && needApend) {
|
|||
|
|
#endif
|
|||
|
|
BuildPipeline.BuildPlayer(levels, locationName, currChlData.buildTarget, BuildOptions.AcceptExternalModificationsToPlayer);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
BuildPipeline.BuildPlayer(levels, locationName, currChlData.buildTarget, BuildOptions.None);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (Reporter.self != null)
|
|||
|
|
{
|
|||
|
|
SceneAsset.DestroyImmediate(Reporter.self.gameObject);
|
|||
|
|
ReporterModificationProcessor.BuildInfo.rmUpdateDelegate();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
string symbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(currChlData.buildTargetGroup);
|
|||
|
|
symbols.Replace(";USE_UNITYIAP", "");
|
|||
|
|
PlayerSettings.SetScriptingDefineSymbolsForGroup(currChlData.buildTargetGroup, symbols);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// void modifyCfgFile()
|
|||
|
|
// {
|
|||
|
|
// if (string.IsNullOrEmpty(cfgFilePath)) {
|
|||
|
|
// return;
|
|||
|
|
// }
|
|||
|
|
// string[] buffer = File.ReadAllLines(dataPath() + cfgFilePath);
|
|||
|
|
// string line = "";
|
|||
|
|
// bool finishModifyVer = false;
|
|||
|
|
// bool finishModifyVerCoder = false;
|
|||
|
|
// for (int i = 0; i < buffer.Length; i++) {
|
|||
|
|
// line = buffer [i];
|
|||
|
|
// if (line.IndexOf("public static string version") >= 0) {
|
|||
|
|
// buffer [i] = " public static string version = \"" + currChlData.mBundleVersion + "\";";
|
|||
|
|
// finishModifyVer = true;
|
|||
|
|
// } else if (line.IndexOf("public static int versionCode") >= 0) {
|
|||
|
|
// buffer [i] = " public static int versionCode = " + currChlData.mBundleVersionCode + ";";
|
|||
|
|
// finishModifyVerCoder = true;
|
|||
|
|
// }
|
|||
|
|
// if (finishModifyVer && finishModifyVerCoder) {
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// File.WriteAllLines(dataPath() + cfgFilePath, buffer);
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Copies the files to plugin.
|
|||
|
|
/// 把文件拷贝到Plugin目录
|
|||
|
|
/// </summary>
|
|||
|
|
void copyFilesToPlugin(string fromPath, bool unZip)
|
|||
|
|
{
|
|||
|
|
string toPath = "";
|
|||
|
|
if (currChlData.mPlatform == ChlPlatform.android)
|
|||
|
|
{
|
|||
|
|
toPath = "Assets/Plugins/Android/";
|
|||
|
|
}
|
|||
|
|
else if (currChlData.mPlatform == ChlPlatform.ios)
|
|||
|
|
{
|
|||
|
|
toPath = "Assets/Plugins/iOS/";
|
|||
|
|
}
|
|||
|
|
Debug.Log(dataPath());
|
|||
|
|
doCopyFiles(dataPath() + fromPath, dataPath() + toPath, unZip);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Datas the path.
|
|||
|
|
/// 取得工程路径,不带"/Assets/"
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>
|
|||
|
|
/// The path.
|
|||
|
|
/// </returns>
|
|||
|
|
string dataPath()
|
|||
|
|
{
|
|||
|
|
string tmpPath = Application.dataPath + "/";
|
|||
|
|
return tmpPath.Replace("/Assets/", "/");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void doCopyFiles(string fromPath, string toPath, bool unZip)
|
|||
|
|
{
|
|||
|
|
string[] fileEntries = Directory.GetFiles(fromPath);
|
|||
|
|
string extension = "";
|
|||
|
|
string fileName = "";
|
|||
|
|
foreach (string filePath in fileEntries)
|
|||
|
|
{
|
|||
|
|
extension = Path.GetExtension(filePath);
|
|||
|
|
if (ECLEditorUtl.isIgnoreFile(filePath))
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
fileName = Path.GetFileName(filePath);
|
|||
|
|
if (unZip && extension.ToLower() == ".zip")
|
|||
|
|
{
|
|||
|
|
ZipEx.UnZip(filePath, toPath, 4096);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (File.Exists(toPath + fileName))
|
|||
|
|
{
|
|||
|
|
File.Delete(toPath + fileName);
|
|||
|
|
}
|
|||
|
|
File.Copy(filePath, toPath + fileName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
string[] dirEntries = Directory.GetDirectories(fromPath);
|
|||
|
|
string dirName = "";
|
|||
|
|
string newToPath = "";
|
|||
|
|
foreach (string dir in dirEntries)
|
|||
|
|
{
|
|||
|
|
dirName = Path.GetFileName(dir);
|
|||
|
|
newToPath = toPath + dirName + "/";
|
|||
|
|
if (!Directory.Exists(newToPath))
|
|||
|
|
{
|
|||
|
|
Directory.CreateDirectory(newToPath);
|
|||
|
|
}
|
|||
|
|
doCopyFiles(dir, newToPath, unZip);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static Hashtable __objsMap = new Hashtable();
|
|||
|
|
|
|||
|
|
public static UnityEngine.Object getObjByPath(string path)
|
|||
|
|
{
|
|||
|
|
UnityEngine.Object obj = __objsMap[path] as UnityEngine.Object;
|
|||
|
|
if (obj == null)
|
|||
|
|
{
|
|||
|
|
if (!string.IsNullOrEmpty(path))
|
|||
|
|
{
|
|||
|
|
obj = AssetDatabase.LoadAssetAtPath(
|
|||
|
|
path,
|
|||
|
|
typeof(UnityEngine.Object));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
__objsMap[path] = obj;
|
|||
|
|
return obj;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Chl platform.
|
|||
|
|
/// 平台
|
|||
|
|
/// </summary>
|
|||
|
|
public enum ChlPlatform
|
|||
|
|
{
|
|||
|
|
android,
|
|||
|
|
ios,
|
|||
|
|
standaloneWIN,
|
|||
|
|
StandaloneOSX,
|
|||
|
|
webgl,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// Chl data.
|
|||
|
|
/// 渠道数据
|
|||
|
|
/// </summary>
|
|||
|
|
public class ChlData
|
|||
|
|
{
|
|||
|
|
public string mChlName = "";
|
|||
|
|
public string mProductName = "";
|
|||
|
|
public ChlPlatform mPlatform = ChlPlatform.android;
|
|||
|
|
public bool isUseUnityIAP = false;
|
|||
|
|
#if USE_UNITYIAP
|
|||
|
|
public UnityEngine.Purchasing.AndroidStore mTargetAndroidStore = UnityEngine.Purchasing.AndroidStore.GooglePlay;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
public BuildTargetGroup buildTargetGroup
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
switch (mPlatform)
|
|||
|
|
{
|
|||
|
|
case ChlPlatform.android:
|
|||
|
|
return BuildTargetGroup.Android;
|
|||
|
|
case ChlPlatform.ios:
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
return BuildTargetGroup.iOS;
|
|||
|
|
#else
|
|||
|
|
return BuildTargetGroup.iPhone;
|
|||
|
|
#endif
|
|||
|
|
case ChlPlatform.standaloneWIN:
|
|||
|
|
case ChlPlatform.StandaloneOSX:
|
|||
|
|
return BuildTargetGroup.Standalone;
|
|||
|
|
case ChlPlatform.webgl:
|
|||
|
|
return BuildTargetGroup.WebGL;
|
|||
|
|
}
|
|||
|
|
return BuildTargetGroup.Android;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public BuildTarget buildTarget
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
switch (mPlatform)
|
|||
|
|
{
|
|||
|
|
case ChlPlatform.android:
|
|||
|
|
return BuildTarget.Android;
|
|||
|
|
case ChlPlatform.ios:
|
|||
|
|
#if UNITY_5 || UNITY_5_3_OR_NEWER
|
|||
|
|
return BuildTarget.iOS;
|
|||
|
|
#else
|
|||
|
|
return BuildTarget.iPhone;
|
|||
|
|
#endif
|
|||
|
|
case ChlPlatform.standaloneWIN:
|
|||
|
|
return BuildTarget.StandaloneWindows64;
|
|||
|
|
case ChlPlatform.StandaloneOSX:
|
|||
|
|
return BuildTarget.StandaloneOSX;
|
|||
|
|
case ChlPlatform.webgl:
|
|||
|
|
return BuildTarget.WebGL;
|
|||
|
|
}
|
|||
|
|
return BuildTarget.StandaloneWindows64;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// public BuildTarget
|
|||
|
|
|
|||
|
|
Hashtable _DefaultIcon;
|
|||
|
|
//Texture2D
|
|||
|
|
Texture2D _SplashImage;
|
|||
|
|
|
|||
|
|
public Hashtable mDefaultIcon
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (_DefaultIcon == null && mDefaultIconPath != null)
|
|||
|
|
{
|
|||
|
|
_DefaultIcon = new Hashtable();
|
|||
|
|
foreach (DictionaryEntry cell in mDefaultIconPath)
|
|||
|
|
{
|
|||
|
|
string iconPath = cell.Value.ToString();
|
|||
|
|
_DefaultIcon[cell.Key] = (Texture2D)(AssetDatabase.LoadAssetAtPath("Assets/" + iconPath, typeof(Texture2D)));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (_DefaultIcon == null)
|
|||
|
|
{
|
|||
|
|
_DefaultIcon = new Hashtable();
|
|||
|
|
}
|
|||
|
|
return _DefaultIcon;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Texture2D mSplashImage
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (_SplashImage == null && !string.IsNullOrEmpty(mSplashImagePath))
|
|||
|
|
{
|
|||
|
|
_SplashImage = (Texture2D)(AssetDatabase.LoadAssetAtPath("Assets/" + mSplashImagePath, typeof(Texture2D)));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return _SplashImage;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_SplashImage = value;
|
|||
|
|
if (value == null)
|
|||
|
|
{
|
|||
|
|
mSplashImagePath = "";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Hashtable mDefaultIconPath = new Hashtable();
|
|||
|
|
public string mSplashImagePath;
|
|||
|
|
public string mBundleIndentifier = "";
|
|||
|
|
public string mBundleVersion = "";
|
|||
|
|
public int mBundleVersionCode;
|
|||
|
|
public bool mCreateEclipseProject = false;
|
|||
|
|
public bool isBuildWithLogView = false;
|
|||
|
|
public string mBuildLocation = "iosBuild";
|
|||
|
|
|
|||
|
|
public string mScriptingDefineSymbols
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return "CHL_" + mChlName.ToUpper();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public string mOtherScriptingDefineSymbols = "";
|
|||
|
|
|
|||
|
|
public string mSubChannel = "";
|
|||
|
|
public string mCtccChannel = "";
|
|||
|
|
public bool isThirdExit = false;
|
|||
|
|
public bool isMoreGame = false;
|
|||
|
|
public bool isSwitchAccount = false;
|
|||
|
|
public string mAlertDesc = "";
|
|||
|
|
public ArrayList mCopyDirPaths = new ArrayList();
|
|||
|
|
public bool mLicenseVerification;
|
|||
|
|
public string mKeystoreNamePath = "";
|
|||
|
|
UnityEngine.Object _KeystoreName;
|
|||
|
|
|
|||
|
|
public UnityEngine.Object mKeystoreName
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
if (_KeystoreName == null)
|
|||
|
|
{
|
|||
|
|
if (!string.IsNullOrEmpty(mKeystoreNamePath))
|
|||
|
|
{
|
|||
|
|
_KeystoreName = AssetDatabase.LoadAssetAtPath(
|
|||
|
|
mKeystoreNamePath,
|
|||
|
|
typeof(UnityEngine.Object));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return _KeystoreName;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_KeystoreName = value;
|
|||
|
|
if (value == null)
|
|||
|
|
{
|
|||
|
|
mKeystoreNamePath = "";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mKeystoreNamePath = AssetDatabase.GetAssetPath(_KeystoreName.GetInstanceID());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public string mKeystorePass;
|
|||
|
|
public string mKeyaliasName;
|
|||
|
|
public string mKeyaliasPass;
|
|||
|
|
public string md5SignCode = "";
|
|||
|
|
|
|||
|
|
public string serverKey = "";
|
|||
|
|
public int serverIndex = 0;
|
|||
|
|
|
|||
|
|
public Hashtable toMap()
|
|||
|
|
{
|
|||
|
|
Hashtable r = new Hashtable();
|
|||
|
|
r["mChlNmae"] = mChlName;
|
|||
|
|
r["mProductName"] = mProductName;
|
|||
|
|
r["mPlatform"] = mPlatform.ToString();
|
|||
|
|
r["isUseUnityIAP"] = isUseUnityIAP;
|
|||
|
|
#if USE_UNITYIAP
|
|||
|
|
r ["mTargetAndroidStore"] = (int)mTargetAndroidStore; //UnityEngine.Purchasing.AndroidStore
|
|||
|
|
#endif
|
|||
|
|
r["mDefaultIconPath"] = mDefaultIconPath;
|
|||
|
|
r["mSplashImagePath"] = mSplashImagePath;
|
|||
|
|
r["mBundleIndentifier"] = mBundleIndentifier;
|
|||
|
|
r["mBundleVersion"] = mBundleVersion;
|
|||
|
|
r["mBundleVersionCode"] = mBundleVersionCode;
|
|||
|
|
r["mCreateEclipseProject"] = mCreateEclipseProject;
|
|||
|
|
r["mBuildLocation"] = mBuildLocation;
|
|||
|
|
r["mOtherScriptingDefineSymbols"] = mOtherScriptingDefineSymbols;
|
|||
|
|
r["mAlertDesc"] = mAlertDesc;
|
|||
|
|
r["mCopyDirPaths"] = mCopyDirPaths;
|
|||
|
|
// r ["mSpecialCopyDir"] = mSpecialCopyDirPath;
|
|||
|
|
// r ["mUnZip"] = mUnZip;
|
|||
|
|
r["mSubChannel"] = mSubChannel;
|
|||
|
|
r["mCtccChannel"] = mCtccChannel;
|
|||
|
|
|
|||
|
|
r["mLicenseVerification"] = mLicenseVerification;
|
|||
|
|
r["mKeystoreNamePath"] = mKeystoreNamePath;
|
|||
|
|
r["mKeystorePass"] = mKeystorePass;
|
|||
|
|
r["mKeyaliasName"] = mKeyaliasName;
|
|||
|
|
r["mKeyaliasPass"] = mKeyaliasPass;
|
|||
|
|
|
|||
|
|
r["isThirdExit"] = isThirdExit;
|
|||
|
|
r["isMoreGame"] = isMoreGame;
|
|||
|
|
r["isSwitchAccount"] = isSwitchAccount;
|
|||
|
|
r["isBuildWithLogView"] = isBuildWithLogView;
|
|||
|
|
r["md5SignCode"] = md5SignCode;
|
|||
|
|
r["serverKey"] = serverKey;
|
|||
|
|
return r;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void refreshData()
|
|||
|
|
{
|
|||
|
|
if (_DefaultIcon != null)
|
|||
|
|
{
|
|||
|
|
foreach (DictionaryEntry cell in _DefaultIcon)
|
|||
|
|
{
|
|||
|
|
Texture2D icon = cell.Value == null ? null : (Texture2D)(cell.Value);
|
|||
|
|
if (icon == null)
|
|||
|
|
continue;
|
|||
|
|
string tmpPath = AssetDatabase.GetAssetPath(icon.GetInstanceID());
|
|||
|
|
int startPos = 0;
|
|||
|
|
startPos = tmpPath.IndexOf("Assets/");
|
|||
|
|
startPos += 7;
|
|||
|
|
tmpPath = tmpPath.Substring(startPos, tmpPath.Length - startPos);
|
|||
|
|
if (mDefaultIconPath == null)
|
|||
|
|
{
|
|||
|
|
mDefaultIconPath = new Hashtable();
|
|||
|
|
}
|
|||
|
|
mDefaultIconPath[cell.Key] = tmpPath;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (_SplashImage != null)
|
|||
|
|
{
|
|||
|
|
string tmpPath = AssetDatabase.GetAssetPath(_SplashImage.GetInstanceID());
|
|||
|
|
int startPos = 0;
|
|||
|
|
startPos = tmpPath.IndexOf("Assets/");
|
|||
|
|
startPos += 7;
|
|||
|
|
tmpPath = tmpPath.Substring(startPos, tmpPath.Length - startPos);
|
|||
|
|
mSplashImagePath = tmpPath;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static ChlData parse(Hashtable map)
|
|||
|
|
{
|
|||
|
|
if (map == null)
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
ChlData r = new ChlData();
|
|||
|
|
r.mChlName = MapEx.getString(map, "mChlNmae");
|
|||
|
|
r.mProductName = MapEx.getString(map, "mProductName");
|
|||
|
|
r.mDefaultIconPath = MapEx.getMap(map, "mDefaultIconPath");
|
|||
|
|
r.mSplashImagePath = MapEx.getString(map, "mSplashImagePath");
|
|||
|
|
r.mBundleIndentifier = MapEx.getString(map, "mBundleIndentifier");
|
|||
|
|
r.mBundleVersion = MapEx.getString(map, "mBundleVersion");
|
|||
|
|
r.mBundleVersionCode = MapEx.getInt(map, "mBundleVersionCode");
|
|||
|
|
string platform = MapEx.getString(map, "mPlatform");
|
|||
|
|
switch (platform)
|
|||
|
|
{
|
|||
|
|
case "android":
|
|||
|
|
r.mPlatform = ChlPlatform.android;
|
|||
|
|
break;
|
|||
|
|
case "ios":
|
|||
|
|
r.mPlatform = ChlPlatform.ios;
|
|||
|
|
break;
|
|||
|
|
case "standaloneWIN":
|
|||
|
|
r.mPlatform = ChlPlatform.standaloneWIN;
|
|||
|
|
break;
|
|||
|
|
case "StandaloneOSX":
|
|||
|
|
r.mPlatform = ChlPlatform.StandaloneOSX;
|
|||
|
|
break;
|
|||
|
|
case "webgl":
|
|||
|
|
r.mPlatform = ChlPlatform.webgl;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
r.isUseUnityIAP = MapEx.getBool(map, "isUseUnityIAP");
|
|||
|
|
#if USE_UNITYIAP
|
|||
|
|
r.mTargetAndroidStore = (UnityEngine.Purchasing.AndroidStore)(Enum.ToObject (typeof(UnityEngine.Purchasing.AndroidStore), MapEx.getInt (map, "mTargetAndroidStore")));
|
|||
|
|
#endif
|
|||
|
|
r.mCreateEclipseProject = MapEx.getBool(map, "mCreateEclipseProject");
|
|||
|
|
r.mBuildLocation = MapEx.getString(map, "mBuildLocation");
|
|||
|
|
r.mOtherScriptingDefineSymbols = MapEx.getString(map, "mOtherScriptingDefineSymbols");
|
|||
|
|
r.mAlertDesc = MapEx.getString(map, "mAlertDesc");
|
|||
|
|
r.mAlertDesc = r.mAlertDesc == null ? "" : r.mAlertDesc;
|
|||
|
|
r.mCopyDirPaths = MapEx.getList(map, "mCopyDirPaths");
|
|||
|
|
// r.mSpecialCopyDirPath = MapEx.getString (map, "mSpecialCopyDir");
|
|||
|
|
// r.mUnZip = MapEx.getBool (map, "mUnZip");
|
|||
|
|
r.mLicenseVerification = MapEx.getBool(map, "mLicenseVerification");
|
|||
|
|
r.mKeystoreNamePath = MapEx.getString(map, "mKeystoreNamePath");
|
|||
|
|
r.mKeystorePass = MapEx.getString(map, "mKeystorePass");
|
|||
|
|
r.mKeyaliasName = MapEx.getString(map, "mKeyaliasName");
|
|||
|
|
r.mKeyaliasPass = MapEx.getString(map, "mKeyaliasPass");
|
|||
|
|
r.mSubChannel = MapEx.getString(map, "mSubChannel");
|
|||
|
|
r.mCtccChannel = MapEx.getString(map, "mCtccChannel");
|
|||
|
|
r.isThirdExit = MapEx.getBool(map, "isThirdExit");
|
|||
|
|
r.isMoreGame = MapEx.getBool(map, "isMoreGame");
|
|||
|
|
r.isSwitchAccount = MapEx.getBool(map, "isSwitchAccount");
|
|||
|
|
r.isBuildWithLogView = MapEx.getBool(map, "isBuildWithLogView");
|
|||
|
|
r.md5SignCode = MapEx.getString(map, "md5SignCode");
|
|||
|
|
r.serverKey = MapEx.getString(map, "serverKey");
|
|||
|
|
r.serverIndex = getServerIndex(r.serverKey);
|
|||
|
|
return r;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static int getServerIndex(string serverKey)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < ECLProjectManager.data.hotUpgradeServers.Count; i++)
|
|||
|
|
{
|
|||
|
|
HotUpgradeServerInfor dd = ECLProjectManager.data.hotUpgradeServers[i] as HotUpgradeServerInfor;
|
|||
|
|
if (dd.key.Equals(serverKey))
|
|||
|
|
{
|
|||
|
|
return i;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
}
|