示例#1
0
 public void Initialize(CompileInfo info)
 {
     foreach (var item in GetMapItems())
     {
         item.Initialize(info);
     }
 }
示例#2
0
 public void PostFeed(CompileInfo info, System.IO.StreamWriter file)
 {
     foreach (var item in GetMapItems())
     {
         item.PostFeed(info, file);
     }
 }
示例#3
0
 public void Declaration(CompileInfo info, System.IO.StreamWriter file)
 {
     foreach (var item in GetMapItems())
     {
         item.Declaration(info, file);
     }
 }
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(Joystick))
            {
                return;
            }

            file.Write(new string(' ', info.IndentLevel * 4));
            file.Write("if ("); file.Write(buttonName); file.Write(".Check("); file.Write(Joystick.Replace("joystick", "state")); file.Write(".Buttons["); file.Write(Button - 1); file.WriteLine("]))");
            file.Write(new string(' ', info.IndentLevel * 4));
            file.WriteLine("{");

            info.IndentLevel++;
            IfTrueMappings.Feed(info, file);
            info.IndentLevel--;
            file.Write(new string(' ', info.IndentLevel * 4));
            file.WriteLine("}");
            file.Write(new string(' ', info.IndentLevel * 4));
            file.WriteLine("else");
            file.Write(new string(' ', info.IndentLevel * 4));
            file.WriteLine("{");

            info.IndentLevel++;
            IfFalseMappings.Feed(info, file);
            info.IndentLevel--;
            file.Write(new string(' ', info.IndentLevel * 4));
            file.WriteLine("}");
        }
示例#5
0
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(Joystick))
            {
                return;
            }

            file.Write(new string(' ', info.IndentLevel * 4));
            file.Write("iReport.Buttons |= ButtonMapper.From(");
            file.Write(Joystick.Replace("joystick", "state"));
            file.Write(".Buttons, ");
            if (From > 1)
            {
                file.Write(From - 1);
                file.Write(", ");
                file.Write(Range);
                file.Write(", ");
                file.Write(MapTo - 1);
            }
            else
            {
                if (MapTo > 1)
                {
                    file.Write(Range);
                    file.Write(", ");
                    file.Write(MapTo - 1);
                }
                else
                {
                    file.Write(Range);
                }
            }
            file.WriteLine(");");
        }
 public void Initialize(CompileInfo info)
 {
     buttonName = null;
     info.RegisterVJoyButton(Button);
     IfFalseMappings.Initialize(info);
     IfTrueMappings.Initialize(info);
 }
示例#7
0
 public void Feed(CompileInfo info, System.IO.StreamWriter file)
 {
     foreach (var joystick in info.Joysticks)
     {
         file.Write("            "); file.Write(joystick.Replace("joystick", "joystickDevice")); file.WriteLine(".Poll();");
         file.Write("            // update the joystick "); file.Write(joystick.Replace("joystick", "state")); file.WriteLine(" field");
         file.Write("            var "); file.Write(joystick.Replace("joystick", "state")); file.Write(" = "); file.Write(joystick.Replace("joystick", "joystickDevice")); file.WriteLine(".GetCurrentState();");
         file.Write("            // joystick "); file.WriteLine(joystick.Replace("joystick", "povs"));
         file.Write("            var "); file.Write(joystick.Replace("joystick", "povs")); file.Write(" = "); file.Write(joystick.Replace("joystick", "state")); file.WriteLine(".PointOfViewControllers;");
         file.WriteLine();
     }
 }
示例#8
0
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(JoystickPOV))
            {
                return;
            }

            file.Write(new string(' ', info.IndentLevel * 4));
            var parts = JoystickPOV.Split('.');

            file.Write("iReport."); file.Write(VJoyPOV); file.Write(" = (uint)"); file.Write(parts[0].Replace("joystick", "povs"));
            file.Write("["); file.Write(Int32.Parse(parts[1].Replace("POV", "")) - 1); file.WriteLine("];");
        }
示例#9
0
        private void ReleaseDevices(CompileInfo info, System.IO.StreamWriter file)
        {
            file.WriteLine("        private void ReleaseDevices()");
            file.WriteLine("        {");

            foreach (var joystick in info.Joysticks)
            {
                var deviceName = joystick.Replace("joystick", "joystickDevice");
                file.Write("            if ("); file.Write(deviceName); file.Write(" != null && !"); file.Write(deviceName); file.WriteLine(".IsDisposed)");
                file.Write("                "); file.Write(deviceName); file.WriteLine(".Dispose();");
            }
            file.WriteLine("        }");
            file.WriteLine();
        }
示例#10
0
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(Joystick))
            {
                return;
            }

            file.Write(new string(' ', info.IndentLevel * 4));
            file.Write("iReport."); file.Write(VJoyAxis);
            file.Write(" = ");
            file.Write(Joystick.Replace("joystick", "state"));
            file.Write(".Sliders[");
            file.Write(Pos - 1);
            file.WriteLine("];");
        }
示例#11
0
        private void ValidateVJoyConfiguration(CompileInfo info, StreamWriter file)
        {
            file.WriteLine("        private bool ValidateVJoyConfiguration()");
            file.WriteLine("        {");
            //foreach (var name in Enum.GetNames(typeof(HID_USAGES)))
            //{
            //    file.Write("lookup[\"Axis");
            //    file.Write(name.Replace("HID_USAGE_", ""));
            //    file.Write("\"] = \"bool Axis");
            //    file.Write(name.Replace("HID_USAGE_", ""));
            //    file.Write(" = joystick.GetVJDAxisExist(id, HID_USAGES.");
            //    file.Write(name);
            //    file.WriteLine(");\";");
            //}

            file.WriteLine("            // Make sure all needed axes and buttons are supported");
            var list = new List <string>();
            var axis = info.GetVJoyAxis();

            foreach (var vJoyAxis in axis)
            {
                file.Write("            ");
                file.WriteLine(lookup[vJoyAxis]);
                list.Add("!" + vJoyAxis);
            }
            list.Add("nButtons < " + info.GetMaxButtons());
            list.Add("cont < " + info.GetMaxPOVs());

            file.WriteLine("            int nButtons = joystick.GetVJDButtonNumber(id);");
            file.WriteLine("            int cont = joystick.GetVJDContPovNumber(id);");

            file.Write("            if (");
            file.Write(String.Join(" || ", list));
            file.WriteLine(")");
            file.WriteLine("            {");
            file.Write("                mainForm.ReportError(\"vJoy Device is not configured correctly. Must have ");
            file.Write(String.Join(", ", axis));
            file.Write(" analog axis, ");
            file.Write(info.GetMaxButtons());
            file.Write(" buttons and ");
            file.Write(info.GetMaxPOVs());
            file.WriteLine(" analog POVs. Cannot continue\\n\");");
            file.WriteLine("                return false;");
            file.WriteLine("            }");
            file.WriteLine("            return true;");
            file.WriteLine("        }");
            file.WriteLine();
        }
示例#12
0
        public void Declaration(CompileInfo info, System.IO.StreamWriter file)
        {
            file.Write("        const int numDevices = ");
            file.Write(info.Joysticks.Count);
            file.WriteLine(";");

            var nameToDevice = new Dictionary <string, DeviceListItem>();

            foreach (var device in Items)
            {
                nameToDevice[device.Item.Key] = device;
            }
            file.WriteLine();

            int index = 0;

            foreach (var joystick in info.Joysticks)
            {
                file.Write("        const int ");
                file.Write(joystick.Replace("joystick", "deadzone"));
                file.Write(" = ");
                file.Write(Convert.ToInt32(nameToDevice[joystick].DeadZone * 327.68f));
                file.WriteLine(";");
            }
            file.WriteLine();

            file.WriteLine("        readonly string[] deviceNames = new string[]{");
            foreach (var joystick in info.Joysticks)
            {
                file.Write("            \"");
                file.Write(nameToDevice[joystick].Text);
                file.WriteLine("\",");
            }
            file.WriteLine("        };");
            file.WriteLine();

            index = 0;
            foreach (var joystick in info.Joysticks)
            {
                file.Write("        Joystick ");
                file.Write(joystick.Replace("joystick", "joystickDevice"));
                file.WriteLine(";");
            }
        }
        public void Declaration(CompileInfo info, System.IO.StreamWriter file)
        {
            buttonName = "buttonToggle" + info.RegisterIndex(this);

            file.Write("        ButtonToggle ");
            file.Write(buttonName);
            file.Write(" = new ButtonToggle()");
            if (String.IsNullOrEmpty(IfFalseSayText) && String.IsNullOrEmpty(IfTrueSayText))
            {
                file.WriteLine(";");
            }
            else
            {
                file.WriteLine();
                file.WriteLine("        {");
                file.WriteLine("            OnStateChanged = (button) =>");
                file.WriteLine("            {");
                file.WriteLine("                if (button.State)");
                if (String.IsNullOrEmpty(IfTrueSayText))
                {
                    file.WriteLine("                    { }");
                }
                else
                {
                    file.Write("                    Say(\"");
                    file.Write(IfTrueSayText);
                    file.WriteLine("\");");
                }
                file.WriteLine("                else");
                if (String.IsNullOrEmpty(IfFalseSayText))
                {
                    file.WriteLine("                    { }");
                }
                else
                {
                    file.Write("                    Say(\"");
                    file.Write(IfFalseSayText);
                    file.WriteLine("\");");
                }
                file.WriteLine("            }");
                file.WriteLine("        };");
            }
        }
示例#14
0
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(JoystickAxis))
            {
                return;
            }

            var parts = JoystickAxis.Split('.');

            file.Write(new string(' ', info.IndentLevel * 4));
            file.Write("iReport."); file.Write(VJoyAxis);
            file.Write(" = (int)(DeadZone(");
            if (Inverted)
            {
                file.Write("(65536 - "); file.Write(JoystickAxis.Replace("joystick", "state")); file.Write(")");
            }
            else
            {
                file.Write(JoystickAxis.Replace("joystick", "state"));
            }
            file.Write(", "); file.Write(parts[0].Replace("joystick", "deadzone")); file.WriteLine(") * axisScale);");
        }
示例#15
0
        public void Feed(CompileInfo info, System.IO.StreamWriter file)
        {
            if (String.IsNullOrEmpty(JoystickAxis))
            {
                return;
            }

            file.Write(new string(' ', info.IndentLevel * 4));
            var parts = JoystickAxis.Split('.');

            file.Write("iReport."); file.Write(VJoyPOV); file.Write(" = FakePOV_"); file.Write(IsXDirection ? "X" : "Y"); file.Write("(");
            file.Write("iReport."); file.Write(VJoyPOV);
            file.Write(", ");
            if (Inverted)
            {
                file.Write("(65536 - "); file.Write(JoystickAxis.Replace("joystick", "state")); file.Write(")");
            }
            else
            {
                file.Write(JoystickAxis.Replace("joystick", "state"));
            }
            file.WriteLine(");");
        }
示例#16
0
        private void AllDevicesReady(CompileInfo info, System.IO.StreamWriter file)
        {
            file.WriteLine("        private bool AllDevicesReady()");
            file.WriteLine("        {");
            file.Write("            return ");

            var list = new List <string>();

            foreach (var joystick in info.Joysticks)
            {
                list.Add(String.Concat(joystick.Replace("joystick", "joystickDevice"), " != null"));
            }
            if (list.Count > 0)
            {
                file.Write(String.Join(" && ", list));
            }
            else
            {
                file.Write("false");
            }
            file.WriteLine(";");
            file.WriteLine("        }");
            file.WriteLine();
        }
示例#17
0
 public void Declaration(CompileInfo info, System.IO.StreamWriter file)
 {
 }
示例#18
0
 public void Initialize(CompileInfo info)
 {
     info.RegisterPOV(VJoyPOV);
 }
示例#19
0
        public bool Build(string exeFilename, params IMapItem[] items)
        {
            var location = GetLocation();

            CopyTemplateToTempFolder(location);

            var project     = new System.Xml.XmlDocument();
            var projectPath = Path.Combine(TempDir, "JoystickMerger.Feeder", "JoystickMerger.Feeder.csproj");

            project.Load(projectPath);
            foreach (System.Xml.XmlNode node in project.DocumentElement)
            {
                if (node.Name == "PropertyGroup" /*&& node.GetAttribute("Condition") == "'$(Configuration)|$(Platform)' == 'Release|x64'"*/)
                {
                    foreach (System.Xml.XmlNode propNode in node.ChildNodes)
                    {
                        if (propNode.Name == "OutputPath")
                        {
                            propNode.InnerText = Path.GetDirectoryName(exeFilename);
                        }
                        else if (propNode.Name == "AssemblyName")
                        {
                            propNode.InnerText = Path.GetFileNameWithoutExtension(exeFilename);
                        }
                    }
                }
            }
            project.Save(projectPath);

            var feederPath = Path.Combine(TempDir, "JoystickMerger.Feeder", "JoystickMerger.xml");


            var info = new CompileInfo();

            foreach (var item in items)
            {
                item.Initialize(info);
            }
            info.EndInitialization();

            using (var file = File.CreateText(System.IO.Path.Combine(TempDir, "JoystickMerger.Feeder", "GameDevPoller.Generated.cs")))
            {
                file.WriteLine("using System;");
                file.WriteLine("using System.Collections.Generic;");
                file.WriteLine("using System.Linq;");
                file.WriteLine("using System.Text;");
                file.WriteLine("using SharpDX;");
                file.WriteLine("using SharpDX.DirectInput;");
                file.WriteLine("using System.Windows.Forms;");
                file.WriteLine("using vJoyInterfaceWrap;");
                file.WriteLine();
                file.WriteLine("// This file is generated with JoystickMerger.Generator. Do not edit.");
                file.WriteLine("namespace JoystickMerger.Feeder");
                file.WriteLine("{");
                file.WriteLine("    partial class GameDevPoller");
                file.WriteLine("    {");
                file.WriteLine("        // vJoy device number.");
                file.WriteLine("        const uint id = 1;");

                foreach (var item in items)
                {
                    item.Declaration(info, file);
                }
                file.WriteLine();

                ValidateVJoyConfiguration(info, file);

                foreach (var item in items)
                {
                    item.PreFeed(info, file);
                }
                file.WriteLine("        private void Feed()");
                file.WriteLine("        {");
                foreach (var item in items)
                {
                    item.Feed(info, file);
                }
                file.WriteLine("        }");
                file.WriteLine();

                foreach (var item in items)
                {
                    item.PostFeed(info, file);
                }

                file.WriteLine("    }");
                file.WriteLine("}");
            }


            return(RunCompiler());
        }
示例#20
0
 public void Initialize(CompileInfo info)
 {
     info.RegisterJoystick(Joystick);
     info.RegisterVJoyButton(Convert.ToInt32(NumVJoyEndAt.Value));
 }
 public void PostFeed(CompileInfo info, System.IO.StreamWriter file)
 {
     buttonName = null;
 }
示例#22
0
 public void Initialize(CompileInfo info)
 {
     info.RegisterJoystick(JoystickAxis);
     info.RegisterVJoyAxis(VJoyAxis);
 }
示例#23
0
 public void Initialize(CompileInfo info)
 {
 }
示例#24
0
        private void FindDevices(CompileInfo info, System.IO.StreamWriter file)
        {
            var nameToDevice = new Dictionary <string, DeviceListItem>();

            foreach (var device in Items)
            {
                nameToDevice[device.Item.Key] = device;
            }

            file.WriteLine("        private void FindDevices(IList<DeviceInstance> gameControllerList, IdentifierList preferred)");
            file.WriteLine("        {");
            int index = 0;

            foreach (var joystick in info.Joysticks)
            {
                file.Write("            var newJoy"); file.Write(index + 1); file.WriteLine(" = Guid.Empty;");
                file.Write("            var preferJoy"); file.Write(index + 1); file.Write(" = preferred["); file.Write(index); file.WriteLine("];");
                index++;
            }
            file.WriteLine();

            file.WriteLine("            foreach (var deviceInstance in gameControllerList)");
            file.WriteLine("            {");

            index = 0;
            foreach (var joystick in info.Joysticks)
            {
                file.Write("                if (DetectDevice(deviceInstance, ref ");
                file.Write(joystick.Replace("joystick", "joystickDevice"));
                file.Write(", \"");
                file.Write(nameToDevice[joystick].Item.Device.InstanceName);
                file.Write("\", ref preferJoy");
                file.Write(index + 1);
                file.Write(", (guid) => mainForm.SetDevicesState(");
                file.Write(index);
                file.WriteLine(", true, ref guid)))");
                file.WriteLine("                    continue;");

                index++;
            }
            file.WriteLine();

            index = 0;
            foreach (var joystick in info.Joysticks)
            {
                file.Write("                if (DetectDevice(deviceInstance, ref ");
                file.Write(joystick.Replace("joystick", "joystickDevice"));
                file.Write(", \"");
                file.Write(nameToDevice[joystick].Item.Device.InstanceName);
                file.Write("\", ref newJoy");
                file.Write(index + 1);
                file.Write(", (guid) => mainForm.SetDevicesState(");
                file.Write(index);
                file.WriteLine(", true, ref guid)))");
                file.WriteLine("                {");
                file.Write("                    preferJoy");
                file.Write(index + 1);
                file.Write(" = newJoy");
                file.Write(index + 1);
                file.WriteLine(";");
                file.WriteLine("                    continue;");
                file.WriteLine("                }");
                index++;
            }
            file.WriteLine("            }");


            index = 0;
            foreach (var joystick in info.Joysticks)
            {
                file.Write("            preferred["); file.Write(index); file.Write("] = preferJoy"); file.Write(index + 1); file.WriteLine(";");
                index++;
            }

            file.WriteLine("        }");
            file.WriteLine();
        }
示例#25
0
 public void PreFeed(CompileInfo info, System.IO.StreamWriter file)
 {
     AllDevicesReady(info, file);
     FindDevices(info, file);
 }
示例#26
0
 public void PostFeed(CompileInfo info, System.IO.StreamWriter file)
 {
 }
示例#27
0
 public void PostFeed(CompileInfo info, System.IO.StreamWriter file)
 {
     ReleaseDevices(info, file);
 }