protected ListViewElementProject CreateListViewElement(SharedProject proj)
        {
            ListViewElementProject newElement = null;

            if (null != ListViewElementPool)
            {
                newElement = ListViewElementPool.GetObject();
            }

            if (null == newElement)
            {
                newElement = GameObject.Instantiate <ListViewElementProject>(ListViewElementPrefab);
                MousePointerEvents events = newElement.GetComponent <MousePointerEvents>();
                SubscribeToMouseEventPointers(events, proj, TooltipComponent);
            }
            else
            {
                MousePointerEvents events = newElement.GetComponent <MousePointerEvents>();
                events.RemoveAllListeners();
                SubscribeToMouseEventPointers(events, proj, TooltipComponent);
            }

            newElement.Project = proj;
            newElement.gameObject.SetActive(true);

            return(newElement);
        }
Esempio n. 2
0
 private string GetProjectListViewElementText(SharedProject proj)
 {
     return(string.Format("{0}\nCompletion bonus: {1} $\nCompletion time: {2} days",
                          proj.Name,
                          proj.CompletionBonus,
                          proj.CompletionTime));
 }
Esempio n. 3
0
    /*Private methods*/

    private void OnGameTimeDayChanged()
    {
        if (true == PhotonNetwork.isMasterClient && Projects.Count < MaxProjectsOnMarket)
        {
            int randomNumber = UnityEngine.Random.Range(1, 101);

            if (randomNumber <= PROJECT_ADD_PROBABILITY_DAILY)
            {
                SharedProject newProject = GenerateSingleProject();
                this.photonView.RPC("AddProjectRPC", PhotonTargets.All, newProject);
            }
        }
    }
Esempio n. 4
0
    private void AddProjectRPC(SharedProject projectToAdd)
    {
        Projects.Add(projectToAdd);
        ProjectAdded?.Invoke(projectToAdd);

        if (false == PhotonNetwork.isMasterClient && false == IsDataReceived)
        {
            if (this.Projects.Count == MaxProjectsOnMarket)
            {
                IsDataReceived = true;
                DataReceived?.Invoke();
            }
        }
    }
Esempio n. 5
0
        private void OnButtonSelectorProjectsSelectedButtonChanged(Button btn)
        {
            if (null != btn)
            {
                ListViewElementProject el = btn.GetComponent <ListViewElementProject>();
                SelectedProject = el.Project;
            }
            else
            {
                SelectedProject = null;
            }

            SetProjectInfoText(SelectedProject);
            SetProjectMarketButton();
        }
        /// <summary>
        /// Used to display text in tooltip component
        /// </summary>
        protected void SubscribeToMouseEventPointers(MousePointerEvents events, SharedProject proj, Tooltip tooltipComponent)
        {
            events.PointerEntered += () =>
            {
                tooltipComponent.gameObject.SetActive(true);
                string tooltipText = string.Format("Used technologies:\n{0}",
                                                   GetProjectTechnologiesString(proj));
                tooltipComponent.Text = tooltipText;
            };

            events.PointerExited += () =>
            {
                tooltipComponent.gameObject.SetActive(false);
            };
        }
Esempio n. 7
0
    private void RemoveProjectInternalRPC(int projectToRemoveID)
    {
        SharedProject removedProject = null;

        for (int i = 0; i < Projects.Count; i++)
        {
            if (projectToRemoveID == Projects[i].ID)
            {
                removedProject = Projects[i];
                Projects.RemoveAt(i);
                break;
            }
        }

        ProjectRemoved?.Invoke(removedProject);
    }
Esempio n. 8
0
        private void OnProjectsMarketProjectRemoved(SharedProject proj)
        {
            ListViewElementProject element = GetProjectListViewElement(ListViewMarketProjects, proj);

            if (null == ListViewElementPool)
            {
                ListViewElementPool = new ObjectPool <ListViewElementProject>();
            }

            element.gameObject.SetActive(false);
            ListViewMarketProjects.RemoveControl(element.gameObject, false);
            ButtonSelectorProjects.RemoveButton(element.Button);
            ListViewElementPool.AddObject(element);
            SetListViewMarketProjectsText();

            proj.CompletionTimeUpdated -= OnMarketProjectCompletionTimeUpdated;
        }
Esempio n. 9
0
 private void SetProjectInfoText(SharedProject proj)
 {
     if (null != proj)
     {
         TextProjectName.text      = proj.Name;
         TextCompleteBonus.text    = string.Format("{0} $", proj.CompletionBonus);
         TextUsedTechnologies.text = string.Format("{0}", GetProjectTechnologiesString(proj));
         TextCompletionTime.text   = string.Format("{0} days", proj.CompletionTime);
     }
     else
     {
         TextProjectName.text      = string.Empty;
         TextCompleteBonus.text    = string.Empty;
         TextUsedTechnologies.text = string.Empty;
         TextCompletionTime.text   = string.Empty;
     }
 }
Esempio n. 10
0
        /*Private methods*/

        protected string GetProjectTechnologiesString(SharedProject proj)
        {
            StrBuilder.Clear();

            for (int i = 0; i < proj.UsedTechnologies.Count; i++)
            {
                ProjectTechnology pt = proj.UsedTechnologies[i];
                StrBuilder.Append(EnumToString.ProjectTechnologiesStrings[pt]);

                if (i != proj.UsedTechnologies.Count - 1)
                {
                    StrBuilder.Append(" / ");
                }
            }

            return(StrBuilder.ToString());
        }
Esempio n. 11
0
        public static void Run()
        {
            var path = Environment.ExpandEnvironmentVariables(@"%TEMP%\Diablo III.DMP");
            var dump = new MiniDumpMemoryReader(path);
            var pe   = new PEHeaderReader(dump.ReadBytes(dump.ImageBase, 1024));

            _ctx = new CodePatternContext(dump, pe);

            _symbols                     = new SymbolTable();
            _symbols.Version             = dump.MainModuleVersion;
            _symbols.DataSegment.Address = _ctx.Data.Start;

            FindObjectManager();
            FindActors();
            FindACDs();
            FindSNOs();
            FindAttributeDescriptors();
            FindApplicationCore();
            FindLevelArea();
            FindPreferences();
            FindMapActId();
            FindContainerManager();
            FindMessageDescriptors();
            FindPlayerData();

            var dir = new DirectoryInfo("enigma-d3-memory-" + new Version(_symbols.Version.ToString()));

            dir.Create();
            WriteObjectPtrFile(dir);
            WriteGlobalsFile(dir);

            var project = new SharedProject("862a67ee-9ceb-42fe-9406-d7feafc55b00", "Enigma.D3.Memory");

            project.AddCompileFile(Path.Combine(dir.FullName, "Globals.cs"));
            //project.AddCompileFile(Path.Combine(dir.FullName, "MethodPtr.cs"));
            project.AddCompileFile(Path.Combine(dir.FullName, "ObjectPtr.cs"));
            project.Save(Path.Combine(dir.FullName, "Enigma.D3.Memory.Generated.*"));

            if (Program.DeployGeneratedCode)
            {
                project.Deploy(
                    dir,
                    Program.SolutionDirectory.CreateSubdirectory(project.RootNamespace + ".Generated"));
            }
        }
Esempio n. 12
0
        private void OnProjectsMarketProjectAdded(SharedProject proj)
        {
            ListViewElementProject newElement   = CreateListViewElement(proj);
            MousePointerEvents     mousePtrEvts = newElement.GetComponent <MousePointerEvents>();

            mousePtrEvts.PointerDoubleClick += () =>
            {
                OnButtonTakeProjectClicked();
            };

            ButtonSelectorProjects.AddButton(newElement.Button);
            ListViewMarketProjects.AddControl(newElement.gameObject);
            newElement.Text.text         = GetProjectListViewElementText(proj);
            newElement.FrontImage.sprite = proj.Icon;
            SetListViewMarketProjectsText();

            proj.CompletionTimeUpdated += OnMarketProjectCompletionTimeUpdated;
        }
Esempio n. 13
0
    private SharedProject GenerateSingleProject()
    {
        SharedProject newProject;
        int           projectNameIndex = UnityEngine.Random.Range(0, ProjectData.Names.Count);
        string        projectName      =
            ProjectData.Names[projectNameIndex];

        newProject = new SharedProject(projectName);
        newProject.UsedTechnologies = GenerateProjectTechnologies();
        newProject.CompletionTime   = UnityEngine.Random.Range(PROJECT_COMPLETION_TIME_MIN, PROJECT_COMPLETION_TIME_MAX);
        newProject.CompletionBonus  = CalculateProjectCompleteBonus(newProject);
        newProject.ID        = MainSimulationManager.GenerateID();
        newProject.NameIndex = projectNameIndex;
        //Every project name is associated with one icon
        newProject.IconIndex = projectNameIndex;
        newProject.Icon      = ResourceHolderComponent.ProjectsIcons[projectNameIndex];

        return(newProject);
    }
Esempio n. 14
0
        internal static void Run()
        {
            var dir     = new DirectoryInfo("enigma-d3-core-" + Engine.Current.ProcessVersion);
            var enums   = dir.CreateSubdirectory("Enums");
            var project = new SharedProject("da9978d2-8f71-4399-8a57-a789f082e501", "Enigma.D3.Core");

            File.WriteAllText(Path.Combine(enums.FullName, "AttributeId.cs"),
                              "namespace Enigma.D3.Enums\r\n{\r\n\tpublic enum AttributeId\r\n\t{\r\n" +
                              string.Join(",\r\n", Engine.Current.AttributeDescriptors.Select(a => $"\t\t{GetCleanName(a.x1C_Name)} = {a.x00_Id}").ToArray())
                              + "\r\n\t}\r\n}\r\n");
            project.AddCompileFile(Path.Combine(enums.FullName, "AttributeId.cs"));

            if (Program.DeployGeneratedCode)
            {
                project.Deploy(
                    dir,
                    Program.SolutionDirectory.CreateSubdirectory(project.RootNamespace + ".Generated"));
            }
        }
Esempio n. 15
0
    /// <summary>
    /// Generates projects on market and sends it to other clients
    /// </summary>
    private void GenerateAndSendProjects()
    {
#if DEVELOPMENT_BUILD || UNITY_EDITOR
        string className = this.GetType().Name;
        string debugInfo = string.Format("[{0}] generating {1} projects...",
                                         className, MaxProjectsOnMarket - Projects.Count);
        Debug.Log(debugInfo);
#endif

        while (MaxProjectsOnMarket > Projects.Count)
        {
            SharedProject newProject = GenerateSingleProject();
            this.photonView.RPC("AddProjectRPC", PhotonTargets.All, newProject);
        }

#if DEVELOPMENT_BUILD || UNITY_EDITOR
        debugInfo = string.Format("[{0}] generated {1} projects",
                                  className, Projects.Count);
        Debug.Log(debugInfo);
#endif
    }
Esempio n. 16
0
    private int CalculateProjectCompleteBonus(SharedProject newProject)
    {
        int projectCompleteBonus = PROJECT_BONUS_BASE;

        foreach (ProjectTechnology techonology in newProject.UsedTechnologies)
        {
            projectCompleteBonus += PROJECT_BONUS_PER_TECHNOLOGY;
        }

        //Used to calculate completion bonus taking project's completion time
        //into consideration
        float completionTimeMultiplier = 3f / Utils.MapRange(newProject.CompletionTime,
                                                             PROJECT_COMPLETION_TIME_MIN,
                                                             PROJECT_COMPLETION_TIME_MAX,
                                                             1f,
                                                             3f);

        projectCompleteBonus = (int)(completionTimeMultiplier * projectCompleteBonus);

        return(projectCompleteBonus);
    }
Esempio n. 17
0
        private IQueryable <SharedProject> SharedProjectList()
        {
            var list = new List <SharedProject>();

            for (int i = 1; i <= 5; i++)
            {
                var sharedProjects = new SharedProject
                {
                    RecipientEmail = "Test" + i + "@generac.com",
                    ProjectID      = i,
                    ID             = i,
                    Active         = true,
                    Project        = new Project
                    {
                        ID = i
                    }
                };

                list.Add(sharedProjects);
            }

            return(list.AsQueryable());
        }
Esempio n. 18
0
        private SharedProjectsDto AddSharedProjects(SharedProjectsDto sharedProjectsDto, string userID, string userName)
        {
            try
            {
                SharedProject sharedProjectDetails;
                SharedProject sharedProject = _sharedProjectsRepository.GetSingle(s => s.ProjectID == sharedProjectsDto.ProjectID && s.RecipientEmail.Equals(sharedProjectsDto.RecipientEmail, StringComparison.InvariantCultureIgnoreCase));
                if (sharedProject != null)
                {
                    foreach (var sharedSolutionID in sharedProjectsDto.SelectedSolutionList)
                    {
                        if (sharedProject.SharedProjectSolution.Where(s => s.SharedProjectID == sharedProject.ID && s.SolutionID == sharedSolutionID).Count() <= 0)
                        {
                            sharedProject.SharedProjectSolution.Add(new SharedProjectSolution
                            {
                                SharedProjectID  = sharedProject.ID,
                                SolutionID       = sharedSolutionID,
                                CreatedDateTime  = DateTime.UtcNow,
                                SharedDateTime   = DateTime.UtcNow,
                                ModifiedDateTime = DateTime.UtcNow,
                                CreatedBy        = userName,
                                ModifiedBy       = userName,
                                Active           = true
                            });
                        }
                        //else
                        //{
                        //    sharedProject.SharedProjectSolution.Remove(_sharedProjectSolutionRespository.GetSingle(s => s.SolutionID == sharedSolutionID));
                        //}
                    }
                    _sharedProjectsEntityToSharedProjectsDtoMapper.UpdateMap(sharedProjectsDto, sharedProject, userID);
                    sharedProject.ModifiedDateTime = DateTime.UtcNow;
                    sharedProject.ModifiedBy       = userName;
                    sharedProject.Active           = true;

                    sharedProjectDetails = _sharedProjectsRepository.Update(sharedProject);
                    _sharedProjectsRepository.Commit();
                }
                else
                {
                    sharedProject = _sharedProjectsEntityToSharedProjectsDtoMapper.AddMap(sharedProjectsDto, userID);
                    sharedProject.CreatedDateTime  = DateTime.UtcNow;
                    sharedProject.CreatedBy        = userName;
                    sharedProject.SharedDateTime   = DateTime.UtcNow;
                    sharedProject.ModifiedDateTime = DateTime.UtcNow;
                    sharedProject.ModifiedBy       = userName;
                    sharedProject.Active           = true;

                    sharedProject.SharedProjectSolution = sharedProjectsDto.SelectedSolutionList.Select(solutionID => new SharedProjectSolution
                    {
                        SolutionID       = solutionID,
                        CreatedDateTime  = DateTime.UtcNow,
                        SharedDateTime   = DateTime.UtcNow,
                        ModifiedDateTime = DateTime.UtcNow,
                        CreatedBy        = userName,
                        ModifiedBy       = userName,
                        Active           = true
                    }).ToList();

                    sharedProjectDetails = _sharedProjectsRepository.Add(sharedProject);
                    _sharedProjectsRepository.Commit();
                }

                Project sharedProjectRow  = _projectRepository.GetSingle(p => p.ID == sharedProjectsDto.ProjectID);
                var     sharedProjectName = sharedProjectRow.ProjectName;
                var     sharerUserName    = sharedProjectRow.User.FirstName + " " + sharedProjectRow.User.LastName;

                return(new SharedProjectsDto
                {
                    SharedProjectID = sharedProjectDetails.ID,
                    SharedProjectName = sharedProjectName,
                    SharerUserName = sharerUserName
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private void OnSelectedProjectCompletionTimeUpdated(SharedProject proj)
        {
            ListViewElementProject element = GetProjectListViewElement(ListViewCompanyProjects, proj);

            element.Text.text = GetProjectListViewElementText((LocalProject)proj);
        }
Esempio n. 20
0
        /// <summary>
        /// Returns list view element associated with given project
        /// </summary>
        /// <param name="listView">List view element will be searched in this list view</param>
        protected ListViewElementProject GetProjectListViewElement(ControlListView listView, SharedProject proj)
        {
            GameObject             elementObject = null;
            ListViewElementProject element       = null;

            elementObject = listView.Controls.Find(x =>
            {
                return(x.GetComponent <ListViewElementProject>().Project == proj);
            });

            if (null != elementObject)
            {
                element = elementObject.GetComponent <ListViewElementProject>();
            }

            return(element);
        }
Esempio n. 21
0
        private void OnMarketProjectCompletionTimeUpdated(SharedProject proj)
        {
            ListViewElementProject element = GetProjectListViewElement(ListViewMarketProjects, proj);

            element.Text.text = GetProjectListViewElementText(proj);
        }
Esempio n. 22
0
    /*Public methods*/

    public void RemoveProject(SharedProject projectToRemove)
    {
        this.photonView.RPC("RemoveProjectInternalRPC", PhotonTargets.All, projectToRemove.ID);
    }
Esempio n. 23
0
        /// <summary>
        /// Synchronizes the text and notes data on the SF server with the data on the Paratext server.
        /// </summary>
        public async Task SendReceiveAsync(UserSecret userSecret, string ptTargetId,
                                           IProgress <ProgressState> progress = null)
        {
            if (userSecret == null || ptTargetId == null)
            {
                throw new ArgumentNullException();
            }

            IInternetSharedRepositorySource source = await GetInternetSharedRepositorySource(userSecret.Id);

            IEnumerable <SharedRepository>       repositories        = source.GetRepositories();
            IEnumerable <ProjectMetadata>        projectsMetadata    = source.GetProjectsMetaData();
            IEnumerable <string>                 projectGuids        = projectsMetadata.Select(pmd => pmd.ProjectGuid.Id);
            Dictionary <string, ParatextProject> ptProjectsAvailable =
                GetProjects(userSecret, repositories, projectsMetadata).ToDictionary(ptProject => ptProject.ParatextId);

            if (!projectGuids.Contains(ptTargetId))
            {
                // See if this is a resource
                IReadOnlyList <ParatextResource> resources = await this.GetResourcesInternalAsync(userSecret.Id, true);

                ParatextResource resource = resources.SingleOrDefault(r => r.ParatextId == ptTargetId);
                if (resource != null)
                {
                    ptProjectsAvailable.Add(resource.ParatextId, resource);
                }
                else
                {
                    _logger.LogWarning($"The target project did not have a full name available {ptTargetId}");
                }
            }
            if (!ptProjectsAvailable.TryGetValue(ptTargetId, out ParatextProject targetPtProject))
            {
                throw new ArgumentException(
                          $"PT projects with the following PT ids were requested but without access or they don't exist: {ptTargetId}");
            }

            EnsureProjectReposExists(userSecret, targetPtProject, source);
            StartProgressReporting(progress);
            if (!(targetPtProject is ParatextResource))
            {
                SharedProject targetSharedProj = SharingLogicWrapper.CreateSharedProject(ptTargetId,
                                                                                         targetPtProject.ShortName, source.AsInternetSharedRepositorySource(), repositories);
                string username = GetParatextUsername(userSecret);
                // Specifically set the ScrText property of the SharedProject to indicate the project is available locally
                targetSharedProj.ScrText     = ScrTextCollection.FindById(username, ptTargetId);
                targetSharedProj.Permissions = targetSharedProj.ScrText.Permissions;
                List <SharedProject> sharedPtProjectsToSr = new List <SharedProject> {
                    targetSharedProj
                };

                // TODO report results
                List <SendReceiveResult> results = Enumerable.Empty <SendReceiveResult>().ToList();
                bool success  = false;
                bool noErrors = SharingLogicWrapper.HandleErrors(() => success = SharingLogicWrapper
                                                                                 .ShareChanges(sharedPtProjectsToSr, source.AsInternetSharedRepositorySource(),
                                                                                               out results, sharedPtProjectsToSr));
                if (!noErrors || !success)
                {
                    throw new InvalidOperationException(
                              "Failed: Errors occurred while performing the sync with the Paratext Server.");
                }
            }
        }
Esempio n. 24
0
        internal static void Run()
        {
            var exe     = Program.GetExeFile();
            var data    = File.ReadAllBytes(exe.FullName);
            var mem     = new BufferMemoryReader(data);
            var version = FileVersionInfo.GetVersionInfo(exe.FullName).FileVersion;

            PE = new PEHeaderReader(data);

            var  symbols = SymbolLocator.FindAll(data, mem);
            uint containerManager;

            var dir = new DirectoryInfo("enigma-d3-memory-" + new Version(version.Replace(", ", ".")));

            dir.Create();

            var objPtrs = new Dictionary <string, uint>();

            objPtrs.Add("SNOGroups", symbols.BestMatch("SnoGroups"));
            objPtrs.Add("SNOGroupsByCode", symbols.BestMatch("SnoGroupsByCode"));
            objPtrs.Add("AttributeDescriptors", symbols.BestMatch("AttributeDescriptors"));
            objPtrs.Add("MessageDescriptor", symbols.BestMatch("MessageDescriptor"));
            objPtrs.Add("LocalData", symbols.BestMatch("LocalData"));
            objPtrs.Add("ContainerManager", containerManager = symbols.BestMatch("ContainerManager"));
            objPtrs.Add("ApplicationLoopCount", symbols.BestMatch("ApplicationLoopCount"));
            objPtrs.Add("ObjectManager", symbols.BestMatch("ObjectManager"));
            objPtrs.Add("ObjectManagerPristine", symbols.BestMatch("ObjectManagerPristine"));
            objPtrs.Add("MapActId", symbols.BestMatch("MapActId"));
            objPtrs.Add("VideoPreferences", symbols.BestMatch("VideoPreferences"));
            objPtrs.Add("SoundPreferences", symbols.BestMatch("SoundPreferences"));
            objPtrs.Add("GameplayPreferences", symbols.BestMatch("GameplayPreferences"));
            objPtrs.Add("SocialPreferences", symbols.BestMatch("SocialPreferences"));
            objPtrs.Add("ChatPreferences", symbols.BestMatch("ChatPreferences"));
            objPtrs.Add("HotkeyPreferences", objPtrs["SoundPreferences"] == 0 ? 0 : objPtrs["SoundPreferences"] + 0x50);
            objPtrs.Add("LevelArea", GetStatic_LevelArea(data, symbols));
            objPtrs.Add("LevelAreaName", GetStatic_LevelAreaName(data, symbols));
            WriteObjectPtrFile(Path.Combine(dir.FullName, "ObjectPtr.cs"), objPtrs);

            var methodPtrs = new Dictionary <string, uint>();

            methodPtrs.Add("SNOGroups_Initialize", TranslateToVA(symbols.BestMatch("CSnoGroups::Initialize")));
            methodPtrs.Add("GameMessage_GetHandlerInfo", TranslateToVA(symbols.BestMatch("CGameMessage::GetHandlerInfo")));
            WriteMethodPtrFile(Path.Combine(dir.FullName, "MethodPtr.cs"), methodPtrs);

            var globals = new Dictionary <string, string>();

            globals.Add("static readonly Version SupportedVersion", $"new Version({version})");
            globals.Add("const int SNOGroupsCount", "60");                   // TODO: Don't hardcode.
            globals.Add("const int AttributeDescriptorsCount", GetAttributeDescriptorsCount(symbols).ToString());
            var sizeof_playerdata = symbols.BestMatch("sizeof(PlayerData)"); // ((symbols.BestMatch("sizeof(PlayerDataManager)") - 0x038) / 8);

            globals.Add("const int SizeOf_PlayerData", sizeof_playerdata.ToHex());
            if (Engine.Current?.ProcessVersion == Engine.SupportedVersion)
            {
                globals.Add("const int Offset_PlayerData_HeroName", GetOffset_PlayerData_HeroName(sizeof_playerdata).ToHex());
                globals.Add("const int Offset_PlayerData_LifePercentage", GetOffset_PlayerData_LifePercentage(sizeof_playerdata).ToHex());
            }
            else
            {
                globals.Add("const int Offset_PlayerData_HeroName", "0; // Run [CodeGen -memory -deploy] again");
                globals.Add("const int Offset_PlayerData_LifePercentage", "0; // Run [CodeGen -memory -deploy] again");
            }
            // TODO: globals.Add("const int SizeOf_LevelArea", symbols.BestMatch("sizeof(LevelArea)").ToHex());
            WriteGlobalsFile(Path.Combine(dir.FullName, "Globals.cs"), globals);

            var project = new SharedProject("862a67ee-9ceb-42fe-9406-d7feafc55b00", "Enigma.D3.Memory");

            project.AddCompileFile(Path.Combine(dir.FullName, "Globals.cs"));
            project.AddCompileFile(Path.Combine(dir.FullName, "MethodPtr.cs"));
            project.AddCompileFile(Path.Combine(dir.FullName, "ObjectPtr.cs"));
            project.Save(Path.Combine(dir.FullName, "Enigma.D3.Memory.Generated.*"));

            if (Program.DeployGeneratedCode)
            {
                project.Deploy(
                    dir,
                    Program.SolutionDirectory.CreateSubdirectory(project.RootNamespace + ".Generated"));
            }
        }
Esempio n. 25
0
        internal static void Run()
        {
            PrimitiveType.Register <float>("DT_ACCEL", "Acceleration", "(Value * 3600.0f).ToString(\"0.00\") + \" ft/s^2\";");
            PrimitiveType.Register <float>("DT_ANGLE", "Angle", "(Value * RadianToDegree).ToString(\"0.00\") + \"-|\";", "public const float RadianToDegree = 180f / (float)Math.PI; //57.295776f;");
            PrimitiveType.Register <float>("DT_ANGULARVELOCITY", "AngularVelocity", "((Value * RadianToDegree) * 60.0f).ToString(\"0.00\") + \"-|/s\";", "public const float RadianToDegree = 180f / (float)Math.PI; //57.295776f;");
            PrimitiveType.Register <int>("DT_ATTRIBUTEPARAM", "AttributeParameter");
            PrimitiveType.Register <int>("DT_DATAID", "DataId", "\"0x\" + Value.ToString(\"X8\");");
            PrimitiveType.Register <int>("DT_GBID", "GBID");
            PrimitiveType.Register <float>("DT_HIGHPRECISIONPERCENT", "HighPrecisionPercent", "(Value * 100.0f).ToString(\"0.0000\") + \"%\";");
            PrimitiveType.Register <float>("DT_IMPULSE", "Impulse", "(Value * 60.0f).ToString(\"0.00\") + \" lb-sec\";");
            PrimitiveType.Register <float>("DT_MASS", "Mass", "(Value * 32.2f).ToString(\"0.00\") + \" lb\";");
            PrimitiveType.Register <byte>("DT_PERCENT", "Percent", "(((float)Value / 255.0f) * 100.0f).ToString(\"0.00\") + \"%\";");
            PrimitiveType.Register <int>("DT_SNO", "SNO");
            PrimitiveType.Register <int>("DT_SNO_GROUP", "SNOGroup", "((Enigma.D3.Enums.SNOType)Value).ToString().ToUpper() + \"_SNO\";");
            PrimitiveType.Register <int>("DT_SNONAME_HANDLE", "SNONameHandle");
            PrimitiveType.Register <float>("DT_TIME", "Time", "(Value / 60f).ToString(\"0.00 sec\");");
            PrimitiveType.Register <int>("DT_TRANSLATEABLE", "Translateable");
            PrimitiveType.Register <float>("DT_VELOCITY", "Velocity", "(Value * 60f).ToString(\"0.00\") + \" ft/s\";");

            NativeTypes.Register <bool>("DT_FLAG");
            NativeTypes.Register <byte>("DT_BYTE");
            NativeTypes.Register <short>("DT_WORD");
            NativeTypes.Register <int>("DT_INT");
            NativeTypes.Register <long>("DT_INT64");
            NativeTypes.Register <float>("DT_FLOAT");
            NativeTypes.Register <int>("DT_ENUM");
            NativeTypes.Register <Vector3>("DT_VECTOR3D");
            NativeTypes.Register <Vector2>("DT_VECTOR2D");
            NativeTypes.Register <Vector2I>("DT_IVECTOR2D");
            NativeTypes.Register <Quaternion>("Quaternion");
            NativeTypes.Register <QuaternionI>("Quaternion16");
            NativeTypes.Register <AABB>("AABB");
            NativeTypes.Register <Sphere>("Sphere");
            NativeTypes.Register <Vector3>("dmFloat3");
            NativeTypes.Register <Plane>("dmPlane");
            NativeTypes.Register <Matrix4x4>("Matrix4x4");
            NativeTypes.Register <SNOName>("SNOName");

            var groups = MemoryContext.Current.DataSegment.SNOGroupStorage
                         .Select(p => p.Cast <SNOGroupStorage <MemoryObject> >().Dereference()).Where(a => a != null).ToList();

            var project = new SharedProject("966c65df-1054-4d67-91ee-31c155f0c8f8", "Enigma.D3.Assets");
            var outDir  = Directory.CreateDirectory("enigma-d3-assets-" + MemoryContext.Current.MainModuleVersion);

            foreach (var group in groups.OrderBy(a => a.Name))
            {
                Console.WriteLine(ConsoleTitleBase + " - " + group.Name);

                var knownTypes = new List <KnownType>();
                knownTypes.AddRange(PrimitiveType.GetRawNames().Select(a => (KnownType)a));
                knownTypes.AddRange(NativeTypes.GetRawNames().Select(a => (KnownType)a));
                knownTypes.Add(group.PtrDataType.Dereference());
                knownTypes.Add("DT_VARIABLEARRAY");
                knownTypes.Add("DT_CHARARRAY");
                knownTypes.Add("DT_TAGMAP");
                knownTypes.Add("DT_CSTRING");
                knownTypes.Add("DT_FORMULA");
                knownTypes.Add("SerializeData");

                string filePath = Path.Combine(outDir.FullName, group.PtrDataType.Dereference().GetName() + ".cs");
                using (var output = File.CreateText(filePath))
                {
                    var baseType = group.PtrDataType.Dereference().ContainsSerializedData() ? "SerializeMemoryObject" : "MemoryObject";
                    AttachPrinterStream(output);
                    PrintLine("using System.Runtime.CompilerServices;");
                    PrintLine("using Enigma.D3.DataTypes;");
                    PrintLine("using Enigma.Memory;");
                    PrintLine();
                    PrintLine("namespace Enigma.D3.Assets");
                    PrintLine("{");
                    IndentLevel++;
                    PrintLine("[CompilerGenerated]");
                    PrintLine("public {2}class {0} : {1}", group.Name, baseType,
                              DeclarePartial ? "partial " : "");
                    PrintLine("{");
                    IndentLevel++;
                    PrintLine("public const int SizeOf = 0x{0:X}; // {0}", group.PtrDataType.Dereference().GetSizeOf());
                    PrintLine();
                    PrintLine("public SNOHeader x{0}_Header {{ get {{ return Read<SNOHeader>(0x{0}); }} }}", 0.ToString("X" + Math.Max(2, group.PtrDataType.Dereference().GetSizeOf().ToString("X").Length)));
                    Examine(knownTypes.Select(a => (KnownType)a).ToList(), group.PtrDataType.Dereference());
                    IndentLevel--;
                    PrintLine("}");
                    IndentLevel--;
                    PrintLine("}");
                    DetachPrinterStream(output);

                    project.AddCompileFile(filePath);
                }
            }

            Console.Title = ConsoleTitleBase + " - Creating shared project...";
            project.Save(Path.Combine(outDir.FullName, "Enigma.D3.Assets.Generated.*"));

            if (Program.DeployGeneratedCode)
            {
                Console.Title = ConsoleTitleBase + " - Deploying shared project...";
                project.Deploy(
                    outDir,
                    Program.SolutionDirectory.CreateSubdirectory(project.RootNamespace + ".Generated"));
            }
        }