示例#1
0
            public long AddNode(ArcNode node)
            {
                long ptr = nodes.Count;

                nodes.Add(node);
                return(ptr);
            }
示例#2
0
        private static void DumpArcNode(Stream arcstr, ArcHeader head, ArcNode node, string destroot, string nameoverride = null)
        {
            string nodeName = nameoverride;

            arcstr.Seek(node.filenameOffset + head.stringOffset + 0x20, SeekOrigin.Begin);
            if (nodeName == null)
            {
                nodeName = Data.ReadString(arcstr);
            }

            destroot += "\\" + nodeName;
            Directory.CreateDirectory(destroot);

            for (int i = 0; i < node.entryCount; ++i)
            {
                ArcFileEntry curr = new ArcFileEntry(arcstr, head, (int)(node.entryOffset + i));

                if (curr.id == 0xFFFF)                                                                 //subdirectory
                {
                    if (curr.filenameOffset != 0 && curr.filenameOffset != 2)                          //don't go to "." and ".."
                    {
                        ArcNode dirNode = new ArcNode(arcstr, (int)curr.dataOffset);                   //Some arc packing programs have a glitch
                        arcstr.Seek(curr.filenameOffset + head.stringOffset + 0x20, SeekOrigin.Begin); //People use them so just work around it
                        DumpArcNode(arcstr, head, dirNode, destroot, Data.ReadString(arcstr));
                    }
                }
                else //file
                {
                    arcstr.Seek(curr.filenameOffset + head.stringOffset + 0x20, SeekOrigin.Begin);
                    string currName = Data.ReadString(arcstr);

                    FileStream dest = new FileStream(destroot + "\\" + currName, FileMode.Create);

                    int    read = 0;
                    byte[] buff = new byte[1024];
                    arcstr.Seek(curr.dataOffset + head.dataStart + 0x20, SeekOrigin.Begin);
                    while (read < curr.dataSize)
                    {
                        int r = arcstr.Read(buff, 0, (int)Math.Min(1024, curr.dataSize - read));
                        dest.Write(buff, 0, r);
                        read += r;
                    }
                    dest.Close();
                }
            }
        }
示例#3
0
        public static void ExtractArc(string arc, string dest)
        {
            FileStream arcstr = new FileStream(arc, FileMode.Open, FileAccess.Read);

            byte[] magic = Data.Read(arcstr, 4);

            if (Data.CompareBytes(magic, RARC) != 0)
            {
                Console.WriteLine(arc + " is not a valid arc file.");
                return;
            }

            ArcHeader head = new ArcHeader(arcstr);
            ArcNode   root = new ArcNode(arcstr, 0);

            DumpArcNode(arcstr, head, root, dest);
            arcstr.Close();
        }
示例#4
0
        public void ArcNode()
        {
            var tc = new TestCore();

            tc.Init();

            var arc1 = new ArcNode()
            {
                Color    = new Color(255, 0, 0),
                Position = new Vector2F(100, 100),
                Radius   = 50f,
                VertNum  = 30,
            };
            var arc2 = new ArcNode()
            {
                Color    = new Color(0, 255, 0),
                Position = new Vector2F(400, 200),
                Radius   = 30f,
                VertNum  = 8,
            };
            var arc3 = new ArcNode()
            {
                Color    = new Color(0, 0, 255),
                Position = new Vector2F(50, 400),
                Radius   = 40f,
                VertNum  = 5,
            };

            Engine.AddNode(arc1);
            Engine.AddNode(arc2);
            Engine.AddNode(arc3);

            tc.LoopBody(x =>
            {
                arc1.StartDegree++;
                arc2.StartDegree++;
                arc3.StartDegree++;
                arc1.EndDegree--;
                arc2.EndDegree--;
                arc3.EndDegree--;
            }, null);

            tc.End();
        }
示例#5
0
        static void Main(string[] args)
        {
            // Altseed2 を初期化します。
            Engine.Initialize("ShapeNode", 640, 480);

            // 円を描画するノード
            var circle = new CircleNode()
            {
                Color    = new Color(255, 100, 100),
                Radius   = 30f,
                Position = new Vector2F(100f, 300f),
                VertNum  = 30
            };

            // 円弧を描画するノード
            var arc = new ArcNode()
            {
                Color       = new Color(100, 255, 100),
                Radius      = 25f,
                Position    = new Vector2F(300f, 100f),
                StartDegree = 30f,
                EndDegree   = 150f,
                VertNum     = 30
            };

            // 直線を描画するノード
            var line = new LineNode()
            {
                Color     = new Color(100, 100, 255),
                Point1    = new Vector2F(200f, 150f),
                Point2    = new Vector2F(400f, 350f),
                Thickness = 5f
            };

            // 短形を描画するノード
            var rectangle = new RectangleNode()
            {
                Color         = new Color(255, 255, 100),
                Position      = new Vector2F(300f, 400f),
                RectangleSize = new Vector2F(50f, 50f)
            };

            // 三角形を描画するノード
            var triangle = new TriangleNode()
            {
                Color  = new Color(255, 100, 255),
                Point1 = new Vector2F(50f, 50f),
                Point2 = new Vector2F(100f, 50f),
                Point3 = new Vector2F(50f, 100f),
            };

            // エンジンにノードを追加します。
            Engine.AddNode(circle);
            Engine.AddNode(arc);
            Engine.AddNode(line);
            Engine.AddNode(rectangle);
            Engine.AddNode(triangle);

            // メインループ。
            // Altseed のウインドウが閉じられると終了します。
            while (Engine.DoEvents())
            {
                // Altseed を更新します。
                Engine.Update();
            }

            // Altseed の終了処理をします。
            Engine.Terminate();
        }
示例#6
0
 public CircleEvent(ArcNode disappearingArc, double lowestCircleY)
     : base(lowestCircleY)
 {
     DisappearingArc = disappearingArc;
 }
示例#7
0
 public void Apply(ArcNode arcNode)
 {
 }
示例#8
0
        private static ArcInfo BuildArcInfo(string dir, string arcdir, long parent, Dictionary <string, ushort> dirStrings, ArcInfo ai)
        {
            DirectoryInfo di = new DirectoryInfo(dir);

            string curdir;

            if (arcdir != "")
            {
                curdir = arcdir + "/" + di.Name;
            }
            else
            {
                curdir = di.Name;
            }

            ArcNode dirNode = new ArcNode();

            if (!dirStrings.ContainsKey(dir))
            {
                dirNode.filenameOffset = (uint)ai.AddString(di.Name);
            }
            else
            {
                dirNode.filenameOffset = dirStrings[dir];
            }
            dirNode.unknown     = GCN.CreateHash(di.Name);
            dirNode.entryOffset = (uint)(ai.files.Count);
            dirNode.entryCount  = 0;
            dirNode.WritePath   = curdir;
            if (ai.nodes.Count == 0)
            {
                dirNode.type = BitConverter.ToUInt32(new byte[4] {
                    (byte)'T', (byte)'O', (byte)'O', (byte)'R'
                }, 0);
            }
            else
            {
                byte[] type = new byte[4];
                for (int i = 0; i < 4; i++)
                {
                    if (i < di.Name.Length)
                    {
                        type[3 - i] = (byte)(di.Name.ToUpper())[i];
                    }
                    else
                    {
                        type[3 - i] = 0x20;
                    }
                }
                dirNode.type = BitConverter.ToUInt32(type, 0);
            }

            long coffset = ai.AddNode(dirNode);

            string[] files = Directory.EnumerateFiles(dir, "*", SearchOption.TopDirectoryOnly).ToArray();
            foreach (string file in files)
            {
                FileInfo     fi     = new FileInfo(file);
                ArcFileEntry fentry = new ArcFileEntry();
                fentry.id = 0;
                if (dirStrings.ContainsKey(file))
                {
                    fentry.filenameOffset = dirStrings[file];
                }
                else
                {
                    fentry.filenameOffset = (ushort)ai.AddString(fi.Name);
                }
                fentry.dataOffset = (uint)ai.CountData(file, out fentry.dataSize);
                fentry.WritePath  = curdir + "/" + fi.Name;
                fentry.unknown    = GCN.CreateHash(fi.Name);
                fentry.unknown2   = 0x1100;
                ai.AddFile(fentry);
                dirNode.entryCount++;
            }

            long fileoff = coffset;

            string[] dirs = Directory.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly).ToArray();

            foreach (string idir in dirs)
            {
                DirectoryInfo idi    = new DirectoryInfo(idir);
                ArcFileEntry  dentry = new ArcFileEntry();
                dentry.id             = 0xFFFF;
                dentry.filenameOffset = (ushort)ai.AddString(idi.Name);
                dirStrings.Add(idir, dentry.filenameOffset);
                dentry.dataOffset = (uint)(++fileoff);
                fileoff          += Directory.EnumerateDirectories(idir, "*", SearchOption.AllDirectories).Count();
                dentry.dataSize   = 16;
                dentry.WritePath  = curdir;
                dentry.unknown    = GCN.CreateHash(idi.Name);
                dentry.unknown2   = 0x0200;
                ai.AddFile(dentry);
                dirNode.entryCount++;
            }

            ArcFileEntry cEntry = new ArcFileEntry();

            cEntry.id             = 0xFFFF;
            cEntry.filenameOffset = 0;
            cEntry.WritePath      = curdir;
            cEntry.dataOffset     = (uint)coffset;
            cEntry.dataSize       = 16;
            cEntry.unknown        = 0x2E;
            cEntry.unknown2       = 0x0200;
            ai.AddFile(cEntry);
            ArcFileEntry pEntry = new ArcFileEntry();

            pEntry.filenameOffset = 2;
            pEntry.id             = 0xFFFF;
            pEntry.WritePath      = arcdir;
            pEntry.dataOffset     = (uint)parent;
            pEntry.dataSize       = 16;
            pEntry.unknown        = 0xB8;
            pEntry.unknown2       = 0x0200;
            ai.AddFile(pEntry);
            dirNode.entryCount += 2;

            ai.nodes[ai.nodes.Count - 1] = dirNode;

            foreach (string idir in dirs)
            {
                ai = BuildArcInfo(idir, curdir, coffset, dirStrings, ai);
            }
            return(ai);
        }
示例#9
0
 public void Apply(ArcNode arcNode)
 {
     _canvas2DContext.ArcAsync(arcNode.Position.X, arcNode.Position.Y, arcNode.Radius, arcNode.StartAngle,
                               arcNode.EndAngle, arcNode.IsCounterClockwise);
 }