示例#1
0
        private bool IsApplied(BuildElement element, AbstractTypeBuilderList builders)
        {
            _context.BuildElement = element;

            foreach (var builder in builders)
            {
                if (IsApplied(builder, builders, BuildStep.Before))
                {
                    return(true);
                }
                if (IsApplied(builder, builders, BuildStep.Build))
                {
                    return(true);
                }
                if (IsApplied(builder, builders, BuildStep.After))
                {
                    return(true);
                }
                if (IsApplied(builder, builders, BuildStep.Catch))
                {
                    return(true);
                }
                if (IsApplied(builder, builders, BuildStep.Finally))
                {
                    return(true);
                }
            }

            return(false);
        }
    public void Start()
    {
        CurrentImage = GetComponent <Image>();
        Build        = GetComponent <BuildElement>();

        Def   = GetComponent <DefElement>();
        Soild = GetComponent <SoilderElement>();
        Tank  = GetComponent <TankElement>();
    }
 /// <summary>
 /// Run from BuildPositionProvider OnNoValidPreviewPosition
 /// </summary>
 public void HidePreviewElement()
 {
     if (replacedElement != null)
     {
         replacedElement.SetActive(true);
         replacedElement = null;
     }
     previewPresenter.SetActive(false);
 }
示例#4
0
 public static List <BuildElement> GetSurroundingElements(BuildElement origin)
 {
     return((from direction
             in AllDirections
             select direction + origin.transform.position
             into checkedPosition
             where BuiltElementsStoreController.ContainsKey(checkedPosition)
             select BuiltElementsStoreController.GetElementAtPosition(checkedPosition.ToVector3Int()))
            .ToList());
 }
        private static BuiltElementDescription ElementToBuiltElementDescription(BuildElement item)
        {
            var health = item.GetComponent <BuildElementLifeCycle>();

            return(new BuiltElementDescription()
            {
                Position = item.transform.position.ToVector3Int(),
                Name = item.Description,
                Health = (health ? health.Hitpoints : 0)
            });
        }
        private void SetPreviewItem(BuildElement element)
        {
            element.transform.localScale = previewElementScaleFactor;

            var elementMaterial = element.GetComponentInChildren <Renderer>().material;

            element.GetComponentInChildren <Renderer>().material = CreateTransparentMaterialVariant(elementMaterial);
            element.GetComponent <BuildElement>().BuildBaseOn    = BuildPosition.None;

            element.transform.parent = previewElementPivot.transform;
        }
示例#7
0
#pragma warning restore 649

        public static void AddElement(BuildElement element)
        {
            var elementPosition = element.transform.position.ToVector3Int();

            if (!store.ContainsKey(elementPosition))
            {
                // print($"ElementStore: adding element with ket: {elementPosition}");
                store.Add(elementPosition, element);
            }
            else
            {
                Debug.LogWarning($"ElementStore already had key {elementPosition} assigned");
            }
        }
        /// <summary>
        /// Run from GameController gameModeChange event
        /// </summary>
        /// <param name="newMode"></param>
        public void ShowHidePreviewElementBasedOnGameMode(GameMode newMode)
        {
            gameMode = newMode;

            if (newMode != GameMode.Build || newMode != GameMode.Replace)
            {
                if (replacedElement != null)
                {
                    replacedElement.SetActive(true);
                    replacedElement = null;
                }
                previewPresenter.SetActive(false);
            }
        }
 public void AddToQueue(String buildName)
 {
     lock (s_lock)
     {
         var item = new BuildElement()
         {
             Name = buildName, RequestTime = DateTime.Now
         };
         QueueList.Add(item);
         if (!QueueTimer.Enabled)
         {
             QueueTimer.Start();
         }
     }
 }
        /// <summary>
        /// Run from BuildPositionProvider OnReplacePreviewPositionChanged
        /// </summary>
        /// <param name="previewPosition"></param>
        public void ShowPreviewElement(Vector3Int previewPosition)
        {
            if (replacedElement != null)
            {
                replacedElement.gameObject.SetActive(true);
            }

            replacedElement = BuiltElementsStoreController.GetElementAtPosition(previewPosition);

            if (previewItem.CanBeBuilt == BuildPosition.Top &&
                !SurroundingElementInfo.IsGroundOrBuiltElementBellow(previewPosition))
            {
                return;
            }

            replacedElement.gameObject.SetActive(false);
            DisplayPreviewElement(previewPosition);
        }
        /// <summary>
        /// Run from BuildStoreController OnStoreItemChange
        /// </summary>
        /// <param name="newElement"></param>
        public void SetPreviewElement(BuildElement newElement)
        {
            HidePreviewElement();

            if (newElement == null)
            {
                return;
            }

            foreach (Transform child in previewElementPivot.transform)
            {
                Destroy(child.gameObject);
            }

            previewItem    = newElement;
            elementToBuild = previewItem;
            var newPreviewItem = Instantiate(previewItem, previewElementPivot.transform.position, Quaternion.identity);

            SetPreviewItem(newPreviewItem);
        }
        private void InstantiateBuildElement()
        {
            var previewPosition = previewPresenter.transform.position;

            if (!canBuild ||
                !inputEnabled ||
                !Input.GetMouseButton(0) ||
                !elementToBuild ||
                !previewPresenter.activeSelf)
            {
                return;
            }

            var instantiatedElement =
                Instantiate(elementToBuild, previewPosition, Quaternion.identity);

            instantiatedElement.tag = elementToBuild.tag;
            instantiatedElement.transform.parent = builtElementParent;

            if (gameMode == GameMode.Replace)
            {
                replacedElement = null;
                BuiltElementsStoreController.RemoveAndDestroyElementWithPosition(previewPosition);
            }

            BuiltElementsStoreController.AddElement(instantiatedElement);

            UpdateSurroundingElementsConnections(instantiatedElement);

            if (instantiatedElement.BuildBaseOn != BuildPosition.AllSides)
            { //TODO: Here it would need to be tuned for variants of BuildPositions
                DetachedElementsChecker.CheckForDetachedElements(instantiatedElement);
            }

            canBuild = false;

            StartCoroutine(CooldownCanBuild());
        }
#pragma warning restore 649

        public static void CheckForDetachedElements(BuildElement origin)
        {
            var elementsToCheck = SurroundingElementInfo.GetSurroundingElements(origin);

            var detachedElements = new List <BuildElement>();

            foreach (var element in elementsToCheck)
            {
                //If is element in detachedElements, it means it was in the path of element on other already checked side.
                if (detachedElements.Contains(element))
                {
                    continue;
                }

                var newQueue = new Queue <BuildElement>();
                newQueue.Enqueue(element);
                detachedElements.AddRange(FindDetachedGroupOfElements(newQueue, detachedElements));
            }

            detachedElements = detachedElements.Distinct().ToList();

            detachedElements.ForEach(element => element.SetDetached());
        }
示例#14
0
    void Start()
    {
        _player = FindObjectOfType <MainPlayer>();

        if (PlayerClass == "Human")
        {
            for (int i = 0; i < ButtonList.Count; i++)
            {
                BuildElement buildinfo = ButtonList[i].GetComponent <BuildElement>();
                buildinfo.BuildModel = Human[i];
            }
        }
        else
        {
            if (PlayerClass == "Orc")
            {
                for (int i = 0; i < ButtonList.Count; i++)
                {
                    BuildElement buildinfo = ButtonList[i].GetComponent <BuildElement>();
                    buildinfo.BuildModel = Orc[i];
                }
            }
        }
    }
        private void PrepareBuild()
        {
            Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "PrepareBuild starting");
            Console.Out.WriteLine("Buildig = " + Building);
            if (!Building && QueueList.Count > 0)
            {
                BuildElement nextBuild = null;
                lock (s_lock)
                {
                    if (!Building && QueueList.Count > 0)
                    {
                        Building  = true;
                        nextBuild = GetQueueHead();
                    }
                    else
                    {
                        return;
                    }
                }

                if (nextBuild == null || nextBuild.Name.Equals(String.Empty))
                {
                    Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "nextBuild == null || Empty");
                    return;
                }

                //RunBatch
                var buildName = nextBuild.Name;
                var de        = (from c in BuildManager.Instance.BuildName2Path
                                 where c.Key.Equals(buildName)
                                 select c).FirstOrDefault();

                var path   = de.Value;
                var folder = GetFolder(path);
                using (Process proc = new Process())
                {
                    ProcessStartInfo psi = new ProcessStartInfo(path);
                    Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "ProcessStartInfo created");
                    psi.UseShellExecute        = false;
                    psi.WorkingDirectory       = folder;
                    psi.RedirectStandardOutput = true;
                    psi.RedirectStandardInput  = true;
                    psi.RedirectStandardError  = true;
                    psi.ErrorDialog            = false;
                    psi.WindowStyle            = ProcessWindowStyle.Hidden;
                    //Console.Out.WriteLine("Executing: " + path);
                    Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Executing " + path);
                    proc.StartInfo = psi;
                    proc.Start();
                    System.IO.StreamReader myOutput = proc.StandardOutput;
                    //build.WaitForExit(2000);
                    CurrentBuildingLog = String.Empty;
                    using (StreamWriter wr = new StreamWriter("BuildLog.log"))
                    {
                        while (!proc.HasExited)
                        {
                            string output = myOutput.ReadToEnd();
                            CurrentBuildingLog += output;
                            //Console.Out.WriteLine(output);
                            Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", output);
                            wr.WriteLine(output);
                        }
                    }

                    if (proc.HasExited)
                    {
                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Process exited");
                        var logStrList = CurrentBuildingLog.Split('\n').ToList();
                        var buildNum   = (from c in logStrList
                                          where c.Contains("Build=")
                                          select c).FirstOrDefault();

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "got buildNum = " + buildNum);
                        buildNum = buildNum.Remove(0, buildNum.IndexOf("=") + 1).Trim();
                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "extracted buildNum = " + buildNum);
                        if (!Directory.Exists(folder + "\\Log"))
                        {
                            Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Create dir");
                            Directory.CreateDirectory(folder + "\\Log");
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "dir exist");
                        String logfile = folder + "\\Log\\BuildLog" + buildNum + ".log";
                        using (StreamWriter sw = new StreamWriter(logfile))
                        {
                            sw.Write(CurrentBuildingLog);
                            Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Writing log");
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Writing log DONE");
                        bool bSucc = false;
                        if (proc.ExitCode == 0)
                        {
                            bSucc = true;
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Get mail list");
                        var mailList = File.ReadAllLines(folder + "\\MailList.txt").ToList();;
                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Get mail list DONE");
                        String mailTo = String.Empty;
                        foreach (var item in mailList)
                        {
                            if (item.Equals(String.Empty))
                            {
                                continue;
                            }

                            if (!mailTo.Equals(String.Empty))
                            {
                                mailTo += ", ";
                            }

                            mailTo += item;
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Send mail start");
                        if (mailTo.Equals(String.Empty))
                        {
                            mailTo = "*****@*****.**";
                        }

                        using (MailMessage mail = new MailMessage("*****@*****.**", mailTo))
                        {
                            mail.Subject = buildName + " build " + buildNum + (bSucc ? " Successful" : " Failed");
                            String body = bSucc ? "New build is available" : "Build Failed";
                            mail.Body = body;

                            mail.Attachments.Add(new Attachment(logfile));
                            SmtpClient client = new SmtpClient("notestlv2");
                            client.UseDefaultCredentials = true;

                            try
                            {
                                client.Send(mail);
                            }
                            catch (Exception ex)
                            {
                                Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Critical, "BuildRunner BuildRequestsQueue, PrepareBuild", "Send mail failed");
                            }
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Send mail end");
                    }


                    try
                    {
                        if (!proc.HasExited)
                        {
                            proc.Kill();
                        }

                        if (File.Exists("BuildLog.log"))
                        {
                            File.Delete("BuildLog.log");
                        }

                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Delete temp log");
                    }
                    catch (Exception ex)
                    {
                        Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Critical, "BuildRunner BuildRequestsQueue, PrepareBuild", ex.ToString());
                    }
                }



                lock (s_lock)
                {
                    Building = false;
                    if (QueueList.Count <= 0)
                    {
                        QueueTimer.Stop();
                        Console.Out.WriteLine("Queue list empty, timer stopped");
                    }
                }

                Logger.WriteLogEntry(System.Diagnostics.TraceEventType.Verbose, "BuildRunner BuildRequestsQueue, PrepareBuild", "Exit");
            }
        }
示例#16
0
 private static void SetElementActiveOnShow(bool isActive, BuildElement foundItem)
 {
     foundItem.gameObject.SetActive(isActive);
 }
示例#17
0
        private void EmitMethod(
            AbstractTypeBuilderList builders, MethodInfo methdoInfo, BuildElement buildElement)
        {
            SetID(builders);

            _context.BuildElement = buildElement;

            var isCatchBlockRequired   = false;
            var isFinallyBlockRequired = false;

            foreach (var builder in builders)
            {
                isCatchBlockRequired   = isCatchBlockRequired || IsApplied(builder, builders, BuildStep.Catch);
                isFinallyBlockRequired = isFinallyBlockRequired || IsApplied(builder, builders, BuildStep.Finally);
            }

            BeginEmitMethod(methdoInfo);

            Build(BuildStep.Begin, builders);

            var emit        = _context.MethodBuilder.Emitter;
            var returnLabel = _context.ReturnLabel;

            // Begin catch block.
            //

            if (isCatchBlockRequired || isFinallyBlockRequired)
            {
                _context.ReturnLabel = emit.DefineLabel();
                emit.BeginExceptionBlock();
            }

            Build(BuildStep.Before, builders);
            Build(BuildStep.Build, builders);
            Build(BuildStep.After, builders);

            if (isCatchBlockRequired || isFinallyBlockRequired)
            {
                emit.MarkLabel(_context.ReturnLabel);
                _context.ReturnLabel = returnLabel;
            }

            // End catch block.
            //
            if (isCatchBlockRequired)
            {
                emit
                .BeginCatchBlock(typeof(Exception));

                _context.ReturnLabel = emit.DefineLabel();
                _context.Exception   = emit.DeclareLocal(typeof(Exception));

                emit
                .stloc(_context.Exception);

                Build(BuildStep.Catch, builders);

                emit
                .rethrow
                .end();

                emit.MarkLabel(_context.ReturnLabel);
                _context.ReturnLabel = returnLabel;
                _context.Exception   = null;
            }

            if (isFinallyBlockRequired)
            {
                emit.BeginFinallyBlock();
                _context.ReturnLabel = emit.DefineLabel();

                Build(BuildStep.Finally, builders);

                emit.MarkLabel(_context.ReturnLabel);
                _context.ReturnLabel = returnLabel;
            }

            if (isCatchBlockRequired || isFinallyBlockRequired)
            {
                emit.EndExceptionBlock();
            }

            Build(BuildStep.End, builders);

            EndEmitMethod();
        }
示例#18
0
 int Locate(BuildElement elem)
 {
     int result = -1;
     foreach (BuildItem b in elem.BuildItemGroup)
         if (elem.BuildItemGroup[++result] == elem.BuildItem)
             return result;
     return result;
 }
 private void UpdateSurroundingElementsConnections(BuildElement element)
 {
     SurroundingElementInfo.GetSurroundingElements(element)
     .ForEach(item => item.SetConnections());
 }
#pragma warning restore 649

        private void Start()
        {
            self = GetComponent <BuildElement>();
        }
示例#21
0
        public static XElement GetElement(this XElement srcElement, String expression, BuildElement builder)
        {
            XElement target = srcElement.XPathSelectElement(expression);

            if (target == null)
            {
                srcElement.MergeElement(builder());
                target = srcElement.XPathSelectElement(expression);
            }
            return(target);
        }
示例#22
0
 public static void RemoveElement(BuildElement element)
 {
     RemoveElementWithPosition(element.transform.position);
 }
示例#23
0
        public static CustomAction determineAction(BuildElement rule)
        {
            CustomAction ret         = CustomAction.Unknown;
            string       noExtension = "";
            string       extension   = "";

            foreach (string target in rule.dependencies)
            {
                extension   = Path.GetExtension(target).Replace(".", "");
                noExtension = Path.GetFileNameWithoutExtension(target);

                if (string.IsNullOrWhiteSpace(target))
                {
                    continue;
                }
                if (target.ToLower().Contains("clean"))
                {
                    return(CustomAction.Ignore);
                }
                if (target.Contains("stdafx"))
                {
                    return(CustomAction.Ignore);
                }

                if (extension.Equals(""))
                {
                    //Phony target
                    return(CustomAction.AttachAsPostBuildEvent);
                }

                if (rule.dependencies.Count > 0)
                {
                    if (rule.dependencies[0].Equals("stdafx.cpp") || rule.dependencies[0].Equals("stdafx.h"))
                    {
                        return(CustomAction.Ignore);
                    }
                }
                //this isn't exactly correct
                if (extension.Equals("o"))
                {
                    ret = CustomAction.ConvertToProject;
                }

                if (extension.Equals("cpp"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                if (extension.Equals("dll"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("exe"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("ocx"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("hlp"))
                {
                    ret = CustomAction.Ignore;
                }
                else if (extension.Equals("cab"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("obj"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                else if (extension.Equals("h"))
                {
                    ret = CustomAction.AttachAsPreBuildEvent;
                }
                else if (extension.Equals("c"))
                {
                    ret = CustomAction.AttachAsPreBuildEvent;
                }
                else if (extension.Equals("lib"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("dat"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("idt"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("res"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                else if (extension.Equals("tlb"))
                {
                    //handled during makefile processing
                    ret = CustomAction.Ignore;
                }
                else if (extension.Equals("def"))
                {
                    ret = CustomAction.Unknown;
                }
            }
            return(ret);
        }
示例#24
0
        public static CustomAction determineAction(BuildElement rule)
        {
            CustomAction ret = CustomAction.Unknown;
            string noExtension = "";
            string extension = "";
            foreach (string target in rule.dependencies)
            {
                extension = Path.GetExtension(target).Replace(".", "");
                noExtension = Path.GetFileNameWithoutExtension(target);

                if (string.IsNullOrWhiteSpace(target))
                    continue;
                if (target.ToLower().Contains("clean"))
                    return CustomAction.Ignore;
                if (target.Contains("stdafx"))
                    return CustomAction.Ignore;

                if (extension.Equals(""))
                {
                    //Phony target
                    return CustomAction.AttachAsPostBuildEvent;
                }

                if (rule.dependencies.Count > 0)
                {
                    if (rule.dependencies[0].Equals("stdafx.cpp") || rule.dependencies[0].Equals("stdafx.h"))
                    {
                        return CustomAction.Ignore;
                    }
                }
                //this isn't exactly correct
                if (extension.Equals("o"))
                {
                    ret = CustomAction.ConvertToProject;
                }

                if (extension.Equals("cpp"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                if (extension.Equals("dll"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("exe"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("ocx"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("hlp"))
                {
                    ret = CustomAction.Ignore;
                }
                else if (extension.Equals("cab"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("obj"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                else if (extension.Equals("h"))
                {
                    ret = CustomAction.AttachAsPreBuildEvent;
                }
                else if (extension.Equals("c"))
                {
                    ret = CustomAction.AttachAsPreBuildEvent;
                }
                else if (extension.Equals("lib"))
                {
                    ret = CustomAction.ConvertToProject;
                }
                else if (extension.Equals("dat"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("idt"))
                {
                    ret = CustomAction.Unknown;
                }
                else if (extension.Equals("res"))
                {
                    ret = CustomAction.ModifyComponent;
                }
                else if (extension.Equals("tlb"))
                {
                    //handled during makefile processing
                    ret = CustomAction.Ignore;
                }
                else if (extension.Equals("def"))
                {
                    ret = CustomAction.Unknown;
                }
            }
            return ret;
        }