public override void Initialize() { base.Initialize(); IoCManager.InjectDependencies(this); DrawingNode = new Godot.Node2D() { Name = "EffectSystem", }; sceneTree.WorldRoot.AddChild(DrawingNode); UnshadedMaterial = new Godot.CanvasItemMaterial() { LightMode = Godot.CanvasItemMaterial.LightModeEnum.Unshaded }; ShadedMaterial = new Godot.CanvasItemMaterial(); ShadedCanvasItem = VS.CanvasItemCreate(); VS.CanvasItemSetParent(ShadedCanvasItem, DrawingNode.GetCanvasItem()); VS.CanvasItemSetMaterial(ShadedCanvasItem, ShadedMaterial.GetRid()); UnshadedCanvasItem = VS.CanvasItemCreate(); VS.CanvasItemSetParent(UnshadedCanvasItem, DrawingNode.GetCanvasItem()); VS.CanvasItemSetMaterial(UnshadedCanvasItem, UnshadedMaterial.GetRid()); }
public void AddOverlay(Overlay overlay) { if (_overlays.ContainsKey(overlay.ID)) { throw new InvalidOperationException($"We already have an overlay with ID '{overlay.ID}'"); } _overlays.Add(overlay.ID, overlay); if (GameController.OnGodot) { Godot.RID parent; switch (overlay.Space) { case OverlaySpace.ScreenSpace: parent = RootNodeScreen.GetCanvasItem(); break; case OverlaySpace.WorldSpace: parent = RootNodeWorld.GetCanvasItem(); break; case OverlaySpace.ScreenSpaceBelowWorld: parent = RootNodeScreenBelowWorld.GetCanvasItem(); break; default: throw new NotImplementedException($"Unknown overlay space: {overlay.Space}"); } var item = VS.CanvasItemCreate(); VS.CanvasItemSetParent(item, parent); overlay.AssignCanvasItem(item); _canvasItems.Add(overlay, item); } }