Example #1
0
        /// <summary>
        /// Clear all plottables of the same type as the one that is given
        /// </summary>
        public void Clear(IRenderable examplePlottable)
        {
            settings.Plottables.RemoveAll(x => x.GetType() == examplePlottable.GetType());

            if (settings.Plottables.Count == 0)
            {
                settings.ResetAxisLimits();
            }
        }
Example #2
0
        public virtual IFormsRenderer GetRenderer(IRenderable element)
        {
            if (element.Renderer == null)
            {
                //Lookup renderer for type
                IFormsRenderer render = null;
                if (!_renderers.TryGetValue(element.GetType(), out render))
                {
                    throw new RenderException(string.Format("A renderer was not found for type {0}.", element.GetType().FullName));
                }
                element.Renderer = render;
            }

            return(element.Renderer as IFormsRenderer);
        }
Example #3
0
 public static void setScene(IRenderable newScene)
 {
     if (newScene.GetType() == typeof(UIScene))
     {
         currentElement = (UIScene)newScene;
     }
     else
     {
         currentElement = new UIScene(new IRenderable[] { newScene }, new int[][] { new int[] { 1, 1 } }, new string[] { "" }, newScene.Height + 2, newScene.Width + 2);
     }
     Console.WindowWidth  = currentElement.Width;
     Console.WindowHeight = currentElement.Height + 1;
     //Console.BufferHeight = currentElement.Height + 1;
     //Console.BufferWidth = currentElement.Width + 1;
     Console.SetBufferSize(currentElement.Width + 1, currentElement.Height + 1);
 }
Example #4
0
 public static void setScene(IRenderable newScene)
 {
     if (newScene.GetType() == typeof(UIScene))
     {
         currentElement = (UIScene)newScene;
     }
     else
     {
         currentElement = new UIScene(new IRenderable[] { newScene }, new int[][] { new int[] { 1, 1 } }, new string[] { "" }, newScene.Height + 2, newScene.Width + 2);
     }
     Console.WindowWidth = currentElement.Width;
     Console.WindowHeight = currentElement.Height + 1;
     //Console.BufferHeight = currentElement.Height + 1;
     //Console.BufferWidth = currentElement.Width + 1;
     Console.SetBufferSize(currentElement.Width + 1, currentElement.Height + 1);
 }
Example #5
0
        public void EnqueueForRendering(IRenderable obj)
        {
            char[,] objImage = this.images[obj.GetType()];

            int imageRows = objImage.GetLength(0);
            int imageCols = objImage.GetLength(1);

            MatrixCoords objTopLeft = obj.TopLeft;

            int lastRow = Math.Min(objTopLeft.Row + imageRows, this.WorldRows);
            int lastCol = Math.Min(objTopLeft.Col + imageCols, this.WorldCols);

            for (int row = obj.TopLeft.Row; row < lastRow; row++)
            {
                for (int col = obj.TopLeft.Col; col < lastCol; col++)
                {
                    if (row >= 0 && col >= 0)
                    {
                        this.renderMatrix[row, col] = objImage[row - obj.TopLeft.Row, col - obj.TopLeft.Col];
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// Register a renderable object.
        /// </summary>
        public void RegisterRenderable(IRenderable renderable)
        {
            Argument.NotNull(() => renderable);

            if (renderables.Contains(renderable))
            {
                throw new FormattedException("Renderable {TypeName} is already registered.", renderable.GetType().Name);
            }

            this.renderables.Add(renderable);
        }
Example #7
0
 public void Render(IRenderable element)
 {
     if (element is IBlock)
     {
         Render((IBlock)element);
         return;
     }
     if (element is IText)
     {
         Render((IText)element);
         return;
     }
     if (element is INumeric)
     {
         Render((INumeric)element);
         return;
     }
     throw new ArgumentException(string.Format("Unsupported type received in renderer: {0}", element.GetType().FullName));
 }
Example #8
0
        public void ApplyPatches(IRenderable item, RenderObject renderObject, GameObject gameObject, GameObject tableGameObject)
        {
            foreach (var patcher in _patchers)
            {
                var methods = patcher.GetType().GetMembers().Where(member => member.MemberType == MemberTypes.Method);
                foreach (var method in methods)
                {
                    var methodMatchers = Attribute
                                         .GetCustomAttributes(method, typeof(ItemMatchAttribute))
                                         .Select(a => a as ItemMatchAttribute)
                                         .Where(a => a != null);

                    var methodInfo = method as MethodInfo;
                    if (methodInfo != null)
                    {
                        foreach (var methodMatcher in methodMatchers)
                        {
                            var validArgs = true;
                            if (methodMatcher.Matches(_table, item, renderObject, gameObject))
                            {
                                var patcherParamInfos = methodInfo.GetParameters();
                                var patcherParams     = new object[patcherParamInfos.Length];

                                foreach (var pi in patcherParamInfos)
                                {
                                    if (pi.ParameterType == typeof(GameObject))
                                    {
                                        patcherParams[pi.Position] = gameObject;
                                    }
                                    else if (pi.ParameterType == typeof(GameObject).MakeByRefType())
                                    {
                                        if (methodMatcher.Ref == null)
                                        {
                                            Logger.Warn($"No Ref provided in {pi.ParameterType} {pi.Name} in patch method {patcher.GetType()}.{methodInfo.Name}(), skipping (item is of type {item.GetType().Name}).");
                                            validArgs = false;
                                        }
                                        else
                                        {
                                            var goRef = tableGameObject.transform.Find(methodMatcher.Ref);
                                            if (goRef == null)
                                            {
                                                Logger.Warn($"No GameObject named {methodMatcher.Ref} found in {pi.ParameterType} {pi.Name} in patch method {patcher.GetType()}.{methodInfo.Name}(), skipping (item is of type {item.GetType().Name}).");
                                                validArgs = false;
                                            }
                                            else
                                            {
                                                patcherParams[pi.Position] = goRef.gameObject;
                                            }
                                        }
                                    }
                                    else if (pi.ParameterType == typeof(Table))
                                    {
                                        patcherParams[pi.Position] = _table;
                                    }
                                    else if (pi.ParameterType.GetInterfaces().Contains(typeof(IItem)) && item.GetType() == pi.ParameterType)
                                    {
                                        patcherParams[pi.Position] = item;
                                    }
                                    else if (pi.ParameterType == typeof(IRenderable) && item.GetType().GetInterfaces().Contains(typeof(IRenderable)))
                                    {
                                        patcherParams[pi.Position] = item;
                                    }
                                    else
                                    {
                                        Logger.Warn($"Unknown parameter {pi.ParameterType} {pi.Name} in patch method {patcher.GetType()}.{methodInfo.Name}(), skipping (item is of type {item.GetType().Name}).");
                                        validArgs = false;
                                    }
                                }

                                if (validArgs)
                                {
                                    Logger.Info($"Patching element {item.Name} based on match by {patcher.GetType().Name}.{method.Name}");
                                    methodInfo.Invoke(patcher, patcherParams);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #9
0
    public void Render(IRenderable renderable, CommonSet commonSet, IFramebufferHolder framebuffer, CommandList cl,
                       GraphicsDevice device)
    {
        if (cl == null)
        {
            throw new ArgumentNullException(nameof(cl));
        }
        if (commonSet == null)
        {
            throw new ArgumentNullException(nameof(commonSet));
        }
        if (framebuffer == null)
        {
            throw new ArgumentNullException(nameof(framebuffer));
        }
        if (renderable is not EtmWindow window)
        {
            throw new ArgumentException($"{GetType().Name} was passed renderable of unexpected type {renderable?.GetType().Name ?? "null"}", nameof(renderable));
        }

        var tilemap = window.Tilemap;

        cl.PushDebugGroup($"Tiles3D:{tilemap.Name}");

        cl.SetPipeline(tilemap.RendererId == DungeonTilemapPipeline.NoCulling
            ? _nonCullingPipeline.Pipeline
            : _normalPipeline.Pipeline);

        cl.SetGraphicsResourceSet(0, tilemap.ResourceSet.ResourceSet);
        cl.SetGraphicsResourceSet(1, commonSet.ResourceSet);
        cl.SetVertexBuffer(0, _vertexBuffer.DeviceBuffer);
        cl.SetVertexBuffer(1, tilemap.TileBuffer);
        cl.SetIndexBuffer(_indexBuffer.DeviceBuffer, IndexFormat.UInt16);
        cl.SetFramebuffer(framebuffer.Framebuffer);

        cl.DrawIndexed((uint)Cube.Indices.Length, (uint)tilemap.Tiles.Length, 0, 0, 0);
        cl.PopDebugGroup();
    }
        public void EnqueueForRendering(IRenderable obj)
        {
            char[,] objImage = this.images[obj.GetType()];

            int imageRows = objImage.GetLength(0);
            int imageCols = objImage.GetLength(1);

            MatrixCoords objTopLeft = obj.TopLeft;

            int lastRow = Math.Min(objTopLeft.Row + imageRows, this.WorldRows);
            int lastCol = Math.Min(objTopLeft.Col + imageCols, this.WorldCols);

            for (int row = obj.TopLeft.Row; row < lastRow; row++)
            {
                for (int col = obj.TopLeft.Col; col < lastCol; col++)
                {
                    if (row >= 0 && col >= 0)
                    {
                        this.renderMatrix[row, col] = objImage[row - obj.TopLeft.Row, col - obj.TopLeft.Col];
                    }
                }
            }
        }
Example #11
0
        public void Render(IRenderable renderable, CommonSet commonSet, IFramebufferHolder framebuffer, CommandList cl, GraphicsDevice device)
        {
            if (cl == null)
            {
                throw new ArgumentNullException(nameof(cl));
            }
            if (device == null)
            {
                throw new ArgumentNullException(nameof(device));
            }
            if (renderable is not DebugGuiRenderable)
            {
                throw new ArgumentException($"{GetType().Name} was passed renderable of unexpected type {renderable?.GetType().Name ?? "null"}", nameof(renderable));
            }

            _imguiRenderer.Render(device, cl);
            cl.SetFullScissorRects();
        }
Example #12
0
        /// <summary>
        /// Pre-patches are match methods that purely contain the item as parameter
        /// </summary>
        /// <param name="item"></param>
        public void ApplyPrePatches(IRenderable item)
        {
            foreach (var patcher in _patchers)
            {
                var methods = patcher.GetType().GetMembers().Where(member => member.MemberType == MemberTypes.Method);
                foreach (var method in methods)
                {
                    var methodMatchers = Attribute
                                         .GetCustomAttributes(method, typeof(ItemMatchAttribute))
                                         .Select(a => a as ItemMatchAttribute)
                                         .Where(a => a != null);

                    var methodInfo = method as MethodInfo;
                    if (methodInfo != null)
                    {
                        foreach (var methodMatcher in methodMatchers)
                        {
                            var validArgs = true;
                            if (methodMatcher.Matches(_table, item, null))
                            {
                                var patcherParamInfos = methodInfo.GetParameters();
                                var patcherParams     = new object[patcherParamInfos.Length];

                                foreach (var pi in patcherParamInfos)
                                {
                                    if (pi.ParameterType.GetInterfaces().Contains(typeof(IItem)) && item.GetType() == pi.ParameterType)
                                    {
                                        patcherParams[pi.Position] = item;
                                    }
                                    else if (pi.ParameterType == typeof(IRenderable) && item.GetType().GetInterfaces().Contains(typeof(IRenderable)))
                                    {
                                        patcherParams[pi.Position] = item;
                                    }
                                    else
                                    {
                                        validArgs = false;
                                    }
                                }

                                if (validArgs)
                                {
                                    Logger.Info($"Patching element {item.Name} based on match by {patcher.GetType().Name}.{method.Name}");
                                    methodInfo.Invoke(patcher, patcherParams);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #13
0
        /// <summary>
        /// This method checks if the given renderable should be handled by the layer.
        /// </summary>
        /// <param name="renderable">The renderable.</param>
        /// <returns>True if the renderable should be handled by the layer.</returns>
        protected virtual bool MatchRenderable(IRenderable renderable)
        {
            var result = this.RenderableTypes.FirstOrDefault(e => e.IsAssignableFrom(renderable.GetType())) != null;

            var namable = renderable as INamable;
            if (result == true && String.IsNullOrEmpty(this.StartsWithName) == false)
            {
                result = namable != null && String.IsNullOrEmpty(namable.Name) == false && namable.Name.StartsWith(this.StartsWithName);
            }

            return result;
        }