/// <summary> /// Creates a new instance. /// </summary> /// <param name="parent">The parent block container</param> /// <param name="xpos">The X-coordinate within the region</param> /// <param name="zpos">The Z-coordinate within the region</param> /// <param name="layers">The default layers. Can be 'null'</param> public Chunk(IBlockContainer parent, int xpos, int zpos, DefaultLayers layers) { Parent = parent; _xPos = xpos; _zPos = zpos; // Set default blocks if (layers == null) { return; } // Iterate layers for (int y = 0; y < World.MaxHeight; y++) { Block material = layers.GetLayer(y); if (material == null) { continue; } // Iterate area for (int x = 0; x < BlocksPerChunkSide; x++) { for (int z = 0; z < BlocksPerChunkSide; z++) { // Set Block SetBlock(new Position(x, y, z), material); } } } }
public Region(IBlockContainer parent, int xPos, int zPos, DefaultLayers layers) { _parent = parent; X = xPos; Z = zPos; _layers = layers; }
public async Task <IHtmlContent> ToHtmlContentAsync(IBlockContainer element, IEnumerable <string> templates, IHtmlHelper htmlHelper) { using var writer = new StringWriter(CultureInfo.CurrentCulture); await RenderCoreAsync(element, templates, htmlHelper, writer); return(new HtmlString(writer.ToString())); }
private static void CheckContainer(IBlockContainer container) { foreach (var path in container.Paths()) { bool blockReturns = false; for (int i = path.Block.Statements.Length - 1; i >= 0; i--) { if (path.Block.Statements[i] is ReturnNode) { blockReturns = true; break; } if (path.Block.Statements[i] is IBlockContainer) { if (((IBlockContainer)path.Block.Statements[i]).Paths().Any(containerPath => containerPath.WillRun)) { blockReturns = true; } CheckContainer((IBlockContainer)path.Block.Statements[i]); } } if (!blockReturns) { throw new SyntaxErrorException("Path does not return a value.", path.ErrorRange); } } }
private static void CheckContainer(ScriptFile script, IBlockContainer container) { foreach (var path in container.GetPaths()) { CheckPath(script, path); } }
public byte GetSkyLightFromParent(IBlockContainer blockChild, Position child) { int x = Region.BlocksPerRegionSize * ((Region)blockChild).X + (int)child.X; int z = Region.BlocksPerRegionSize * ((Region)blockChild).Z + (int)child.Z; return(GetSkyLight(new Position(x, child.Y, z))); }
protected void RenderByChildAction(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper, TextWriter textWriter) { Guard.NotNull(element, nameof(element)); Guard.NotNull(templates, nameof(templates)); Guard.NotNull(htmlHelper, nameof(htmlHelper)); Guard.NotNull(textWriter, nameof(textWriter)); var routeInfo = templates.Select(x => GetRoute(element, x)).FirstOrDefault(); if (routeInfo == null) { throw new InvalidOperationException("The return value of the 'GetRoute()' method cannot be NULL."); } //routeInfo.RouteValues["model"] = element.Block; var originalWriter = htmlHelper.ViewContext.Writer; htmlHelper.ViewContext.Writer = textWriter; using (new ActionDisposable(() => htmlHelper.ViewContext.Writer = originalWriter)) { htmlHelper.RenderAction(routeInfo.Action, routeInfo.Controller, routeInfo.RouteValues); } }
private void CheckContainer(IBlockContainer container) { foreach (var path in container.GetPaths()) { CheckPath(path); } }
public IHtmlString ToHtmlString(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper) { using (var writer = new StringWriter(CultureInfo.CurrentCulture)) { RenderCore(element, templates, htmlHelper, writer); return(MvcHtmlString.Create(writer.ToString())); } }
protected virtual Task RenderByComponentAsync(IBlockContainer element, IEnumerable <string> templates, IHtmlHelper htmlHelper, TextWriter textWriter) { Guard.NotNull(element, nameof(element)); Guard.NotNull(templates, nameof(templates)); Guard.NotNull(htmlHelper, nameof(htmlHelper)); Guard.NotNull(textWriter, nameof(textWriter)); // TODO: (core) Implement BlockHandlerBase.RenderByComponentAsync() throw new NotImplementedException(); }
public Section(IBlockContainer parent, int y) { _parent = parent; Y = y; // Set default transparency for (int i = 0; i < _transparency.Length; i++) { _transparency[i] = World.DefaultTransparency; } }
private void DrawBlock(int row, int col, IBlockContainer group) { Block block = group.Blocks[row, col]; //we only draw swapping blocks inside blockgroups if (block != null && block.IsSwapping && group == this) { return; } if (block != null && !block.IsEmpty && !(block.State == BlockState.Suspend)) { blockSprite.X = group.OffsetX + col * _CellWidth; blockSprite.Y = group.OffsetY + row * _CellHeight; if (block.IsExploding) { blockSprite.Animation.CurrentFrame = 4; blockSprite.Draw(); } switch (block.Type) { case BlockType.Yellow: blockSprite.Animation.CurrentFrame = 0; break; case BlockType.Red: blockSprite.Animation.CurrentFrame = 1; break; case BlockType.Blue: blockSprite.Animation.CurrentFrame = 2; break; case BlockType.Green: blockSprite.Animation.CurrentFrame = 3; break; case BlockType.White: blockSprite.Animation.CurrentFrame = 4; break; } blockSprite.Draw(block.Color); } }
protected void RenderByView(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper, TextWriter textWriter) { Guard.NotNull(element, nameof(element)); Guard.NotNull(templates, nameof(templates)); Guard.NotNull(htmlHelper, nameof(htmlHelper)); Guard.NotNull(textWriter, nameof(textWriter)); var viewContext = htmlHelper.ViewContext; if (!element.Metadata.IsInbuilt) { // Change "area" token in RouteData in order to begin search in the plugin's view folder. var originalRouteData = htmlHelper.ViewContext.RouteData; var routeData = new RouteData(originalRouteData.Route, originalRouteData.RouteHandler); routeData.Values.Merge(originalRouteData.Values); routeData.DataTokens["area"] = element.Metadata.AreaName; viewContext = new ViewContext { RouteData = routeData, RequestContext = htmlHelper.ViewContext.RequestContext }; } var viewResult = FindFirstView(element.Metadata, templates, viewContext, out var searchedLocations); if (viewResult == null) { var msg = string.Format("No template found for '{0}'. Searched locations:\n{1}.", string.Join(", ", templates), string.Join("\n", searchedLocations)); Logger.Debug(msg); throw new FileNotFoundException(msg); } var viewData = new ViewDataDictionary(element.Block); viewData.TemplateInfo.HtmlFieldPrefix = "Block"; viewContext = new ViewContext( htmlHelper.ViewContext, viewResult.View, viewData, htmlHelper.ViewContext.TempData, textWriter); viewResult.View.Render(viewContext, textWriter); }
public byte GetSkyLightFromParent(IBlockContainer blockChild, Position child) { int x = ((Chunk)blockChild).X * Chunk.BlocksPerChunkSide + (int)child.X; int z = ((Chunk)blockChild).Z * Chunk.BlocksPerChunkSide + (int)child.Z; // Same region? if (x >= 0 && x < BlocksPerRegionSize && z >= 0 && z < BlocksPerRegionSize) { return(GetSkyLight(new Position(x, child.Y, z))); } else { // Pass to parent return(_parent.GetSkyLightFromParent(this, new Position(x, child.Y, z))); } }
private static ActionContext GetActionContextFor(IBlockContainer element, ActionContext originalContext) { if (element.Metadata.IsInbuilt) { return(originalContext); } // Change "area" token in RouteData in order to begin search in the module's view folder. var originalRouteData = originalContext.RouteData; var routeData = new RouteData(originalRouteData); routeData.Values.Merge(originalRouteData.Values); routeData.DataTokens["area"] = element.Metadata.AreaName; // TODO: (core) Check whether DataTokens["area"] is still the right place for Area replacement in AspNetCore. return(new ActionContext { RouteData = routeData, HttpContext = originalContext.HttpContext, ActionDescriptor = originalContext.ActionDescriptor }); }
protected Task RenderByViewAsync(IBlockContainer element, IEnumerable <string> templates, IHtmlHelper htmlHelper, TextWriter textWriter) { Guard.NotNull(element, nameof(element)); Guard.NotNull(templates, nameof(templates)); Guard.NotNull(htmlHelper, nameof(htmlHelper)); Guard.NotNull(textWriter, nameof(textWriter)); var actionContext = GetActionContextFor(element, htmlHelper.ViewContext); var viewResult = FindFirstView(element.Metadata, templates, actionContext, out var searchedLocations); if (viewResult == null) { var msg = string.Format("No template found for '{0}'. Searched locations:\n{1}.", string.Join(", ", templates), string.Join("\n", searchedLocations)); Logger.Debug(msg); throw new FileNotFoundException(msg); } var mvcViewOptions = actionContext.HttpContext.RequestServices.GetRequiredService <IOptions <MvcViewOptions> >(); var modelMetadataProvider = actionContext.HttpContext.RequestServices.GetRequiredService <IModelMetadataProvider>(); var viewData = new ViewDataDictionary(modelMetadataProvider, htmlHelper.ViewContext.ModelState) { Model = element.Block }; viewData.TemplateInfo.HtmlFieldPrefix = "Block"; var viewContext = new ViewContext( htmlHelper.ViewContext, viewResult.View, viewData, htmlHelper.ViewContext.TempData, textWriter, mvcViewOptions.Value.HtmlHelperOptions); return(viewResult.View.RenderAsync(viewContext)); }
public byte GetSkyLightFromParent(IBlockContainer block, Position child) { if (child == null) { throw new ArgumentNullException(nameof(child)); } if (block == null) { throw new ArgumentNullException(nameof(block)); } // Get total y int y = ((Section)block).Y * Section.SectionHeight + (int)child.Y; if (y >= World.MaxHeight) { return(World.DefaultSkyLight); } if (y < 0) { return(0); } // Which chunk? if (child.X >= 0 && child.X < BlocksPerChunkSide && child.Z >= 0 && child.Z < BlocksPerChunkSide) { // Same chunk return(GetSkyLight(new Position(child.X, y, child.Z))); } else { return(Parent.GetSkyLightFromParent(this, new Position(child.X, y, child.Z))); } }
/// <summary> /// Link the copied data stream to another block /// </summary> public void LinkSecondlyTo(IBlockContainer <T> other) { LinkBlockToContainer(this.CopiedOutputBlock, other); }
public byte GetSkyLightFromParent(IBlockContainer child, Position pos) { return(IsInBounds(pos) ? GetSkyLight(pos) : _parent.GetSkyLightFromParent(this, pos)); }
public void Render(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper) { RenderCore(element, templates, htmlHelper, htmlHelper.ViewContext.Writer); }
protected void RenderByChildAction(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper, TextWriter textWriter) { Guard.NotNull(element, nameof(element)); Guard.NotNull(templates, nameof(templates)); Guard.NotNull(htmlHelper, nameof(htmlHelper)); Guard.NotNull(textWriter, nameof(textWriter)); var routeInfo = templates.Select(x => GetRoute(element, x)).FirstOrDefault(); if (routeInfo == null) { throw new InvalidOperationException("The return value of the 'GetRoute()' method cannot be NULL."); } var routeValues = routeInfo.RouteValues; routeValues["action"] = routeInfo.Action; routeValues["controller"] = routeInfo.Controller; VirtualPathData vpd = GetVirtualPathForArea(htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, null /* name */, routeValues, out var usingAreas); if (vpd == null) { throw new InvalidOperationException("Could not find any matching route."); } if (usingAreas) { routeValues.Remove("area"); } var routeData = CreateRouteData(vpd.Route, routeValues, vpd.DataTokens, htmlHelper.ViewContext); var httpContext = htmlHelper.ViewContext.HttpContext; var requestContext = new RequestContext(httpContext, routeData); // Create the controller instance var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, routeInfo.Controller) as Controller; if (controller == null) { throw new InvalidOperationException($"Could not activate controller '{routeInfo.Controller}'. Please ensure that the controller class exists and inherits from '{typeof(Controller).FullName}'."); } var originalWriter = htmlHelper.ViewContext.Writer; htmlHelper.ViewContext.Writer = textWriter; var originalOutput = httpContext.Response.Output; httpContext.Response.Output = textWriter; var originalActionInvoker = controller.ActionInvoker; controller.ActionInvoker = new ActionInvokerWithResultValidator(); void endRender() { htmlHelper.ViewContext.Writer = originalWriter; httpContext.Response.Output = originalOutput; controller.ActionInvoker = originalActionInvoker; } using (new ActionDisposable((Action)endRender)) { ((IController)controller).Execute(requestContext); } }
//protected void RenderByChildAction(IBlockContainer element, IEnumerable<string> templates, HtmlHelper htmlHelper, TextWriter textWriter) // { // Guard.NotNull(element, nameof(element)); // Guard.NotNull(templates, nameof(templates)); // Guard.NotNull(htmlHelper, nameof(htmlHelper)); // Guard.NotNull(textWriter, nameof(textWriter)); // var routeInfo = templates.Select(x => GetRoute(element, x)).FirstOrDefault(); // if (routeInfo == null) // { // throw new InvalidOperationException("The return value of the 'GetRoute()' method cannot be NULL."); // } // //routeInfo.RouteValues["model"] = element.Block; // var originalWriter = htmlHelper.ViewContext.Writer; // htmlHelper.ViewContext.Writer = textWriter; // using (new ActionDisposable(() => htmlHelper.ViewContext.Writer = originalWriter)) // { // htmlHelper.RenderAction(routeInfo.Action, routeInfo.Controller, routeInfo.RouteValues); // } // } #endregion protected virtual RouteInfo GetRoute(IBlockContainer element, string template) => throw new NotImplementedException();
protected virtual void RenderCore(IBlockContainer element, IEnumerable <string> templates, HtmlHelper htmlHelper, TextWriter textWriter) { RenderByView(element, templates, htmlHelper, textWriter); }
private bool InBounds(int r, int c, IBlockContainer container) { return (r >= 0 && r < container.NumRows && c >= 0 && c < container.NumCols); }
public Task RenderAsync(IBlockContainer element, IEnumerable <string> templates, IHtmlHelper htmlHelper) { return(RenderCoreAsync(element, templates, htmlHelper, htmlHelper.ViewContext.Writer)); }
protected virtual Task RenderCoreAsync(IBlockContainer element, IEnumerable <string> templates, IHtmlHelper htmlHelper, TextWriter textWriter) { return(RenderByViewAsync(element, templates, htmlHelper, textWriter)); }
private bool InBounds(int r, int c, IBlockContainer container) { return(r >= 0 && r < container.NumRows && c >= 0 && c < container.NumCols); }
public virtual void AfterSave(IBlockContainer container, IBlockEntity entity) { // Default impl does nothing. }
public virtual void BeforeRender(IBlockContainer container, StoryViewMode viewMode, IBlockHtmlParts htmlParts) { // Default impl does nothing. }