Пример #1
0
        private bool AcceptChangeCanExecute(object parameter)
        {
            ElementName elementName = new ElementName(_element.Fullname);

            elementName.AddNamePart(Name);
            return((Name.Length > 0) && (_application.GetElementByFullname(elementName.FullName) == null));
        }
Пример #2
0
    private async Task <T> ImportAsync(
        XmlReader reader,
        ulong ignoreFlags,
        CancellationToken cancel)
    {
        string      previousTree = "";
        Type        t            = typeof(T);
        ElementName name         = t.GetCustomAttribute <ElementName>();

        if (name == null || string.IsNullOrEmpty(name.Name))
        {
            Engine.PrintLine(t.GetFriendlyName() + " has no 'Name' attribute.");
            return(null);
        }

        bool found;

        while (!(found = await reader.MoveToContentAsync() == XmlNodeType.Element &&
                         string.Equals(name.Name, reader.Name, StringComparison.InvariantCulture)))
        {
            ;
        }

        if (found)
        {
            IElement e = await ParseElementAsync(t, null, reader, null, ignoreFlags, previousTree, 0, cancel);

            return(e as T);
        }

        return(null);
    }
 public override int GetHashCode()
 {
     unchecked
     {
         return(((ElementName?.GetHashCode() ?? 0) * 397) ^ (AttributeName?.GetHashCode() ?? 0));
     }
 }
        protected override void OnPreRender(EventArgs e)
        {
            if (!String.IsNullOrWhiteSpace(_value))
            {
                var htmlToRender = new StringBuilder();

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    htmlToRender.Append("<").Append(ElementName.ToLowerInvariant());

                    // GS Fix: Should be testing for "Not" empty
                    if (!String.IsNullOrEmpty(ID))
                    {
                        htmlToRender.Append(" id=\"").Append(ID).Append("\"");
                    }
                    if (!String.IsNullOrEmpty(CssClass))
                    {
                        htmlToRender.Append(" class=\"").Append(CssClass).Append("\"");
                    }
                    htmlToRender.Append(">");
                }

                htmlToRender.Append(_value);

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    htmlToRender.Append("</").Append(ElementName.ToLowerInvariant()).Append(">");
                }

                Controls.Add(new LiteralControl(htmlToRender.ToString()));
            }

            base.OnPreRender(e);
        }
Пример #5
0
        protected override void OnPreRender(EventArgs e)
        {
            if (_value != null)
            {
                var htmlToRender = new StringBuilder();

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    htmlToRender.Append("<").Append(ElementName.ToLowerInvariant());
                    if (!String.IsNullOrEmpty(ID)) htmlToRender.Append(" id=\"").Append(ID).Append("\"");
                    if (!String.IsNullOrEmpty(CssClass)) htmlToRender.Append(" class=\"").Append(CssClass).Append("\"");
                    htmlToRender.Append(">");
                }

                htmlToRender.Append("<a href=\"").Append(AttachmentUrl).Append("\">").Append(_value.Name).Append("</a>");

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    htmlToRender.Append("</").Append(ElementName.ToLowerInvariant()).Append(">");
                }

                Controls.Add(new LiteralControl(htmlToRender.ToString()));
            }

            base.OnPreRender(e);
        }
Пример #6
0
        protected internal XmlDeserializationException FailEnum(string s, Type type)
        {
            if (string.IsNullOrEmpty(s))
            {
                throw new XmlDeserializationException(string.Format(NullException, ElementName, type.Name));
            }

            var badXml = new StringBuilder();

            var nameStr = ElementName.ToString();

            var index = nameStr.IndexOf("_raw");

            if (index != -1)
            {
                nameStr = nameStr.Substring(0, index);

                BuildNode(badXml, nameStr, PreviousElementValue, false);
            }

            BuildNode(badXml, ElementName, LastElementValue);

            if (reader.ReadToFollowing("message"))
            {
                var node = WebUtility.HtmlDecode(Document.ReadNode(reader).OuterXml);

                badXml.Append(node);
            }

            throw new XmlDeserializationException($"Could not deserialize value '{s}' as it is not a valid member of type '{type}'. Could not process XML '{badXml}'.");
        }
Пример #7
0
        private void updateMethodHeader()
        {
            //public double getData(){
            //public static boolean CustomConversionUpdate2(DataType long arg0) {
            string methodHeader   = "public";
            string staticText     = "";
            string outputTypeText = "";
            string methodNameText = "";
            string argumentsText  = "(";

            staticText     = InputTypes.Empty() ? "" : " static";
            outputTypeText = " " + OutputType.MinimizedName;
            methodNameText = InputTypes.Empty() ? " getData" : " " + ElementName.RemoveAll(" ", "_");
            for (int i = 0; i < InputTypes.Count; i++)
            {
                if (i != 0)
                {
                    argumentsText += ", ";
                }
                argumentsText += InputTypes[i].MinimizedName + " arg" + i;
            }
            argumentsText = argumentsText + ")";

            methodHeader      = methodHeader + staticText + outputTypeText + methodNameText + argumentsText + " {";
            tempTbHeader.Text = methodHeader;
        }
Пример #8
0
        public IDsmElement AddElement(string name, string type, int?parentId)
        {
            Logger.LogDataModelMessage($"Add element name={name} type={type} parentId={parentId}");

            string fullname = name;

            if (parentId.HasValue)
            {
                if (_elementsById.ContainsKey(parentId.Value))
                {
                    ElementName elementName = new ElementName(_elementsById[parentId.Value].Fullname);
                    elementName.AddNamePart(name);
                    fullname = elementName.FullName;
                }
            }

            IDsmElement element = FindElementByFullname(fullname);

            if (element == null)
            {
                _lastElementId++;
                element = AddElement(_lastElementId, name, type, 0, false, parentId, false);
            }

            return(element);
        }
Пример #9
0
 public IsotopeInfo(ElementName elementName, int protons, int neutrons, IsotopeStability stability)
 {
     ElementName = elementName;
     Protons     = protons;
     Neutrons    = neutrons;
     Stability   = stability;
 }
Пример #10
0
 public GameElement(ElementName type, int x, int y)
 {
     Nom = type;
     posX = x;
     posY = y;
     this.Height = 10;
     this.Width = 10;
 }
Пример #11
0
        public void WhenElementNameIsConstructedWithNoArgumentThenItsHasOneNamePartWhichIsAnEmptyString()
        {
            ElementName elementName = new ElementName();

            Assert.AreEqual("", elementName.FullName);
            Assert.AreEqual("", elementName.ParentName);
            Assert.AreEqual("", elementName.LastNamePart);
            Assert.AreEqual(1, elementName.NamePartCount);
        }
 public int[,] GenerateRandom(int hauteur, int largeur, int nbChangeDir)
 {
     ElementName[,] tab = new ElementName[hauteur, largeur];
     Point2D debut = GenererCaseStartEnd(tab, hauteur, largeur);
     tab[debut.y, debut.x] = ElementName.Start;
     GenererCheminAvecObjectif(tab, debut, nbChangeDir, hauteur, largeur);
     GenererObstacle(tab, (int)((hauteur*largeur*15)/100), hauteur, largeur);
     return ConvertTabInt (tab, hauteur, largeur);
 }
Пример #13
0
        public static Atom FromStableIsotope(ElementName element)
        {
            var isotope = IsotopeTable.GetStableIsotopeOf(element).FirstOrDefault();

            if (isotope == null)
            {
                throw new ChemistryException($"No stable isotope known for {element}");
            }
            return(new Atom(isotope.Protons, isotope.Neutrons));
        }
Пример #14
0
 public override int GetHashCode()
 {
     unchecked
     {
         int hash = 17;
         hash = hash * 23 + (ElementName != null ? ElementName.GetHashCode() : 0);
         hash = hash * 23 + (Value != null ? Value.GetHashCode() : 0);
         return(hash);
     }
 }
Пример #15
0
 /// <summary>
 /// Constructor for MathML.
 /// </summary>
 internal StackNode(ElementName elementName, T node, string popName, bool markAsIntegrationPoint)
 {
     this.flags      = PrepareMathFlags(elementName.Flags, markAsIntegrationPoint);
     this.name       = elementName.name;
     this.popName    = popName;
     this.ns         = "http://www.w3.org/1998/Math/MathML";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
 }
Пример #16
0
 /// <summary>
 /// Short hand for well-known HTML elements.
 /// </summary>
 internal StackNode(ElementName elementName, T node)
 {
     this.flags      = elementName.Flags;
     this.name       = elementName.name;
     this.popName    = elementName.name;
     this.ns         = "http://www.w3.org/1999/xhtml";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
 }
Пример #17
0
 /// <summary>
 /// Constructor for SVG elements. Note that the order of the arguments is
 /// what distinguishes this from the HTML constructor. This is ugly, but
 /// AFAICT the least disruptive way to make this work with Java's generics
 /// and without unnecessary branches. :-(
 /// </summary>
 internal StackNode(ElementName elementName, string popName, T node)
 {
     this.flags      = PrepareSvgFlags(elementName.Flags);
     this.name       = elementName.name;
     this.popName    = popName;
     this.ns         = "http://www.w3.org/2000/svg";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
 }
Пример #18
0
        public static string LanguageResource(ElementName element)
        {
            var resource = LanguageResources.TextResources.FirstOrDefault(f => f.ElementName == element && f.LanguageId == SelectedLanguage.ID).ToString();

            if (resource == null)
            {
                resource = LanguageResources.TextResources.FirstOrDefault(f => f.ElementName == element && f.LanguageId == 1).ToString();
            }

            return(resource);
        }
Пример #19
0
        public void GivenAnEmptyElementNameWhenAddPartIsCalledThenItsHasOneNamePart()
        {
            ElementName elementName = new ElementName();

            elementName.AddNamePart("a");
            Assert.AreEqual("a", elementName.FullName);
            Assert.AreEqual("", elementName.ParentName);
            Assert.AreEqual("a", elementName.LastNamePart);
            Assert.AreEqual(1, elementName.NamePartCount);
            Assert.AreEqual("a", elementName.NameParts[0]);
        }
            public override int GetHashCode()
            {
                int hashCode = 7443; // "large" prime to start the seed

                // Bitshifting and subtracting once is an efficient way to multiply by our second "large" prime, 0x7ffff = 524287
                hashCode = (hashCode << 19) - hashCode + (RootNamespace?.GetHashCode() ?? 0);
                hashCode = (hashCode << 19) - hashCode + ElementName.GetHashCode();
                hashCode = (hashCode << 19) - hashCode + ElementType.GetHashCode();

                return(hashCode);
            }
Пример #21
0
        public void WhenElementNameIsConstructedWithTwoArgumentsThenItsHasTheJoinedMultipleNameParts()
        {
            ElementName elementName = new ElementName("a.b", "c");

            Assert.AreEqual("a.b.c", elementName.FullName);
            Assert.AreEqual("a.b", elementName.ParentName);
            Assert.AreEqual("c", elementName.LastNamePart);
            Assert.AreEqual(3, elementName.NamePartCount);
            Assert.AreEqual("a", elementName.NameParts[0]);
            Assert.AreEqual("b", elementName.NameParts[1]);
            Assert.AreEqual("c", elementName.NameParts[2]);
        }
Пример #22
0
        public void GivenFilledElementNameWhenAddPartIsCalledThenItsHasOneAdditionalNamePart()
        {
            ElementName elementName = new ElementName("a.b");

            elementName.AddNamePart("c");
            Assert.AreEqual("a.b.c", elementName.FullName);
            Assert.AreEqual("a.b", elementName.ParentName);
            Assert.AreEqual("c", elementName.LastNamePart);
            Assert.AreEqual(3, elementName.NamePartCount);
            Assert.AreEqual("a", elementName.NameParts[0]);
            Assert.AreEqual("b", elementName.NameParts[1]);
            Assert.AreEqual("c", elementName.NameParts[2]);
        }
Пример #23
0
 public GameElement (ElementName type, int x, int y)
 {
    this.Nom = type; 
     this.Location= new System.Drawing.Point(x, y);
     this.PosX = x;
    this.PosY = y;
     this.Height = 10;
     this.Width = 10;
     if (type == ElementName.SNAKEBODY) { this.Image = global::Project_Snake.Properties.Resources.snake_corps; }
     else if (type == ElementName.SNAKEHEAD) { this.Image = global::Project_Snake.Properties.Resources.snake_tete; }
     else if (type == ElementName.WALL) { this.Image = global::Project_Snake.Properties.Resources.mur; }
     else if (type == ElementName.FRUIT) { this.Image = global::Project_Snake.Properties.Resources.fruit; }
     this.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
 }
        protected override void OnPreRender(EventArgs e)
        {
            if (!String.IsNullOrWhiteSpace(Html))
            {
                if (!Paragraphs)
                {
                    Html = Regex.Replace(Html, "(<p>|<p [^>]*>|</p>|<br />)", String.Empty);
                }

                var htmlToRender = new StringBuilder();

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    // GS Fix: The Umbraco RTE puts P tags around content automatically, so adding a P tag here will produce an empty tag instead of wrapping the content.
                    // Therefore, if ElementName is "p", remove the surrounding P tag from the content first.
                    if (ElementName.ToLowerInvariant() == "p")
                    {
                        Html = umbraco.library.RemoveFirstParagraphTag(Html);
                    }

                    htmlToRender.Append("<").Append(ElementName.ToLowerInvariant());

                    // GS Fix: Should be testing for "Not" empty
                    if (!String.IsNullOrEmpty(ID))
                    {
                        htmlToRender.Append(" id=\"").Append(ID).Append("\"");
                    }
                    if (!String.IsNullOrEmpty(CssClass))
                    {
                        htmlToRender.Append(" class=\"").Append(CssClass).Append("\"");
                    }
                    htmlToRender.Append(">");
                }

                htmlToRender.Append(Html);

                if (!String.IsNullOrEmpty(this.ElementName))
                {
                    htmlToRender.Append("</").Append(ElementName.ToLowerInvariant()).Append(">");
                }

                Controls.Add(new LiteralControl(htmlToRender.ToString()));
            }

            base.OnPreRender(e);
        }
Пример #25
0
 /// <summary>
 /// The common-case HTML constructor.
 /// </summary>
 internal StackNode(ElementName elementName, T node, [Local] string popName
                    // [NOCPP[
                    , TaintableLocator locator
                    // ]NOCPP]
                    )
 {
     this.flags      = elementName.Flags;
     this.name       = elementName.name;
     this.popName    = popName;
     this.ns         = "http://www.w3.org/1999/xhtml";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
     // [NOCPP[
     this.locator = locator;
     // ]NOCPP]
 }
Пример #26
0
 /// <summary>
 /// Constructor for SVG elements. Note that the order of the arguments is
 /// what distinguishes this from the HTML constructor. This is ugly, but
 /// AFAICT the least disruptive way to make this work with Java's generics
 /// and without unnecessary branches. :-(
 /// </summary>
 internal StackNode(ElementName elementName, [Local] string popName, T node
                    // [NOCPP[
                    , TaintableLocator locator
                    // ]NOCPP]
                    )
 {
     this.flags      = PrepareSvgFlags(elementName.Flags);
     this.name       = elementName.name;
     this.popName    = popName;
     this.ns         = "http://www.w3.org/2000/svg";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
     // [NOCPP[
     this.locator = locator;
     // ]NOCPP]
 }
Пример #27
0
 /// <summary>
 /// Constructor for HTML formatting elements.
 /// </summary>
 internal StackNode(ElementName elementName, T node, HtmlAttributes attributes
                    // [NOCPP[
                    , TaintableLocator locator
                    // ]NOCPP]
                    )
 {
     this.flags      = elementName.Flags;
     this.name       = elementName.name;
     this.popName    = elementName.name;
     this.ns         = "http://www.w3.org/1999/xhtml";
     this.node       = node;
     this.attributes = attributes;
     this.refcount   = 1;
     Debug.Assert(!elementName.IsCustom, "Don't use this constructor for custom elements.");
     // [NOCPP[
     this.locator = locator;
     // ]NOCPP]
 }
Пример #28
0
 /// <summary>
 /// Constructor for MathML.
 /// </summary>
 internal StackNode(ElementName elementName, T node, [Local] string popName,
                    bool markAsIntegrationPoint
                    // [NOCPP[
                    , TaintableLocator locator
                    // ]NOCPP]
                    )
 {
     this.flags      = PrepareMathFlags(elementName.Flags, markAsIntegrationPoint);
     this.name       = elementName.name;
     this.popName    = popName;
     this.ns         = "http://www.w3.org/1998/Math/MathML";
     this.node       = node;
     this.attributes = null;
     this.refcount   = 1;
     // [NOCPP[
     this.locator = locator;
     // ]NOCPP]
 }
Пример #29
0
        private TransformationNodeClass GenerateClassAsTransformation()
        {
            string javaFreandlyName = ElementName.RemoveAll(" ", "_");

            string description = Description;
            string mainClass   = PackageName + "." + javaFreandlyName;
            string creator     = Environment.UserName;

            string[]        neededOtherClasses = new string[0];
            INeedsExtra[]   neededExtras       = new INeedsExtra[0];
            ConfigElement[] config             = new ConfigElement[0];
            ProxyProperty[] proxyProperties    = new ProxyProperty[0];
            string          methodName         = javaFreandlyName;
            bool            isStatic           = true;

            return(new TransformationNodeClass(javaFreandlyName, ElementName, description, creator, OutputType, InputTypes.ToArray(),
                                               mainClass, neededOtherClasses, neededExtras, config, proxyProperties, true, Path.Combine(WorkSpace.DIR, WorkSpace.CREATED_DIR, javaFreandlyName),
                                               methodName, isStatic));
        }
Пример #30
0
        public void HandleElement(XElement ancestor)
        {
            if (ancestor == null)
            {
                throw new ArgumentNullException("ancestor");
            }
            if (!ElementName.Equals(ancestor.Name.LocalName, StringComparison.OrdinalIgnoreCase))
            {
                throw new XmlConfigurationException(ancestor, "Unexpected element '{0}' (expecting '{1}').",
                                                    ancestor.Name.LocalName, ElementName);
            }

            IList <T> result = new List <T>();

            foreach (XElement element in ancestor.Elements())
            {
                string typeName = element.Name.LocalName;
                if (!_collector.Value.Contains(typeName))
                {
                    throw new XmlConfigurationException(element, "Unknown element");
                }

                ConfigurationTypeInfo  typeInfo = _collector.Value.GetTypeInfo(typeName);
                IConfigurationData <T> data     = typeInfo.CreateInstance <IConfigurationData <T> >();

                var attributes  = element.Attributes().Select(x => new KeyValuePair <string, string>(x.Name.LocalName, x.Value));
                var subelements = element.Elements().Select(x => new KeyValuePair <string, string>(x.Name.LocalName, x.Value));

                foreach (var kv in attributes.Concat(subelements))
                {
                    SetPropertyValue(element, typeInfo, data, kv.Key, kv.Value);
                }

                T      item = data.CreateObject();
                string id   = GetItemId(item);
                if (_items.ContainsKey(id))
                {
                    throw new XmlConfigurationException(element, "Duplicate item (id '{0}') found.", id);
                }
                _items.Add(id, item);
            }
        }
Пример #31
0
        private DataSourceNodeClass GenerateClassAsDataSource()
        {
            string javaFreandlyName = ElementName.RemoveAll(" ", "_");

            string description = Description;
            string mainClass   = PackageName + "." + javaFreandlyName;
            string creator     = Environment.UserName;

            string[]        neededOtherClasses = new string[0];
            INeedsExtra[]   neededExtras       = new INeedsExtra[0];
            ConfigElement[] config             = new ConfigElement[0];
            ProxyProperty[] proxyProperties    = new ProxyProperty[0];
            string          dataMethod         = "getData";
            string          startMethod        = "start";
            string          stopMethod         = "stop";

            return(new DataSourceNodeClass(javaFreandlyName, ElementName, description, creator, OutputType,
                                           mainClass, neededOtherClasses, neededExtras, config, proxyProperties, true, Path.Combine(WorkSpace.DIR, WorkSpace.CREATED_DIR, javaFreandlyName),
                                           dataMethod, startMethod, stopMethod));
        }
Пример #32
0
        private void ImportDsiElement(IDsiElement dsiElement)
        {
            IDsmElement parent      = null;
            ElementName elementName = new ElementName();

            foreach (string name in new ElementName(dsiElement.Name).NameParts)
            {
                elementName.AddNamePart(name);

                bool   isElementLeaf = (dsiElement.Name == elementName.FullName);
                string elementType   = isElementLeaf ? dsiElement.Type : "";

                IDsmElement element = _importPolicy.ImportElement(elementName.FullName, name, elementType, parent);
                parent = element;

                if (isElementLeaf)
                {
                    _dsiToDsmMapping[dsiElement.Id] = element.Id;
                }
            }
        }
Пример #33
0
        internal static void parseStream(InputStream input, SimpleSaxHandler handler)
        {
            var reader = XmlReader.Create(input.Stream);

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:
                    var name       = new ElementName(reader.NamespaceURI, reader.LocalName);
                    var attributes = new HashMap <ElementName, string>();
                    var isEmpty    = reader.IsEmptyElement;
                    for (int attributeIndex = 0; attributeIndex < reader.AttributeCount; attributeIndex++)
                    {
                        reader.MoveToAttribute(attributeIndex);
                        attributes.put(new ElementName(reader.NamespaceURI, reader.LocalName), reader.Value);
                    }
                    handler.startElement(name, attributes);
                    if (isEmpty)
                    {
                        handler.endElement();
                    }
                    break;

                case XmlNodeType.CDATA:
                case XmlNodeType.Text:
                case XmlNodeType.SignificantWhitespace:
                    handler.characters(reader.Value);
                    break;

                case XmlNodeType.EntityReference:
                    throw new System.NotImplementedException();

                case XmlNodeType.EndElement:
                    handler.endElement();
                    break;
                }
            }
        }
 private Point2D DrawCheminNord(ElementName[,] tab, Point2D pos, int distance)
 {
     for (int i = pos.y - 1; i >= pos.y - distance; i--)
     {
         tab [i, pos.x] = ElementName.Chemin;
         currentChemin.Add(new Point2D(pos.x, i));
     }
         return new Point2D(pos.x, pos.y - distance);
 }
Пример #35
0
 void TreeBuilder_OnStartTag(ElementName eltName, HtmlAttributes attributes, bool selfClosing)
 {
     GlobalLog.Write(string.Format("Start tag {0} with {1} attributes, selfClosing <{2}>", eltName.name, attributes.Length, selfClosing), "TreeBulder");
 }
Пример #36
0
 void TreeBuilder_OnEndTag(ElementName eltName)
 {
     GlobalLog.Write(string.Format("End tag: {0}", eltName.name), "TreeBulder");
 }
 private Point2D DrawChemin(ElementName[,] tab, Point2D pos, string direction, int distance)
 {
     currentChemin = new List<Point2D>();
     switch (direction)
     {
     case "O":
         return DrawCheminOuest(tab, pos, distance);
     case "N":
         return DrawCheminNord(tab, pos, distance);
     case "E":
         return DrawCheminEst(tab, pos, distance);
     case "S":
         return DrawCheminSud(tab, pos, distance);
     }
     return pos;
 }
 private int[,] ConvertTabInt(ElementName[,] tab, int hauteur, int largeur)
 {
     int[,] newTab = new int[hauteur, largeur];
     for (int i = 0; i<hauteur; i++)
     {
         for(int j=0; j<largeur; j++)
         {
             switch(tab[i,j])
             {
             case ElementName.Vide:
                 newTab[i,j] = -1;
                 break;
             case ElementName.Orientation:
                 newTab[i,j] = -1;//-1
                 break;
             case ElementName.Chemin:
                 newTab[i,j] = -4;//-1
                 break;
             case ElementName.Start:
                 newTab[i,j] = 0;
                 break;
             case ElementName.End:
                 newTab[i,j] = 1;
                 break;
             case ElementName.Obstacle:
                 newTab[i,j] = 2;
                 break;
             case ElementName.Objectif:
                 newTab[i,j] = 3;
                 break;
             default:
                 newTab[i,j] = -1;
                 break;
             }
         }
     }
     return newTab;
 }
 private Point2D DrawCheminSud(ElementName[,] tab, Point2D pos, int distance)
 {
     for (int i = pos.y + 1; i <= pos.y + distance; i++)
     {
         tab [i, pos.x] = ElementName.Chemin;
         currentChemin.Add(new Point2D(pos.x, i));
     }
     return new Point2D(pos.x, pos.y + distance);
 }
 private Point2D DrawCheminOuest(ElementName[,] tab, Point2D pos, int distance)
 {
     for (int i = pos.x - 1; i >= pos.x - distance; i--)
     {
         tab [pos.y, i] = ElementName.Chemin;
         currentChemin.Add(new Point2D(i, pos.y));
     }
     return new Point2D(pos.x - distance, pos.y);
 }
    private Point2D GenererCaseStartEnd(ElementName[,] tab, int hauteur, int largeur, Point2D end = null)
    {
        int posxStart, posyStart, posxEnd, posyEnd;

        posyStart = Random.Range(0, hauteur);
        posxStart = Random.Range(0, largeur);

        tab[posyStart, posxStart] = ElementName.Start;
        do
        {
            posyEnd = Random.Range(0, hauteur);
            posxEnd = Random.Range(0, largeur);

        }
        while(posyEnd == posyStart && posxStart == posxEnd);

        //tab[posyEnd, posxEnd] = ElementName.Red;
        if (end != null)
        {
            end.x = posxEnd;
            end.y = posyEnd;
        }
        return new Point2D(posxStart, posyStart);
    }
 private bool VerifDistance(ElementName[,] tab, Point2D pos, string direction, int distance, int chDirection)
 {
     if (distance == 1)
     {
         nbCheminNul++;
         if(nbCheminNul>chDirection/4)
             return false;
     }
     switch (direction)
     {
     case "O":
         if (tab[pos.y, pos.x - distance] != ElementName.Vide)// && tab[pos.y, pos.x - distance] != ElementName.Chemin)
             return false;
         break;
     case "N":
         if (tab[pos.y - distance, pos.x] != ElementName.Vide)// && tab[pos.y - distance, pos.x] != ElementName.Chemin)
             return false;
         break;
     case "E":
         if (tab[pos.y, pos.x + distance] != ElementName.Vide)// && tab[pos.y, pos.x + distance] != ElementName.Chemin)
             return false;
         break;
     case "S":
         if (tab[pos.y + distance, pos.x] != ElementName.Vide)// && tab[pos.y + distance, pos.x] != ElementName.Chemin)
             return false;
         break;
     }
     return true;
 }
 private void GenererObstacle(ElementName[,] tab, int nbObstacle, int hauteur, int largeur)
 {
     int compteur = 0;
     while (compteur < nbObstacle)
     {
         Point2D posObs = new Point2D(0, 0);
         posObs.x = Random.Range(0, largeur);
         posObs.y = Random.Range(0, hauteur);
         if (tab[posObs.y, posObs.x] != ElementName.Vide)
             continue;
         tab[posObs.y, posObs.x] = ElementName.Obstacle;
         compteur++;
     }
 }
 private void GenererObjectifOnCurrentChemin(ElementName[,] tab)
 {
     if (currentChemin.Count < 1)
         return;
     int value = Random.Range (0, 4);
     if (value == 3 && !cheminSansObjectif)
     {
         cheminSansObjectif = true;
         return;
     }
     int nbObjectif = 1;
     if (currentChemin.Count > 4)
         nbObjectif += (int)((currentChemin.Count - 5) / 4);
     int securite=0;
     while (nbObjectif>0)
     {
         if(securite++ >20)
         {
             Debug.LogError ("Securité a pris la main!");
             return;
         }
         value = Random.Range (0, currentChemin.Count-1);
         if(tab[currentChemin[value].y, currentChemin[value].x] != ElementName.Chemin)
             continue;
         tab[currentChemin[value].y, currentChemin[value].x] = ElementName.Objectif;
         nbObjectif--;
     }
 }
 private void GenererCheminAvecObjectif(ElementName[,] tab, Point2D posDepart, int nbChangementDirection, int hauteur, int largeur)
 {
     Point2D pos = new Point2D(posDepart.x, posDepart.y);
     int distance, compteurSecurite;
     string direction, currentDir = "E";
     for (int i = 0; i <= nbChangementDirection; i++)
     {
         compteurSecurite = 0;
         do
         {
             compteurSecurite++;
             direction = ChoisirDirection(currentDir);
             distance = DefinirDistance(pos, direction, hauteur, largeur);
             if (compteurSecurite >= 40) break;
         }
         while (!VerifDirection(direction, pos, hauteur, largeur) || !VerifDistance(tab, pos, direction, distance, nbChangementDirection));
         if (compteurSecurite >= 40) continue;
         currentDir = direction;
         AjouterDirection(currentDir);
         pos = DrawChemin(tab, pos, direction, distance);
         GenererObjectifOnCurrentChemin(tab);
         tab[pos.y, pos.x] = ElementName.Orientation;
     }
     tab[pos.y, pos.x] = ElementName.End;
     listActions.Remove (listActions [0]);//On supprime le premier qui n'est pas une direction mais le sens de depart du joueur
 }