public void GetPointWithOffset(string center, double radius, double offset, double degrees, string expected)
        {
            var arc    = new ArcInfo(center.AsPoint(), radius, Angle.DefaultStart, Angle.DefaultEnd);
            var actual = arc.GetPointAtRadiusOffset(Angle.FromDegrees(degrees), offset);

            Assert.AreEqual(expected, actual.ToString("F0"));
        }
Exemple #2
0
        public void InterpolateArc(double value, string arcString, bool isDirectionReversed, string expected)
        {
            var interpolation = new Interpolation(value);
            var arc           = ArcInfo.Parse(arcString);

            Assert.AreEqual(expected, interpolation.Interpolate(arc, isDirectionReversed).ToString("F0"));
        }
        public void GetTangent(double degrees, string expected)
        {
            var angle = Angle.FromDegrees(degrees);
            var arc   = new ArcInfo(default(Point), 1, angle, Angle.Zero);

            Assert.AreEqual(expected, arc.GetTangent(angle).ToString("F0"));
        }
        public void FitZeroPadding(string ss, double start, double end, string expectedCentre, double expectedRadius)
        {
            var availableSize = ss.AsSize();
            var arc           = ArcInfo.Fit(availableSize, default(Thickness), Angle.FromDegrees(start), Angle.FromDegrees(end));

            Assert.AreEqual(expectedCentre, arc.Center.ToString("F0"));
            Assert.AreEqual(expectedRadius, arc.Radius, 1e-6);
        }
            public void CreateArcPathFigureTests(double start, double end, string expected)
            {
                var arcInfo = new ArcInfo(new Point(100, 100), 80, Angle.FromDegrees(start), Angle.FromDegrees(end));
                var result  = AngularTick.CreateArcPathFigure(arcInfo, Angle.FromDegrees(start), Angle.FromDegrees(end), 10, 0);
                var path    = result.ToString(CultureInfo.InvariantCulture).Replace(";", " ");

                Assert.AreEqual(expected, path);
            }
Exemple #6
0
        private void ToggleAbility(bool isActive)
        {
            ArcInfo rearArc = HostShip.ArcInfo.GetAllArcs()[1];

            rearArc.ShotPermissions.CanShootCannon    = isActive;
            rearArc.ShotPermissions.CanShootTorpedoes = isActive;
            rearArc.ShotPermissions.CanShootMissiles  = isActive;
        }
        public void GetRectAtOffsetSize0(double centerX, double centerY, double radius, double angle, double offset)
        {
            var arc      = new ArcInfo(new Point(centerX, centerY), radius, Angle.FromDegrees(0), Angle.FromDegrees(360));
            var textSize = new Size(0, 0);
            var pointFromRectAtOffset = arc.GetUpperLeftPointAtOffset(textSize, Angle.FromDegrees(angle), offset);
            var pointFromAtRadius     = arc.GetPointAtRadius(Angle.FromDegrees(angle), arc.Radius + offset);

            Assert.AreEqual(pointFromAtRadius.X, pointFromRectAtOffset.X);
            Assert.AreEqual(pointFromAtRadius.Y, pointFromRectAtOffset.Y);
        }
        public void GetRectAtOffsetAt90Degrees()
        {
            var arc            = new ArcInfo(new Point(100, 100), 100, Angle.FromDegrees(0), Angle.FromDegrees(360));
            var positionAtZero = arc.GetPointAtRadius(Angle.FromDegrees(90), arc.Radius);
            var textSize       = new Size(10, 10);
            var newPos         = arc.GetUpperLeftPointAtOffset(textSize, Angle.FromDegrees(90), 0);

            Console.WriteLine(newPos);
            Console.WriteLine(positionAtZero + new Vector(-10, -5));
        }
Exemple #9
0
        private static void WriteArc(Stream arcstr, string dir, ArcInfo ai)
        {
            arcstr.Write(RARC, 0, 4);
            ai.head.Write(arcstr);
            foreach (ArcNode an in ai.nodes)
            {
                an.Write(arcstr);
            }

            Data.WritePadding(arcstr, (int)(ai.FileStart() - arcstr.Length));
            foreach (ArcFileEntry afe in ai.files)
            {
                afe.Write(arcstr);
            }

            Data.WritePadding(arcstr, (int)(ai.StringStart() - arcstr.Length));
            foreach (string str in ai.strings)
            {
                Data.WriteString(arcstr, str);
            }

            dir += "/../";

            foreach (ArcFileEntry afe in ai.files)
            {
                if (afe.id == 0xFFFF)
                {
                    continue;
                }

                if (arcstr.Position % 32 != 0)
                {
                    Data.WritePadding(arcstr, (int)(32 - arcstr.Position % 32));
                }

                FileStream fs = new FileStream(dir + "/" + afe.WritePath, FileMode.Open, FileAccess.Read);

                int    read = 0;
                byte[] buff = new byte[1024];
                while (read < afe.dataSize)
                {
                    int r = fs.Read(buff, 0, (int)Math.Min(1024, afe.dataSize - read));
                    arcstr.Write(buff, 0, r);
                    read += r;
                }
                fs.Close();
            }
            arcstr.Close();
        }
Exemple #10
0
        public static void CreateArc(string dir, string dest)
        {
            ArcHeader head = new ArcHeader();

            //Build dir info
            ArcInfo ai = new ArcInfo(head);

            ai.strings.Add(".");
            ai.strings.Add("..");
            ai = BuildArcInfo(dir, "", 0xFFFF, new Dictionary <string, ushort>(), ai);
            ai.AlignHead();

            FileStream arcstr = new FileStream(dest, FileMode.Create);

            WriteArc(arcstr, dir, ai);
        }
Exemple #11
0
    // Use this for initialization
    void Start()
    {
        menu_rect.x      = 100f;
        menu_rect.y      = 300f;
        menu_rect.width  = 300f;
        menu_rect.height = 180f;

        lineDrawer         = new LineInfo();
        arcDrawer          = new ArcInfo();
        lineOriginalDrawer = new LineInfo();
        try
        {
            lineRef = GameObject.Find("GameObject").transform;
        }
        catch
        {
            Debug.LogError("请手动添加一个空物体GameObject.");
            return;
        }
        lineRef.name             = "Line Reference";
        lineRef.parent           = GameObject.Find("main axle_4").transform;
        lineRef.localPosition    = new Vector3(0, -0.731137f, 0.0003082752f);
        lineRef.localEulerAngles = new Vector3(90, 270, 0);
        lineRef.parent           = GameObject.Find("workbench_1").transform;
        try
        {
            lineMaterial = (Material)Resources.Load("Materials/LineMaterial");
        }
        catch
        {
            Debug.LogError(Application.dataPath + "/Materials/中不存在LineMaterial, 请添加相应的Material.");
            return;
        }
//		lineDrawer.Add(0, new Vector3(-0.8f, -0.5f, -0.51f), new Vector3(0, -0.5f, -0.51f), Color.red);
//		lineDrawer.Add(0, new Vector3(-0.8f, -0.5f, -0.51f), new Vector3(-0.8f, 0, -0.51f), Color.green);
//		lineDrawer.Add(0, new Vector3(-0.8f, -0.5f, -0.51f), new Vector3(-0.8f, -0.5f, 0), Color.blue);

        Main = GameObject.Find("MainScript").GetComponent <ControlPanel>();
    }
Exemple #12
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);
        }
 protected virtual void OnArcExit(ArcInfo arc_info)
 {
 }
 protected virtual void OnArcStay(ArcInfo arc_info)
 {
 }
        public void EndPoint(string center, double radius, double end, string expected)
        {
            var arc = new ArcInfo(center.AsPoint(), radius, Angle.Zero, Angle.FromDegrees(end));

            Assert.AreEqual(expected, arc.EndPoint.ToString("F0"));
        }
        public void StartPoint(string center, double radius, double start, string expected)
        {
            var arc = new ArcInfo(center.AsPoint(), radius, Angle.FromDegrees(start), Angle.Zero);

            Assert.AreEqual(expected, arc.StartPoint.ToString("F0"));
        }
 protected virtual void OnArcEnter(ArcInfo arc_info)
 {
 }
        public void QuadrantPoints(string center, double radius, double start, double end, string expected)
        {
            var arc = new ArcInfo(center.AsPoint(), radius, Angle.FromDegrees(start), Angle.FromDegrees(end));

            Assert.AreEqual(expected, string.Join(" ", arc.QuadrantPoints.Select(p => p.ToString("F0"))));
        }