Exemplo n.º 1
0
        ValidationNode ITypeValidator <Rsi, MappingDataNode> .Validate(ISerializationManager serializationManager,
                                                                       MappingDataNode node,
                                                                       IDependencyCollection dependencies,
                                                                       ISerializationContext?context)
        {
            if (!node.TryGet("sprite", out var pathNode) || pathNode is not ValueDataNode valuePathNode)
            {
                return(new ErrorNode(node, "Missing/Invalid sprite node"));
            }

            if (!node.TryGet("state", out var stateNode) || stateNode is not ValueDataNode)
            {
                return(new ErrorNode(node, "Missing/Invalid state node"));
            }

            var path = serializationManager.ValidateNode(typeof(ResourcePath),
                                                         new ValueDataNode($"{SharedSpriteComponent.TextureRoot / valuePathNode.Value}"), context);

            if (path is ErrorNode)
            {
                return(path);
            }

            return(new ValidatedValueNode(node));
        }
Exemplo n.º 2
0
        DeserializationResult ITypeReader <Rsi, MappingDataNode> .Read(ISerializationManager serializationManager,
                                                                       MappingDataNode node,
                                                                       IDependencyCollection dependencies,
                                                                       bool skipHook, ISerializationContext?context)
        {
            if (!node.TryGet("sprite", out var pathNode))
            {
                throw new InvalidMappingException("Expected sprite-node");
            }

            if (!node.TryGet("state", out var stateNode) || stateNode is not ValueDataNode valueDataNode)
            {
                throw new InvalidMappingException("Expected state-node as a valuenode");
            }

            var path = serializationManager.ReadValueOrThrow <ResourcePath>(pathNode, context, skipHook);

            return(new DeserializedValue <Rsi>(new Rsi(path, valueDataNode.Value)));
        }