/// <summary> /// Отрисовка временных линий и значений. /// </summary> /// <param name="canvas"></param> /// <param name="rectPaint"></param> public void Paint(GCandles.CandleInfo candleData) { var lineVer = new VerLine(); //Рисуем линию разделяющую периоды или разрывы if (LastCandle.NotIsNull()) { if (candleData.Candle.Time.AddMinutes(candleData.TimeFrame) < LastCandle.Candle.Time) { var p1 = new PointF(LastCandle.Body.X, this.Panel.Rect.Y); var p2 = new PointF(LastCandle.Body.X, this.Panel.Rect.Y + this.Panel.Rect.Height); lineVer.ColorLine = Color.FromArgb(100, Color.Gray); lineVer.WidthLine = 1; lineVer.FillText = true; lineVer.Paint(PanelCanvas, null, p1, p2); } } int x = candleData.TailCoord.High.X; if (index == 1) { LastX = x; } if (LastX - x > PERIOD_SPLIT_LINE || index == 1) { var p1 = new Point(x, this.Panel.Rect.Y); var p2 = new Point(x, this.Panel.Rect.Y + this.Panel.Rect.Height); string min = candleData.Candle.Time.Minute.ToString(); string hour = candleData.Candle.Time.Hour.ToString(); string time = candleData.Candle.Time.Day.ToString() + "." + candleData.Candle.Time.Month.ToString() + "/" + (hour.Length < 2 ? '0' + hour : hour) + ":" + (min.Length < 2 ? '0' + min : min); //if (LastX - x > 70) time = candleData.Candle.Time.Day.ToString() + "/" + candleData.Candle.Time.Month.ToString() + " " + time; lineVer.ColorLine = this.ColorMarkLine; lineVer.ColorText = Color.Gray; lineVer.WidthLine = 1; lineVer.FillText = true; lineVer.Paint(PanelCanvas, time, p1, p2); LastX = x; } LastCandle = candleData; if (x < 0) { return; } index++; }
public static BuildAppResult BuildApk( string unityExePath, string nssUnityProj, BuildMode buildMode, bool prepareProject, string sdkRoot, string ndkRoot, string jdkRoot, string versionJsonPath = null, VerLine verLine = VerLine.DB, PackageType packageType = PackageType.Normal, BuildOption buildOption = BuildOption.None, string toolsDir = "../Tools", string outputDir = "Output", int svnRev = -1) { ModifyMacro(nssUnityProj, buildMode, packageType, buildOption); var result = new BuildAppResult(); result.defaultTDir = ModifyDefaultLaunch(nssUnityProj, verLine, buildMode); var unityExe = new Executable(unityExePath); var unityArguments = $"-batchmode -quit -logFile \"{SpaceUtil.GetPathInTemp("log.log", true)}\" -projectPath \"{nssUnityProj}\" -executeMethod \"NssIntegration.BuildProcedure.Entry\" -l \"{SpaceUtil.GetPathInTemp("log2.log", true)}\""; if (prepareProject) { unityArguments += $" PrepareProject {buildMode} {BuildTarget.Android} \"{versionJsonPath}\" {packageType} {buildOption} \"{toolsDir}\""; } unityArguments += $" BuildApk {buildMode} \"{sdkRoot}\" \"{ndkRoot}\" \"{jdkRoot}\" {verLine} {packageType} {buildOption} \"{toolsDir}\" \"{outputDir}\" {svnRev}"; unityExe.Execute(unityArguments); var apks = Directory.GetFiles(outputDir, "*.apk"); if (apks.Length != 1) { throw new NssIntegrationException($"'{outputDir}'中有{apks.Length}个apk文件,不合理!"); } result.appPath = apks[0]; result.appVersion = ClientVersion.New(versionJsonPath).ToString(); return(result); }
public static string GetStandardAppName( BuildTarget buildTarget, BuildMode buildMode, VerLine verLine, string defaultTDir, string version, int svnRev) { var name = $"NSS_{buildMode}_{defaultTDir}_{verLine}_{version}_{svnRev}"; if (buildTarget == BuildTarget.Android) { return($"{name}.apk"); } else if (buildTarget == BuildTarget.iOS) { return($"{name}.ipa"); } else { throw new NotImplementedException(); } }
public static string ModifyDefaultLaunch(string nssUnityProj, VerLine verLine, BuildMode buildMode) { var path = $"{nssUnityProj}/Assets/StreamingAssets/DefaultLaunchConfig.txt"; var defaultLaunchConfig = new DefaultLaunchConfig(path); defaultLaunchConfig["DefaultVerLine"] = verLine.ToString(); defaultLaunchConfig["MiniPackage"] = "false"; if (buildMode == BuildMode.Publish) { defaultLaunchConfig["DefaultTDir"] = "Official"; defaultLaunchConfig["DefaultTVersion"] = "Official"; defaultLaunchConfig["DefaultTVersionLog"] = "false"; defaultLaunchConfig["DefaultTVEnv"] = "Pub"; } else if (buildMode == BuildMode.Debug) { defaultLaunchConfig["DefaultTDir"] = "Test"; defaultLaunchConfig["DefaultTVersion"] = "Test"; defaultLaunchConfig["DefaultTVersionLog"] = "false"; defaultLaunchConfig["DefaultTVEnv"] = "Pre"; } else { throw new Exception(string.Format("BuildMode '{0}' 是不支持的类型!", buildMode)); } if (verLine == VerLine.PlayerGroup) { defaultLaunchConfig["DefaultTDir"] = "Test"; defaultLaunchConfig["DefaultTVersion"] = "Test"; defaultLaunchConfig["DefaultTVersionLog"] = "true"; defaultLaunchConfig["DefaultTVEnv"] = "Pre"; } else if (verLine == VerLine.Experience) { defaultLaunchConfig["DefaultTDir"] = "Test"; defaultLaunchConfig["DefaultTVersion"] = "Official"; defaultLaunchConfig["DefaultTVersionLog"] = "false"; defaultLaunchConfig["DefaultTVEnv"] = "Pub"; } else if (verLine == VerLine.OB) { defaultLaunchConfig["DefaultTDir"] = "Test"; defaultLaunchConfig["DefaultTVersion"] = "Official"; defaultLaunchConfig["DefaultTVersionLog"] = "false"; defaultLaunchConfig["DefaultTVEnv"] = "Pre"; } else if (verLine == VerLine.Predownload) { defaultLaunchConfig["DefaultTDir"] = "Test"; defaultLaunchConfig["DefaultTVersion"] = "TestB"; defaultLaunchConfig["DefaultTVersionLog"] = "true"; defaultLaunchConfig["DefaultTVEnv"] = "Pre"; } else if (verLine == VerLine.DB) { } else { throw new Exception(string.Format("VerLine '{0}' 是不支持的类型!", verLine)); } defaultLaunchConfig.Serialize(path); return(defaultLaunchConfig["DefaultTDir"]); }
/// <summary>Отрисовка перекрестья</summary> /// <param name="coord"></param> public void PaintCrossLines(Point coord, GCandles.CandleInfo candle) { Panel.Clear(); var canvas = Panel.GetGraphics; string time = ""; Data = new DataCross(); if (candle.NotIsNull()) { Data.Candle = candle; Data.Time = Data.Candle.Candle.Time; string d = Data.Time.Day.ToString(); string m = Data.Time.Month.ToString(); string y = Data.Time.Year.ToString(); string min = Data.Time.Minute.ToString(); string hour = Data.Time.Hour.ToString(); time = (d.Length < 2 ? '0' + d : d) + "." + (m.Length < 2 ? '0' + m : m) + "." + y + " " + (hour.Length < 2 ? '0' + hour : hour) + ":" + (min.Length < 2 ? '0' + min : min); } Data.Price = GMath.GetValueFromCoordinate(this.HeightForPrice, Panel.Params.MaxPrice, Panel.Params.MinPrice, coord.Y, Panel.Params.CountFloat); var lineVer = new VerLine(); lineVer.ColorLine = lineVer.ColorText = Color.Black; lineVer.WidthLine = 1; lineVer.FillText = true; lineVer.Paint(canvas, time, new Point(coord.X, 0), new Point(coord.X, Panel.Rect.Height)); Data.Point.X = coord.X; var horLine = new HorLine(); horLine.ColorLine = horLine.ColorText = Color.Black; horLine.FillText = true; horLine.Paint(canvas, Panel.Rect.Rectangle, coord.Y, Data.Price.ToString(), Panel.Params.MaxPrice, Panel.Params.MinPrice); Data.Point.Y = coord.Y; var priceText = new TextDraw(); var TextAppendByCandle = ""; //Данные по свечи в углу if (Data.Candle.NotIsNull()) { priceText.Color = Color.Black; priceText.SetFontSize(8); priceText.Paint(canvas, "T: " + time + "\r\n" + "O: " + Data.Candle.Candle.Open.ToString() + "\r\n" + "H: " + Data.Candle.Candle.High.ToString() + "\r\n" + "L: " + Data.Candle.Candle.Low.ToString() + "\r\n" + "C: " + Data.Candle.Candle.Close.ToString() + "\r\n" + "V: " + Data.Candle.Candle.Volume.ToString() + "\r\n" , 0, 0); TextAppendByCandle = "Vol:" + Data.Candle.Candle.Volume; } //Текщие данные по цене и времени priceText.Color = Color.Black; priceText.SetFontSize(8); priceText.Paint(canvas, Data.Price.ToString() + "\r\n" + time + "\r\n" + TextAppendByCandle , coord.X + 10, coord.Y + 20); }
private static void Build( [NssConceptConfiguration(NssConcept.NssUnityProj)] string nssUnityProj, [NssConceptConfiguration(NssConcept.BuildTarget)] BuildTarget buildTarget, [ParameterConfiguration("是否使用唯一的构建版本号", optionTemplate = "-uniqueVersion")] bool uniqueVersion, [NssConceptConfiguration(NssConcept.ToolsDir, optionTemplate = "-toolsDir")] string toolsDir = null, [NssConceptConfiguration(NssConcept.BuildConfig, optionTemplate = "-buildConfig")] string buildConfigPath = "Config/BuildConfig.json", [NssConceptConfiguration(NssConcept.IFS, optionTemplate = "-ifs")] string ifsPath = null, [NssConceptConfiguration(NssConcept.BuildMode, optionTemplate = "-buildMode")] BuildMode buildMode = BuildMode.Debug, [NssConceptConfiguration(NssConcept.VerLine, optionTemplate = "-verLine")] VerLine verLine = VerLine.DB, [NssConceptConfiguration(NssConcept.PackageType, optionTemplate = "-packageType")] PackageType packageType = PackageType.Normal, [NssConceptConfiguration(NssConcept.BuildOption, optionTemplate = "-buildOption")] BuildOption buildOption = BuildOption.None, [ParameterConfiguration("输出目录", optionTemplate = "-outputDir")] string outputDir = "Output" ) { if (string.IsNullOrEmpty(toolsDir)) { toolsDir = Path.Combine(nssUnityProj, "../Tools"); } outputDir = Path.GetFullPath(outputDir); DirUtil.CreateEmptyDir(outputDir); var buildConfig = new BuildConfig(buildConfigPath); var unityExePath = NssConceptHelper.CheckConceptThrow<string>(NssConcept.UnityExe, buildConfig.Get<string>("UnityExe")); var svnRev = -1; try { svnRev = SvnUtil.GetSvnInfo(nssUnityProj).lastChangedRev; } catch { } string versionJsonPath = null; if (uniqueVersion) { versionJsonPath = BuildProcedure.PrepareUniqueVersionJson(buildTarget, Path.Combine(nssUnityProj, "Version")); } else { versionJsonPath = Path.Combine(nssUnityProj, "Version", ClientVersion.GetVersionFileName(buildTarget)); } BuildAppResult buildAppResult = null; if (buildTarget == BuildTarget.Android) { var sdkRoot = buildConfig.Get<string>("AndroidSDKRoot"); var ndkRoot = buildConfig.Get<string>("AndroidNDKRoot"); var jdkRoot = buildConfig.Get<string>("JDKRoot"); buildAppResult = BuildProcedure.BuildApk(unityExePath, nssUnityProj, buildMode, true, sdkRoot, ndkRoot, jdkRoot, versionJsonPath, verLine, packageType, buildOption, toolsDir, outputDir, svnRev); //buildAppResult = new BuildAppResult() //{ // appPath = "H:\\branches\\H_trunk\\NssUnityProj\\Output\\NSS_Debug_Test_DB_1.14.0.22330_349712.apk", // appVersion = "1.14.0.22330", // defaultTDir = "Test", //}; } else { throw new NotImplementedException(); } if (File.Exists(ifsPath)) { Logger.Log($"使用输入的IFS文件:{ifsPath}..."); ifsPath = IFSUtil.ModifyIFSVersion(ifsPath, buildTarget, buildAppResult.appVersion); } else { throw new NotImplementedException(); } BuildProcedure.AssemblyApk(buildAppResult.appPath, Path.Combine(outputDir, NssHelper.GetStandardAppName(buildTarget, buildMode, verLine, buildAppResult.defaultTDir, buildAppResult.appVersion, svnRev)), ifsPath); }