public void hitNimotu(int direction) { /* まずは必要なオブジェクトを取得します */ var player = objectManager.getPlayerObject(); var nextObj = objectManager.getNextObject(direction); var morenextObject = objectManager.getMoreNectObject(direction); //荷物の移動先が荷物だったら動かせないので処理はしません if (morenextObject.objectType == GameObject.ObjectType.NIMOTU) { return; } //荷物の移動先が荷物の乗ったゴールだったら動かせないので処理はしません if (morenextObject.objectType == GameObject.ObjectType.NIMOTUONGOAL) { return; } /* * 荷物の移動先がゴールだったら *・ゴールに荷物を乗せて *・もともと荷物の場所にプレイヤーが移動して *・プレイヤーのいた場所を床にします。 */ if (morenextObject.objectType == GameObject.ObjectType.GOAL) { morenextObject.changeType(CharManager.getNimotuOnGoalChar(), GameObject.ObjectType.NIMOTUONGOAL); nextObj.changeType(CharManager.getPlayerChar(), GameObject.ObjectType.PLAYER); player.changeType(CharManager.getFloorChar(), GameObject.ObjectType.FLOOR); return; } //最終的に荷物の移動先が壁でなければ if (morenextObject.objectType != GameObject.ObjectType.WALL) { /* *・荷物の移動先に荷物を移動して *・荷物の場所にプレイヤーが移動して *・プレイヤーの場所が床になります */ morenextObject.changeType(CharManager.getNimotuChar(), GameObject.ObjectType.NIMOTU); nextObj.changeType(CharManager.getPlayerChar(), GameObject.ObjectType.PLAYER); player.changeType(CharManager.getFloorChar(), GameObject.ObjectType.FLOOR); } }
// 阻挡相关 void OnTriggerEnter(Collider col) { if (col.tag == "Char") { // Debug.Log(originalData.isEnemy); if (col.GetComponent <CharManager>().originalData.isEnemy != originalData.isEnemy) { CharManager other = col.GetComponent <CharManager>(); // 如果被触发者是敌人 if (originalData.isEnemy) { // 敌人如果处于阻挡状态,直接跳过 if (blockStatus == BlockStatus.BLOCKING) { return; } // 如果不是阻挡状态,判断能不能阻挡,干员当前阻挡-敌人最大阻挡大于 0 else if (other.runningData.attributes.maxBlockCnt - runningData.attributes.maxBlockCnt >= 0) { BlockStart(); blockEnemies.Add(col.GetComponent <Transform>().gameObject); //Debug.Log(blockEnemies[0].GetComponent<CharManager>()); // 敌人阻挡数不用变 } } else { // 判断能不能阻挡,干员当前阻挡-敌人最大阻挡大于 0 if (runningData.attributes.maxBlockCnt - other.runningData.attributes.maxBlockCnt >= 0) { //Debug.Log(other.runningData.attributes.supplyBlockCnt); BlockStart(); blockEnemies.Add(col.GetComponent <Transform>().gameObject); } // Debug.Log(blockEnemies.Count); } } } }
public static String[] Convert(Bitmap bmp, ConfigManager cm, CharManager charm) { char[,] table = GetTable(bmp); //画像取得 char[,] toneTable = GetToneTable(bmp, cm); //トーン int h = charm[0].Height; int w = table.GetLength(0); List <char[, ]> lstSplitTable = new List <char[, ]>(); List <char[, ]> lstSplitToneTable = new List <char[, ]>(); for (int top = 0; top < table.GetLength(1); top += h) { lstSplitTable.Add(TrimTable(table, top, 0, h, w, 0)); if (cm.Tone && cm.ToneText.Length > 0) { lstSplitToneTable.Add(TrimTable(toneTable, top, 0, h, w, 0)); } else { lstSplitToneTable.Add(new char[0, 0]); } } char[][,] splitTable = lstSplitTable.ToArray(); StringBuilder sbAA = new StringBuilder(); StringBuilder sbAAType = new StringBuilder(); int prog = 0; int multi = 1; if (cm.IsMulti) { AsciiArtConverter08.Win32.Win32Api.SYSTEM_INFO sysInfo = new AsciiArtConverter08.Win32.Win32Api.SYSTEM_INFO(); AsciiArtConverter08.Win32.Win32Api.GetSystemInfo(ref sysInfo); multi = (int)sysInfo.dwNumberOfProcessors; } for (int i = 0; i < splitTable.Length; i += multi) { if (i + multi >= splitTable.Length) { multi = splitTable.Length - i; } AAConvThread[] at = new AAConvThread[multi]; Thread[] t = new Thread[multi]; for (int j = 0; j < at.Length; j++) { at[j] = new AAConvThread(cm, charm, splitTable[i + j], lstSplitToneTable[i + j]); t[j] = new Thread(at[j].DoThread); t[j].Start(); } while (true) { Application.DoEvents(); Thread.Sleep(100); for (int j = 0; j < at.Length; j++) { if (at[j].AA == "") { goto LOOP; } } break; LOOP: ; } prog += at.Length; for (int j = 0; j < at.Length; j++) { sbAA.Append(at[j].AA + "\r\n"); sbAAType.Append(at[j].AA_Type + "\r\n"); } } //Debug.WriteLine(sb.ToString()); return(new string[] { sbAA.ToString(), sbAAType.ToString() }); }
public void Awake() { singleton = this; }
private void OnDestroy() { Instance = null; }
private void Awake() { Instance = this; }
public void DrawAA(string[] aaall, Size imgsize, ConfigManager cm, CharManager charm) { if (this.InvokeRequired) { this.Invoke(new DrawAADelegate(DrawAA), new object[] { aa, imgsize, cm, charm }); } lock (lockObject) { if (this.pnlImage.BackgroundImage != null) { this.pnlImage.BackgroundImage.Dispose(); } if (this.pnlImageDetail.BackgroundImage != null) { this.pnlImageDetail.BackgroundImage.Dispose(); } Bitmap bmpAA = new Bitmap(imgsize.Width, imgsize.Height, PixelFormat.Format32bppArgb); Bitmap bmpType = new Bitmap(imgsize.Width, imgsize.Height, PixelFormat.Format32bppArgb); string aa = aaall[0]; string type = aaall[1]; char[] cs_aa = aa.Replace("\r\n", "\n").ToCharArray(); char[] cs_type = type.Replace("\r\n", "\n").ToCharArray(); int x = 0; int y = 0; int addY = 0; if (cm.Pitch == 2) { addY = 1; } using (Graphics gType = Graphics.FromImage(bmpType)) { using (Graphics gAA = Graphics.FromImage(bmpAA)) { using (Brush brush = new SolidBrush(cm.TextColor)) { gAA.Clear(cm.CanvasColor); gType.Clear(Color.White); for (int index = 0; index < cs_aa.Length; index++) { char c = cs_aa[index]; char t = '\0'; if (cs_type.Length > index) { t = cs_type[index]; } else { t = '0'; } if (c == '\n') { x = 0; y = y + charm[0].Height; continue; } gAA.DrawString(Convert.ToString(c), cm.Font, brush, x, y + addY); if (t == '0') { gType.DrawString(Convert.ToString(c), cm.Font, Brushes.Blue, x, y + addY); } else { gType.DrawString(Convert.ToString(c), cm.Font, Brushes.Red, x, y + addY); } if (charm[c] == null) { if (!this.charDic.ContainsKey(c)) { this.charDic[c] = new CharData(c, cm.Font, cm.Pitch); } x += this.charDic[c].Width; } else { x += charm[c].Width; } } } } } this.pnlImage.BackgroundImage = bmpAA; this.pnlImageDetail.BackgroundImage = bmpType; if (cm.Font.Name == "MS Pゴシック" && cm.Font.Size == 12.0f && cm.Pitch == 2) { this.isHtmlTarget = true; } else { this.isHtmlTarget = false; } this.aa = aa; this.img = bmpAA; } }
public unsafe static IntPtr getAA(int *buf, int bufW, int bufH, IntPtr cmsPtr /*, IntPtr res*/) //JNAのPointerはint[]では受け取れない.オブジェクト的なやつだからね { //AA変換結果であるresだけはjavaが利用し終わるまでGCしてはならない //String test = "auioe"; ///if (true) return Marshal.StringToCoTaskMemUni(test); ConfigManagerStruct cms = *(ConfigManagerStruct *)(cmsPtr.ToPointer()); ConfigManager cm = new ConfigManager(cms); CharManager charm = new CharManager(cm); //ここまでok Bitmap bmp; unsafe { bmp = new Bitmap(bufW, bufH, bufW * 4, PixelFormat.Format32bppArgb, new IntPtr(buf)); //buf } bmp = (Bitmap)ConvertLine(bmp, cm); char[,] table = GetTable(bmp); //画像取得 char[,] toneTable = GetToneTable(bmp, cm); //トーン int h = charm[0].Height; int w = table.GetLength(0); List <char[, ]> lstSplitTable = new List <char[, ]>(); List <char[, ]> lstSplitToneTable = new List <char[, ]>(); for (int top = 0; top < table.GetLength(1); top += h) { lstSplitTable.Add(TrimTable(table, top, 0, h, w, 0)); if (cm.Tone && cm.ToneText.Length > 0) { lstSplitToneTable.Add(TrimTable(toneTable, top, 0, h, w, 0)); } else { lstSplitToneTable.Add(new char[0, 0]); } } char[][,] splitTable = lstSplitTable.ToArray(); StringBuilder sbAA = new StringBuilder(); StringBuilder sbAAType = new StringBuilder(); int prog = 0; int multi = 1; if (cm.IsMulti) { AsciiArtConverter08.Win32.Win32Api.SYSTEM_INFO sysInfo = new AsciiArtConverter08.Win32.Win32Api.SYSTEM_INFO(); AsciiArtConverter08.Win32.Win32Api.GetSystemInfo(ref sysInfo); multi = (int)sysInfo.dwNumberOfProcessors; } for (int i = 0; i < splitTable.Length; i += multi) { if (i + multi >= splitTable.Length) { multi = splitTable.Length - i; } AAConvThread[] at = new AAConvThread[multi]; for (int j = 0; j < at.Length; j++) { at[j] = new AAConvThread(cm, charm, splitTable[i + j], lstSplitToneTable[i + j]); at[j].DoThread(); } while (true) { Application.DoEvents(); Thread.Sleep(100); for (int j = 0; j < at.Length; j++) { if (at[j].AA == "") { goto LOOP; } } break; LOOP: ; } prog += at.Length; for (int j = 0; j < at.Length; j++) { sbAA.Append(at[j].AA + "\r\n"); sbAAType.Append(at[j].AA_Type + "\r\n"); } } //char[] aa = sbAA.ToString().ToCharArray();//copy? //IntPtr aaPtr = Marshal.AllocCoTaskMem(aa.Length * sizeof(char)); //TODO AllocHGlobalとの違い //Marshal.Copy(aa, 0, aaPtr, aa.Length); //copy //GC.KeepAlive(aaPtr); //Console.WriteLine("4"); return(Marshal.StringToCoTaskMemUni(sbAA.ToString())); //aaPtr; }