Example #1
0
 private void WriteChildren(ChildPosition position, TextWriter writer)
 {
     foreach (IElement child in _data.Children
              .Where(x => x.Position == position)
              .Select(x => x.Element))
     {
         child.Write(writer);
     }
 }
 public void AddChild(Gtk.Widget child, ChildPosition position)
 {
     child.Parent = this;
     child.Show();
     children.Add(new SmartScrolledWindowContainerChild(this, child)
     {
         ChildPosition = position
     });
 }
Example #3
0
 public Segment(Planet planetInfo, TriangleD noElevationRange, Segment parentChunk, ulong id, ChildPosition childPosition = ChildPosition.NoneNoParent)
 {
     ID = id;
     this.planetInfo                   = planetInfo;
     this.parent                       = parentChunk;
     this.childPosition                = childPosition;
     this.NoElevationRange             = noElevationRange;
     this.rangeToCalculateScreenSizeOn = noElevationRange;
 }
Example #4
0
        void AddChild(Vector3d a, Vector3d b, Vector3d c, ChildPosition cp, ulong id)
        {
            var range = new TriangleD()
            {
                a = a,
                b = b,
                c = c
            };
            var child = new Segment(planetInfo, range, this, this.ID << 2 | id);

            Children.Add(child);
            child.subdivisionDepth             = subdivisionDepth + 1;
            child.rangeToCalculateScreenSizeOn = range;
        }
    private void AddChild(Vector3 a, Vector3 b, Vector3 c, Vector3 d, ChildPosition cp, ushort index)
    {
        var range = new Range()
        {
            a = a,
            b = b,
            c = c,
            d = d,
        };

        var child = Create(
            planet: planet,
            parent: this,
            range: range,
            id: id << 2 | index,
                treeDepth: treeDepth + 1,
                childPosition: cp
            );

        children.Add(child);
    }
    public static Chunk Create(Planet planet, Range range, ulong id, Chunk parent = null, int treeDepth = 0, ChildPosition childPosition = ChildPosition.NoneNoParent)
    {
        MyProfiler.BeginSample("Procedural Planet / Create chunk");

        var chunk = new Chunk();

        chunk.planet        = planet;
        chunk.id            = id;
        chunk.parent        = parent;
        chunk.treeDepth     = treeDepth;
        chunk.childPosition = childPosition;
        chunk.rangeUnitCubePosRealSubdivided = range;

        //chunk.rangePosToGenerateInto = new Range
        //{
        //	a = chunk.rangeUnitCubePos.a.normalized * planet.planetConfig.radiusStart,
        //	b = chunk.rangeUnitCubePos.b.normalized * planet.planetConfig.radiusStart,
        //	c = chunk.rangeUnitCubePos.c.normalized * planet.planetConfig.radiusStart,
        //	d = chunk.rangeUnitCubePos.d.normalized * planet.planetConfig.radiusStart,
        //};

        if (chunk.chunkConfig.useSkirts)
        {
            var ratio  = ((chunk.chunkConfig.numberOfVerticesOnEdge - 1) / 2.0f) / ((chunk.chunkConfig.numberOfVerticesOnEdge - 1 - 2) / 2.0f);
            var center = chunk.rangeUnitCubePosRealSubdivided.CenterPos;
            var a      = chunk.rangeUnitCubePosRealSubdivided.a - center;
            var b      = chunk.rangeUnitCubePosRealSubdivided.b - center;
            var c      = chunk.rangeUnitCubePosRealSubdivided.c - center;
            var d      = chunk.rangeUnitCubePosRealSubdivided.d - center;
            chunk.rangeUnitCubePosToGenerateInto.a = a * ratio + center;
            chunk.rangeUnitCubePosToGenerateInto.b = b * ratio + center;
            chunk.rangeUnitCubePosToGenerateInto.c = c * ratio + center;
            chunk.rangeUnitCubePosToGenerateInto.d = d * ratio + center;
        }
        else
        {
            chunk.rangeUnitCubePosToGenerateInto = chunk.rangeUnitCubePosRealSubdivided;
        }


        chunk.rangePosToCalculateScreenSizeOn = new Range
        {
            a = chunk.rangeUnitCubePosToGenerateInto.a.normalized * planet.planetConfig.radiusStart,
            b = chunk.rangeUnitCubePosToGenerateInto.b.normalized * planet.planetConfig.radiusStart,
            c = chunk.rangeUnitCubePosToGenerateInto.c.normalized * planet.planetConfig.radiusStart,
            d = chunk.rangeUnitCubePosToGenerateInto.d.normalized * planet.planetConfig.radiusStart,
        };

        chunk.chunkRadius = chunk.rangePosToCalculateScreenSizeOn.ToBoundingSphere().radius;


        //chunk.rangeDirToGenerateInto = new Range
        //{
        //	a = chunk.rangePosToGenerateInto.a.normalized,
        //	b = chunk.rangePosToGenerateInto.b.normalized,
        //	c = chunk.rangePosToGenerateInto.c.normalized,
        //	d = chunk.rangePosToGenerateInto.d.normalized,
        //};


        //chunk.rangeLocalPosToGenerateInto = new Range
        //{
        //	a = chunk.rangePosToGenerateInto.a - chunk.offsetFromPlanetCenter,
        //	b = chunk.rangePosToGenerateInto.b - chunk.offsetFromPlanetCenter,
        //	c = chunk.rangePosToGenerateInto.c - chunk.offsetFromPlanetCenter,
        //	d = chunk.rangePosToGenerateInto.d - chunk.offsetFromPlanetCenter,
        //};

        chunk.chunkRangeMaxAngleDeg = Mathf.Max(
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.a, chunk.rangeUnitCubePosToGenerateInto.b),
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.b, chunk.rangeUnitCubePosToGenerateInto.c),
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.c, chunk.rangeUnitCubePosToGenerateInto.d),
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.d, chunk.rangeUnitCubePosToGenerateInto.a),
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.a, chunk.rangeUnitCubePosToGenerateInto.c),
            Vector3.Angle(chunk.rangeUnitCubePosToGenerateInto.b, chunk.rangeUnitCubePosToGenerateInto.d)
            );

        chunk.offsetFromPlanetCenter = chunk.rangeUnitCubePosToGenerateInto.CenterPos.normalized * planet.planetConfig.radiusStart;

        MyProfiler.EndSample();

        return(chunk);
    }
 public bool UnregisterElement( ChildPosition positionToRemove, IHighlightableElement element )
 {
     if( positionToRemove == ChildPosition.Pre )
     {
         return _preChildren.Remove( element );
     }
     else if( positionToRemove == ChildPosition.Post )
     {
         return _postChildren.Remove( element );
     }
     return false;
 }
        /// <summary>
        /// Adds an element at the beginning or the end of the child list.
        /// An element can be added only once for a given position.
        /// </summary>
        /// <remarks>For ChildPosition.Pre, the element is added to the position 0 of the list, for ChildPosition.Post is added at the end</remarks>
        /// <param name="position"></param>
        /// <param name="child"></param>
        /// <returns>Returns true if the element could be added and did not exist yet. Otherwise false</returns>
        public bool RegisterElementAt( ChildPosition position, IHighlightableElement child )
        {
            if( child == null ) throw new ArgumentNullException( "child" );

            if( position == ChildPosition.Pre )
            {
                if( _preChildren.Contains( child ) ) return false;
                _preChildren.Insert( 0, child );
                return true;
            }
            else if( position == ChildPosition.Post )
            {
                if( _postChildren.Contains( child ) ) return false;
                _postChildren.Add( child );
                return true;
            }
            return false;
        }
Example #9
0
        /// <summary>
        /// Enables unregistering a tree node (and its children) that had been registered inside an already registered module (see <see cref="RegisterInRegisteredElementAt"/> )
        /// </summary>
        /// <param name="targetModuleName">The name of the target module</param>
        /// <param name="extensibleElementName">The name of the target node</param>
        /// <param name="position"></param>
        /// <param name="element">The element to unregister</param>
        /// <returns></returns>
        public bool UnregisterInRegisteredElement( string targetModuleName, string extensibleElementName, ChildPosition position, IHighlightableElement element )
        {
            IHighlightableElement registeredElement;
            if( _registeredElements.TryGetValue( targetModuleName, out registeredElement ) )
            {
                _scrollingStrategy.ElementUnregistered( element );

                return BrowseTree( registeredElement, e =>
                {
                    IExtensibleHighlightableElement extensibleElement = e as IExtensibleHighlightableElement;
                    if( extensibleElement != null && extensibleElement.Name == extensibleElementName ) return extensibleElement.UnregisterElement( position, element );
                    else return false;
                } );
            }

            return false;
        }
Example #10
0
 public ElementChild(IElement element, ChildPosition position)
 {
     Element  = element ?? throw new ArgumentNullException(nameof(element));
     Position = position;
 }
Example #11
0
 public IElement <TTag> Html(string html, ChildPosition position = ChildPosition.AfterOpening) =>
 Clone(_data.Child(new ContentElement(Tag.Helper.Adapter.Writer, html, false), position));
Example #12
0
 public IElement <TTag> Text(object text, ChildPosition position = ChildPosition.AfterOpening) =>
 Clone(_data.Child(new ContentElement(Tag.Helper.Adapter.Writer, text?.ToString(), true), position));
Example #13
0
 public IElement <TTag> Child(IElement child, ChildPosition position = ChildPosition.AfterOpening) =>
 Clone(_data.Child(child, position));
Example #14
0
 public void AddChild(Widget child, ChildPosition position)
 {
     AddChild(child);
     positions[child] = position;
 }
Example #15
0
 public ParentIndiciesEnumerator(Segment parentChunk, ChildPosition myPos)
 {
     this.parentChunk = parentChunk;
     this.myPos       = myPos;
     Reset();
 }
		public void AddChild (Gtk.Widget child, ChildPosition position)
		{
			child.Parent = this;
			child.Show ();
			children.Add (new SmartScrolledWindowContainerChild (this, child) { ChildPosition = position });
		}
Example #17
0
 public ElementData Child(IElement child, ChildPosition position) =>
 child == null ? this : new ElementData(this, children: Children.Add(new ElementChild(child, position)));