예제 #1
0
        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);
            }
        }
예제 #2
0
 // 阻挡相关
 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);
             }
         }
     }
 }
예제 #3
0
        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() });
        }
예제 #4
0
파일: CharManager.cs 프로젝트: R-N/Fort2
 public void Awake()
 {
     singleton = this;
 }
예제 #5
0
 private void OnDestroy()
 {
     Instance = null;
 }
예제 #6
0
 private void Awake()
 {
     Instance = this;
 }
예제 #7
0
        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;
            }
        }
예제 #8
0
        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;
        }