Ejemplo n.º 1
0
        protected override ITextureResource PrepareDefaultTexture(Type thisType)
        {
            var texturePath = GenerateTexturePath(thisType);

            this.TextureResourceObjectBroken = new TextureResource(texturePath + "Broken");
            return(new TextureResource(texturePath));
        }
Ejemplo n.º 2
0
        public WeaponFireTracePreset(
            string traceTexturePath,
            IReadOnlyWeaponHitSparksPreset hitSparksPreset,
            double traceSpeed,
            ushort traceSpriteWidthPixels,
            int traceStartOffsetPixels,
            double traceStartScaleSpeedExponent = 1.0,
            double traceEndFadeOutExponent      = 1.0,
            bool useScreenBlending    = false,
            bool?drawHitSparksAsLight = null)
        {
            this.TraceTexture = traceTexturePath is not null
                                    ? new TextureResource(traceTexturePath, isTransparent: true)
                                    : null;

            this.TraceSpeed      = traceSpeed;
            this.HitSparksPreset = hitSparksPreset;

            this.TraceStartScaleSpeedExponent = traceStartScaleSpeedExponent;
            this.TraceEndFadeOutExponent      = traceEndFadeOutExponent;

            this.TraceWorldLength      = traceSpriteWidthPixels / 256.0;
            this.TraceStartWorldOffset = traceStartOffsetPixels / 256.0;

            this.TraceMinDistance = this.TraceWorldLength * 0.5;

            this.UseScreenBlending = useScreenBlending;

            this.DrawHitSparksAsLight = drawHitSparksAsLight ?? this.HasTrace;
        }
Ejemplo n.º 3
0
        public ObjectSafeArmored()
        {
            var texturePath = this.GenerateTexturePath();

            this.textureResourceBase = new TextureResource(texturePath + "Base");
            this.textureResourceSafe = new TextureResource(texturePath);
        }
Ejemplo n.º 4
0
        public static HUDNotificationControl Create(
            string title,
            string message,
            Brush brushBackground,
            Brush brushForeground,
            ITextureResource icon,
            Action onClick,
            bool autoHide,
            SoundResource soundToPlay)
        {
            var iconBrush = icon != null
                                ? Api.Client.UI.GetTextureBrush(icon)
                                : null;

            return(new HUDNotificationControl()
            {
                ViewModel = new ViewModelHUDNotificationControl(
                    title,
                    message,
                    brushBackground,
                    brushForeground,
                    iconBrush,
                    onClick),
                IsAutoHide = autoHide,
                soundToPlay = soundToPlay
            });
        }
Ejemplo n.º 5
0
        public ObjectWell()
        {
            var texturePath = this.GenerateTexturePath();

            this.textureResourceBack  = new TextureResource(texturePath + "Back");
            this.textureResourceFront = new TextureResource(texturePath + "Front");
        }
Ejemplo n.º 6
0
        public static HUDNotificationControl ClientShowNotification(
            string title,
            string message          = null,
            NotificationColor color = NotificationColor.Neutral,
            ITextureResource icon   = null,
            Action onClick          = null,
            bool autoHide           = true,
            bool playSound          = true)
        {
            Api.ValidateIsClient();
            var(brushBackground, brushBorder) = GetBrush(color);
            var soundToPlay = playSound
                                  ? GetSound(color)
                                  : null;

            return(HUDNotificationsPanelControl.Show(
                       title,
                       message,
                       brushBackground,
                       brushBorder,
                       icon,
                       onClick,
                       autoHide,
                       soundToPlay));
        }
Ejemplo n.º 7
0
        protected override ITextureResource ClientCreateIcon()
        {
            ITextureResource[] textureResources;
            if (this.IsHorizontalDoorOnly ?? true)
            {
                textureResources = new ITextureResource[]
                {
                    // closed door
                    this.TextureBaseHorizontal,
                    // horizontal base
                    this.AtlasTextureHorizontal.Chunk(0, 0)
                };
            }
            else
            {
                // vertical door
                textureResources = new ITextureResource[]
                {
                    // closed door
                    this.AtlasTextureVertical.Chunk(0, 0),
                    // vertical base
                    this.AtlasTextureVertical.Chunk((byte)(this.AtlasTextureVertical.AtlasSize.ColumnsCount - 1), 0)
                };
            }

            return(new ProceduralTexture(
                       "Composed " + this.Id,
                       generateTextureCallback: request => ClientComposeIcon(request, textureResources),
                       isTransparent: true,
                       isUseCache: true,
                       dependsOn: textureResources));
        }
Ejemplo n.º 8
0
        protected override ITextureResource ClientCreateIcon()
        {
            if (this.IsHorizontalDoorOnly ?? true)
            {
                var textureResources = new ITextureResource[]
                {
                    // closed door
                    this.TextureBaseHorizontal,
                    // horizontal base
                    this.AtlasTextureHorizontal.Chunk(0, 0)
                };

                return(new ProceduralTexture(
                           "Composed " + this.Id,
                           generateTextureCallback: request => ClientComposeHorizontalDoor(request, textureResources),
                           isTransparent: true,
                           isUseCache: true,
                           dependsOn: textureResources));
            }

            // vertical door
            var atlas       = this.AtlasTextureVertical;
            var columnChunk = (byte)(atlas.AtlasSize.ColumnsCount - 1);

            return(ClientProceduralTextureHelper.CreateComposedTexture(
                       "Composed vertical door blueprint " + this.Id,
                       isTransparent: true,
                       isUseCache: true,
                       textureResources: new ITextureResource[]
            {
                atlas.Chunk(columnChunk, 0),                 // door base
                atlas.Chunk((byte)(columnChunk - 1), 0),     // door front part
                atlas.Chunk(0, 0)                            // door back part (closed)
            }));
        }
Ejemplo n.º 9
0
        public ObjectDisplayCaseLarge()
        {
            var texturePath = this.GenerateTexturePath();

            this.textureResourceFront = new TextureResource(texturePath + "Front");
            this.textureResourceBack  = new TextureResource(texturePath + "Back");
        }
Ejemplo n.º 10
0
 static BaseEditorTool()
 {
     TextureFilterAll           = new TextureResource("Editor/DefaultFilterIcon");
     DefaultFiltersReadOnlyList =
         new List <EditorToolItemFilter>
     {
         new("All", TextureFilterAll)
     }.AsReadOnly();
        protected override ITextureResource PrepareDefaultTexture(Type thisType)
        {
            var folderPath = SharedGetRelativeFolderPath(thisType, typeof(ProtoObjectProp));
            var spritePath = $"StaticObjects/Props/{folderPath}/{thisType.Name}";

            this.frontTexture = new TextureResource(spritePath + "Front");
            return(new TextureResource(spritePath));
        }
        private IHudNotificationControl ShowInternal(
            string title,
            string message,
            Brush brushBackground,
            Brush brushBorder,
            ITextureResource icon,
            Action onClick,
            bool autoHide,
            SoundResource soundToPlay,
            bool writeToLog)
        {
            if (writeToLog)
            {
                Api.Logger.Important(
                    string.Format(
                        "Showing notification:{0}Title: {1}{0}Message: {2}",
                        Environment.NewLine,
                        title,
                        message));
            }

            var notificationControl = HudNotificationControl.Create(
                title,
                message,
                brushBackground,
                brushBorder,
                icon,
                onClick,
                autoHide,
                soundToPlay);

            var instance = this;

            if (notificationControl.IsAutoHide)
            {
                instance.HideSimilarNotifications(notificationControl);
            }

            instance.stackPanelChildren.Add(notificationControl);

            if (notificationControl.IsAutoHide)
            {
                // hide the notification control after delay
                ClientTimersSystem.AddAction(
                    NotificationHideDelaySeconds,
                    () =>
                {
                    if (notificationControl.IsAutoHide)     // still configured as auto hide
                    {
                        notificationControl.Hide(quick: false);
                    }
                });
            }

            instance.HideOldNotificationsIfTooManyDisplayed();

            return(notificationControl);
        }
Ejemplo n.º 13
0
        public static void Create(
            Vector2D sourcePosition,
            Vector2D targetPosition,
            double traceStartWorldOffset,
            ITextureResource texture,
            double beamWidth,
            Vector2D originOffset,
            double duration,
            bool endsWithHit,
            double fadeInDistance,
            double fadeOutDistanceHit,
            double fadeOutDistanceNoHit,
            BlendMode blendMode)
        {
            var deltaPos        = targetPosition - sourcePosition;
            var length          = deltaPos.Length;
            var fadeInFraction  = fadeInDistance / length;
            var fadeOutFraction = endsWithHit
                                      ? fadeOutDistanceHit / length
                                      : fadeOutDistanceNoHit / length;

            if (fadeInFraction > 0.333 ||
                fadeOutFraction > 0.333)
            {
                // no sense in displaying such a short beam
                return;
            }

            var sceneObject = Client.Scene.CreateSceneObject(nameof(ComponentWeaponEnergyBeam));
            var component   = sceneObject.AddComponent <ComponentWeaponEnergyBeam>();

            ComponentWeaponTrace.CalculateAngleAndDirection(deltaPos,
                                                            out var angleRad,
                                                            out var normalizedRay);

            // offset start position of the ray
            sourcePosition += normalizedRay * traceStartWorldOffset;

            sceneObject.Position = sourcePosition;

            component.beamOriginOffset = originOffset;
            component.beamWidth        = beamWidth;
            component.primaryRendererDefaultPositionOffset = Vector2D.Zero;
            component.spriteRendererLine.TextureResource   = texture;
            component.targetPosition = targetPosition;
            component.duration       = duration;

            component.renderingMaterial
            .EffectParameters
            .Set("Length", (float)length)
            .Set("FadeInFraction", (float)fadeInFraction)
            .Set("FadeOutFraction", (float)fadeOutFraction);

            component.spriteRendererLine.BlendMode = blendMode;

            component.Update(0);
        }
Ejemplo n.º 14
0
 public TextureResourceWithOffset(
     ITextureResource textureResource,
     Vector2D? offset = null,
     Vector2D? pivotPoint = null)
 {
     this.TextureResource = textureResource;
     this.Offset = offset;
     this.PivotPoint = pivotPoint;
 }
Ejemplo n.º 15
0
 public ComposeLayer(string path, sbyte spriteQualityOffset)
 {
     this.TextureResource = path is not null
                                ? new TextureResource(
                                    path.Substring(ContentPaths.Textures.Length),
                                    isProvidesMagentaPixelPosition: true,
                                    qualityOffset: spriteQualityOffset)
                                : null;
     this.PivotPos = default;
 }
Ejemplo n.º 16
0
 public ViewModelFeaturesSlideshowEntry(
     string title,
     string description,
     ITextureResource textureResource,
     bool isAutoDisposeFields = true) : base(isAutoDisposeFields)
 {
     this.Title       = title;
     this.Description = description;
     this.Image       = Api.Client.UI.GetTextureBrush(textureResource);
 }
Ejemplo n.º 17
0
 public static bool AreEqual(ITextureResource left, ITextureResource right)
 {
     if (left is null && right is null)
     {
         return(true);
     }
     if (left is null || right is null)
     {
         return(false);
     }
     return(left.GetHashCode() == right.GetHashCode());
 }
Ejemplo n.º 18
0
        public static async Task <ITextureResource> CreateIconForLockedEntry(
            ProceduralTextureRequest request,
            ITextureResource originalIcon)
        {
            var size = await Rendering.GetTextureSize(originalIcon);

            var originalIconSize = size;

            // expand size a bit to fit the outline
            var paddingFraction = 0.0;
            var padding         = (int)Math.Round(size.X * paddingFraction, MidpointRounding.AwayFromZero);

            size = new Vector2Ushort((ushort)(size.X + padding),
                                     (ushort)(size.Y + padding));
            request.ThrowIfCancelled();

            // create camera and render texture
            var renderingTag  = request.TextureName;
            var renderTexture = Rendering.CreateRenderTexture(renderingTag,
                                                              size.X,
                                                              size.Y);
            var cameraObject = Api.Client.Scene.CreateSceneObject(renderingTag);
            var camera       = Rendering.CreateCamera(cameraObject,
                                                      renderingTag,
                                                      drawOrder: -100);

            camera.RenderTarget = renderTexture;
            camera.SetOrthographicProjection(size.X, size.Y);

            var spriteRenderer = Rendering.CreateSpriteRenderer(
                cameraObject,
                originalIcon,
                // draw at the center
                positionOffset: (size.X / 2, -size.Y / 2),
                spritePivotPoint: (0.5, 0.5),
                renderingTag: renderingTag,
                scale: 1 + paddingFraction);

            spriteRenderer.RenderingMaterial = GetRenderingMaterial(originalIconSize);

            await camera.DrawAsync();

            cameraObject.Destroy();

            request.ThrowIfCancelled();

            var generatedTexture = await renderTexture.SaveToTexture(isTransparent : true);

            renderTexture.Dispose();
            request.ThrowIfCancelled();
            return(generatedTexture);
        }
Ejemplo n.º 19
0
        //public ITextureResource[] FramesTextureResources => this.framesTextureResources;

        /// <summary>
        /// Generate textures from atlas.
        /// </summary>
        /// <param name="textureAtlasResource">Texture atlas.</param>
        /// <param name="columns">(optional)</param>
        /// <param name="rowsCount">(optional)</param>
        /// <param name="autoInverse">
        /// (optional) Enable this if you want to append reverse animation. Please note - first and last
        /// frame will be displayed twice.
        /// </param>
        /// <returns></returns>
        public static ITextureResource[] CreateAnimationFrames(
            ITextureAtlasResource textureAtlasResource,
            byte?columns         = null,
            byte?rowsCount       = null,
            byte?onlySpecificRow = null,
            bool autoInverse     = false)
        {
            var atlasColumnsCount = columns ?? textureAtlasResource.AtlasSize.ColumnsCount;
            var atlasRowsCount    = rowsCount ?? textureAtlasResource.AtlasSize.RowsCount;

            int chunksCount;

            if (onlySpecificRow.HasValue)
            {
                chunksCount = atlasColumnsCount;
            }
            else
            {
                chunksCount = atlasColumnsCount * atlasRowsCount;
            }

            var result = new ITextureResource[chunksCount * (autoInverse ? 2 : 1)];

            if (onlySpecificRow.HasValue)
            {
                var row = onlySpecificRow.Value;
                for (byte column = 0; column < atlasColumnsCount; column++)
                {
                    result[column] = textureAtlasResource.Chunk(column, row);
                }
            }
            else
            {
                for (byte row = 0; row < atlasRowsCount; row++)
                {
                    for (byte column = 0; column < atlasColumnsCount; column++)
                    {
                        result[row * atlasColumnsCount + column] = textureAtlasResource.Chunk(column, row);
                    }
                }
            }

            if (autoInverse)
            {
                for (var i = 0; i < chunksCount; i++)
                {
                    result[chunksCount + i] = result[chunksCount - i - 1];
                }
            }

            return(result);
        }
Ejemplo n.º 20
0
        protected IComponentSpriteRenderer ClientAddRenderer(
            IStaticWorldObject worldObject,
            ITextureResource textureResource,
            Vector2D positionOffset)
        {
            var renderer = Client.Rendering.CreateSpriteRenderer(worldObject,
                                                                 textureResource);

            this.ClientSetupRenderer(renderer);
            renderer.PositionOffset   += positionOffset;
            renderer.DrawOrderOffsetY -= positionOffset.Y;
            renderer.RenderingMaterial = RenderingMaterials.DefaultDrawEffectWithTransparentBorder;
            return(renderer);
        }
Ejemplo n.º 21
0
        public static async Task <ITextureResource> CreateIcon(
            ITextureResource texture,
            ProceduralTextureRequest request)
        {
            var textureSize = await Rendering.GetTextureSize(texture);

            request.ThrowIfCancelled();

            if (!ClampTextureSize(ref textureSize, out var scale) &&
                texture is TextureResource)
            {
                // can use original texture as icon for itself
                return(texture);
            }

            // create camera and render texture
            var renderingTag  = request.TextureName;
            var renderTexture = Rendering.CreateRenderTexture(renderingTag,
                                                              textureSize.X,
                                                              textureSize.Y);
            var cameraObject = Api.Client.Scene.CreateSceneObject(renderingTag);
            var camera       = Rendering.CreateCamera(cameraObject,
                                                      renderingTag,
                                                      drawOrder: -100);

            camera.RenderTarget = renderTexture;
            camera.SetOrthographicProjection(textureSize.X, textureSize.Y);

            // create and prepare renderer for icon (attach it to camera object)
            Rendering.CreateSpriteRenderer(
                cameraObject,
                texture,
                positionOffset: (0, 0),
                // draw down
                spritePivotPoint: (0, 1),
                renderingTag: renderingTag,
                scale: scale);

            await camera.DrawAsync();

            cameraObject.Destroy();

            request.ThrowIfCancelled();

            var generatedTexture = await renderTexture.SaveToTexture(isTransparent : true);

            renderTexture.Dispose();
            request.ThrowIfCancelled();
            return(generatedTexture);
        }
Ejemplo n.º 22
0
        public ProtoTileGroundTexture(
            TextureResource texture,
            ITextureResource blendMaskTexture,
            INoiseSelector noiseSelector)
        {
            this.Texture = texture;

            this.BlendMaskTexture = new TextureAtlasResource(
                blendMaskTexture,
                columns: 4,
                rows: 1);

            this.NoiseSelector = noiseSelector;
        }
Ejemplo n.º 23
0
        protected override void PrepareQuest(QuestsList prerequisites, TasksList tasks, HintsList hints)
        {
            ITextureResource icon = null;

            if (IsClient)
            {
                icon = Api.GetProtoEntity <ObjectSandTyrantRemains>().Icon;
            }

            tasks
            .Add(TaskDestroy.Require <ObjectSandTyrantRemains>(count: 1).WithIcon(icon));

            prerequisites
            .Add <QuestDesertPrincessRemains>();
        }
Ejemplo n.º 24
0
        public static IComponentSpriteRenderer CreateOcclusionRenderer(
            IWorldObject worldObject,
            ITextureResource textureResource,
            Vector2D?positionOffset   = null,
            bool extractMaskFromColor = false)
        {
            var result = Rendering.CreateSpriteRenderer(
                worldObject,
                textureResource,
                drawOrder: DrawOrder.Occlusion,
                positionOffset: positionOffset,
                renderingTag: RenderingTag);

            SetupComponent(result, extractMaskFromColor);
            return(result);
        }
Ejemplo n.º 25
0
        private static async Task <ITextureResource> GenerateIcon(
            ProceduralTextureRequest request,
            ITextureResource originalIcon)
        {
            Vector2Ushort size = (128, 128);

            // expand size a bit to fit the outline
            request.ThrowIfCancelled();

            // create camera and render texture
            var renderingTag  = request.TextureName;
            var renderTexture = Rendering.CreateRenderTexture(renderingTag,
                                                              size.X,
                                                              size.Y);
            var cameraObject = Api.Client.Scene.CreateSceneObject(renderingTag);
            var camera       = Rendering.CreateCamera(cameraObject,
                                                      renderingTag,
                                                      drawOrder: -100);

            camera.RenderTarget = renderTexture;
            camera.SetOrthographicProjection(size.X, size.Y);

            var spriteRenderer = Rendering.CreateSpriteRenderer(
                cameraObject,
                originalIcon,
                // draw at the center
                positionOffset: (size.X / 2, -size.Y / 2),
                spritePivotPoint: (0.5, 0.5),
                renderingTag: renderingTag,
                // as most icons are 256x256 and we need a 128x128 icon scale it this way
                scale: 0.5);

            spriteRenderer.RenderingMaterial = RenderingMaterialCrateIcon;

            await camera.DrawAsync();

            cameraObject.Destroy();

            request.ThrowIfCancelled();

            var generatedTexture = await renderTexture.SaveToTexture(isTransparent : true);

            renderTexture.Dispose();
            request.ThrowIfCancelled();
            return(generatedTexture);
        }
Ejemplo n.º 26
0
        protected override void PrepareQuest(QuestsList prerequisites, TasksList tasks, HintsList hints)
        {
            ITextureResource icon = null;

            if (IsClient)
            {
                icon = Api.GetProtoEntity <ObjectPragmiumKingRemains>().Icon;
            }

            tasks
            .Add(TaskDestroy.Require <ObjectPragmiumKingRemains>(count: 1).WithIcon(icon));

            prerequisites
            .Add <QuestPragmiumQueenRemains>()
            .Add <QuestSandTyrantRemains>()
            .Add <QuestCookMoreFoodStage4>()
            .Add <QuestMineMoreMineralsStage4>();
        }
Ejemplo n.º 27
0
        protected override void PrepareQuest(QuestsList prerequisites, TasksList tasks, HintsList hints)
        {
            ITextureResource iconGrass = null,
                             iconTwigs = null,
                             iconStone = null;

            if (IsClient)
            {
                iconGrass = Api.GetProtoEntity <ObjectLootGrass>().Icon;
                iconTwigs = Api.GetProtoEntity <ObjectLootTwigs>().Icon;
                iconStone = Api.GetProtoEntity <ObjectLootStone>().Icon;
            }

            tasks
            .Add(TaskHaveItem.Require <ItemFibers>(count: 10).WithIcon(iconGrass))
            .Add(TaskHaveItem.Require <ItemTwigs>(count: 10).WithIcon(iconTwigs))
            .Add(TaskHaveItem.Require <ItemStone>(count: 10).WithIcon(iconStone));
        }
        public static async Task <IRenderTarget2D> ApplyColorizerLut(
            ProceduralTextureRequest request,
            ITextureResource sourceTextureResource,
            string lutTextureFilePath)
        {
            var lutTextureResource = new TextureResource3D(lutTextureFilePath, depth: 24, isTransparent: false);
            var lutTexture3D       = await Renderer.LoadTexture3D(lutTextureResource);

            var textureSize = await Renderer.GetTextureSize(sourceTextureResource);

            var textureWidth  = textureSize.X;
            var textureHeight = textureSize.Y;

            var renderingMaterial = RenderingMaterial.Create(new EffectResource("ColorLutRemap"));

            renderingMaterial.EffectParameters.Set("TextureLut", lutTexture3D);

            var renderingTag = "Colorizer camera for procedural texture: " + request.TextureName;
            var cameraObject = Api.Client.Scene.CreateSceneObject(renderingTag);
            var camera       = Renderer.CreateCamera(cameraObject,
                                                     renderingTag: renderingTag,
                                                     drawOrder: -10,
                                                     drawMode: CameraDrawMode.Manual);

            var renderTarget = Renderer.CreateRenderTexture(renderingTag, textureWidth, textureHeight);

            camera.RenderTarget = renderTarget;
            camera.ClearColor   = Color.FromArgb(0, 0, 0, 0);
            camera.SetOrthographicProjection(textureWidth, textureHeight);

            Renderer.CreateSpriteRenderer(cameraObject,
                                          sourceTextureResource,
                                          renderingTag: renderingTag,
                                          // draw down
                                          spritePivotPoint: (0, 1))
            .RenderingMaterial = renderingMaterial;

            await camera.DrawAsync();

            cameraObject.Destroy();
            request.ThrowIfCancelled();

            return(renderTarget);
        }
        private HUDNotificationControl ShowInternal(
            string title,
            string message,
            Brush brushBackground,
            Brush brushBorder,
            ITextureResource icon,
            Action onClick,
            bool autoHide,
            SoundResource soundToPlay)
        {
            Api.Logger.Important(
                string.Format(
                    "Showing notification:{0}Title: {1}{0}Message: {2}",
                    Environment.NewLine,
                    title,
                    message));

            var notificationControl = HUDNotificationControl.Create(
                title,
                message,
                brushBackground,
                brushBorder,
                icon,
                onClick,
                autoHide,
                soundToPlay);

            this.HideSimilarNotifications(notificationControl);

            this.stackPanelChildren.Add(notificationControl);

            if (notificationControl.IsAutoHide)
            {
                // hide the notification control after delay
                ClientComponentTimersManager.AddAction(
                    NotificationHideDelaySeconds,
                    () => notificationControl.Hide(quick: false));
            }

            this.HideOldNotificationsIfTooManyDisplayed();

            return(notificationControl);
        }
Ejemplo n.º 30
0
 public static HUDNotificationControl Show(
     string title,
     string message,
     Brush brushBackground,
     Brush brushBorder,
     ITextureResource icon,
     Action onClick,
     bool autoHide,
     SoundResource soundToPlay)
 {
     return(instance.ShowInternal(title,
                                  message,
                                  brushBackground,
                                  brushBorder,
                                  icon,
                                  onClick,
                                  autoHide,
                                  soundToPlay));
 }