Example usage for com.badlogic.gdx.utils JsonValue asFloatArray

List of usage examples for com.badlogic.gdx.utils JsonValue asFloatArray

Introduction

In this page you can find the example usage for com.badlogic.gdx.utils JsonValue asFloatArray.

Prototype

public float[] asFloatArray() 

Source Link

Document

Returns the children of this value as a newly allocated float array.

Usage

From source file:com.company.minery.utils.spine.SkeletonJson.java

License:Open Source License

private void readAnimation(String name, JsonValue map, SkeletonData skeletonData) {
    float scale = this.scale;
    Array<Timeline> timelines = new Array();
    float duration = 0;

    // Slot timelines.
    for (JsonValue slotMap = map.getChild("slots"); slotMap != null; slotMap = slotMap.next) {
        int slotIndex = skeletonData.findSlotIndex(slotMap.name);
        if (slotIndex == -1)
            throw new SerializationException("Slot not found: " + slotMap.name);

        for (JsonValue timelineMap = slotMap.child; timelineMap != null; timelineMap = timelineMap.next) {
            String timelineName = timelineMap.name;
            if (timelineName.equals("color")) {
                ColorTimeline timeline = new ColorTimeline(timelineMap.size);
                timeline.slotIndex = slotIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    Color color = Color.valueOf(valueMap.getString("color"));
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), color.r, color.g, color.b,
                            color.a);//from   ww w  .  j a  v  a2s  .c  o  m
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 5 - 5]);

            } else if (timelineName.equals("attachment")) {
                AttachmentTimeline timeline = new AttachmentTimeline(timelineMap.size);
                timeline.slotIndex = slotIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next)
                    timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getString("name"));
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
            } else
                throw new RuntimeException(
                        "Invalid timeline type for a slot: " + timelineName + " (" + slotMap.name + ")");
        }
    }

    // Bone timelines.
    for (JsonValue boneMap = map.getChild("bones"); boneMap != null; boneMap = boneMap.next) {
        int boneIndex = skeletonData.findBoneIndex(boneMap.name);
        if (boneIndex == -1)
            throw new SerializationException("Bone not found: " + boneMap.name);

        for (JsonValue timelineMap = boneMap.child; timelineMap != null; timelineMap = timelineMap.next) {
            String timelineName = timelineMap.name;
            if (timelineName.equals("rotate")) {
                RotateTimeline timeline = new RotateTimeline(timelineMap.size);
                timeline.boneIndex = boneIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("angle"));
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);

            } else if (timelineName.equals("translate") || timelineName.equals("scale")) {
                TranslateTimeline timeline;
                float timelineScale = 1;
                if (timelineName.equals("scale"))
                    timeline = new ScaleTimeline(timelineMap.size);
                else {
                    timeline = new TranslateTimeline(timelineMap.size);
                    timelineScale = scale;
                }
                timeline.boneIndex = boneIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    float x = valueMap.getFloat("x", 0), y = valueMap.getFloat("y", 0);
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), x * timelineScale,
                            y * timelineScale);
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 3 - 3]);

            } else if (timelineName.equals("flipX") || timelineName.equals("flipY")) {
                boolean x = timelineName.equals("flipX");
                FlipXTimeline timeline = x ? new FlipXTimeline(timelineMap.size)
                        : new FlipYTimeline(timelineMap.size);
                timeline.boneIndex = boneIndex;

                String field = x ? "x" : "y";
                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getBoolean(field, false));
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);

            } else
                throw new RuntimeException(
                        "Invalid timeline type for a bone: " + timelineName + " (" + boneMap.name + ")");
        }
    }

    // IK timelines.
    for (JsonValue ikMap = map.getChild("ik"); ikMap != null; ikMap = ikMap.next) {
        IkConstraintData ikConstraint = skeletonData.findIkConstraint(ikMap.name);
        IkConstraintTimeline timeline = new IkConstraintTimeline(ikMap.size);
        timeline.ikConstraintIndex = skeletonData.getIkConstraints().indexOf(ikConstraint, true);
        int frameIndex = 0;
        for (JsonValue valueMap = ikMap.child; valueMap != null; valueMap = valueMap.next) {
            timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("mix"),
                    valueMap.getBoolean("bendPositive") ? 1 : -1);
            readCurve(timeline, frameIndex, valueMap);
            frameIndex++;
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 3 - 3]);
    }

    // FFD timelines.
    for (JsonValue ffdMap = map.getChild("ffd"); ffdMap != null; ffdMap = ffdMap.next) {
        Skin skin = skeletonData.findSkin(ffdMap.name);
        if (skin == null)
            throw new SerializationException("Skin not found: " + ffdMap.name);
        for (JsonValue slotMap = ffdMap.child; slotMap != null; slotMap = slotMap.next) {
            int slotIndex = skeletonData.findSlotIndex(slotMap.name);
            if (slotIndex == -1)
                throw new SerializationException("Slot not found: " + slotMap.name);
            for (JsonValue meshMap = slotMap.child; meshMap != null; meshMap = meshMap.next) {
                FfdTimeline timeline = new FfdTimeline(meshMap.size);
                Attachment attachment = skin.getAttachment(slotIndex, meshMap.name);
                if (attachment == null)
                    throw new SerializationException("FFD attachment not found: " + meshMap.name);
                timeline.slotIndex = slotIndex;
                timeline.attachment = attachment;

                int vertexCount;
                if (attachment instanceof MeshAttachment)
                    vertexCount = ((MeshAttachment) attachment).getVertices().length;
                else
                    vertexCount = ((SkinnedMeshAttachment) attachment).getWeights().length / 3 * 2;

                int frameIndex = 0;
                for (JsonValue valueMap = meshMap.child; valueMap != null; valueMap = valueMap.next) {
                    float[] vertices;
                    JsonValue verticesValue = valueMap.get("vertices");
                    if (verticesValue == null) {
                        if (attachment instanceof MeshAttachment)
                            vertices = ((MeshAttachment) attachment).getVertices();
                        else
                            vertices = new float[vertexCount];
                    } else {
                        vertices = new float[vertexCount];
                        int start = valueMap.getInt("offset", 0);
                        System.arraycopy(verticesValue.asFloatArray(), 0, vertices, start, verticesValue.size);
                        if (scale != 1) {
                            for (int i = start, n = i + verticesValue.size; i < n; i++)
                                vertices[i] *= scale;
                        }
                        if (attachment instanceof MeshAttachment) {
                            float[] meshVertices = ((MeshAttachment) attachment).getVertices();
                            for (int i = 0; i < vertexCount; i++)
                                vertices[i] += meshVertices[i];
                        }
                    }

                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), vertices);
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
            }
        }
    }

    // Draw order timeline.
    JsonValue drawOrdersMap = map.get("drawOrder");
    if (drawOrdersMap == null)
        drawOrdersMap = map.get("draworder");
    if (drawOrdersMap != null) {
        DrawOrderTimeline timeline = new DrawOrderTimeline(drawOrdersMap.size);
        int slotCount = skeletonData.slots.size;
        int frameIndex = 0;
        for (JsonValue drawOrderMap = drawOrdersMap.child; drawOrderMap != null; drawOrderMap = drawOrderMap.next) {
            int[] drawOrder = null;
            JsonValue offsets = drawOrderMap.get("offsets");
            if (offsets != null) {
                drawOrder = new int[slotCount];
                for (int i = slotCount - 1; i >= 0; i--)
                    drawOrder[i] = -1;
                int[] unchanged = new int[slotCount - offsets.size];
                int originalIndex = 0, unchangedIndex = 0;
                for (JsonValue offsetMap = offsets.child; offsetMap != null; offsetMap = offsetMap.next) {
                    int slotIndex = skeletonData.findSlotIndex(offsetMap.getString("slot"));
                    if (slotIndex == -1)
                        throw new SerializationException("Slot not found: " + offsetMap.getString("slot"));
                    // Collect unchanged items.
                    while (originalIndex != slotIndex)
                        unchanged[unchangedIndex++] = originalIndex++;
                    // Set changed items.
                    drawOrder[originalIndex + offsetMap.getInt("offset")] = originalIndex++;
                }
                // Collect remaining unchanged items.
                while (originalIndex < slotCount)
                    unchanged[unchangedIndex++] = originalIndex++;
                // Fill in unchanged items.
                for (int i = slotCount - 1; i >= 0; i--)
                    if (drawOrder[i] == -1)
                        drawOrder[i] = unchanged[--unchangedIndex];
            }
            timeline.setFrame(frameIndex++, drawOrderMap.getFloat("time"), drawOrder);
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
    }

    // Event timeline.
    JsonValue eventsMap = map.get("events");
    if (eventsMap != null) {
        EventTimeline timeline = new EventTimeline(eventsMap.size);
        int frameIndex = 0;
        for (JsonValue eventMap = eventsMap.child; eventMap != null; eventMap = eventMap.next) {
            EventData eventData = skeletonData.findEvent(eventMap.getString("name"));
            if (eventData == null)
                throw new SerializationException("Event not found: " + eventMap.getString("name"));
            Event event = new Event(eventData);
            event.intValue = eventMap.getInt("int", eventData.getInt());
            event.floatValue = eventMap.getFloat("float", eventData.getFloat());
            event.stringValue = eventMap.getString("string", eventData.getString());
            timeline.setFrame(frameIndex++, eventMap.getFloat("time"), event);
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
    }

    timelines.shrink();
    skeletonData.animations.add(new Animation(name, timelines, duration));
}

From source file:MeshBoneUtil.CreatureModuleUtils.java

License:Open Source License

public static float[] getFloatArray(JsonValue raw_data) {
    return raw_data.asFloatArray();
}

From source file:spine.SkeletonJson.java

License:Open Source License

private void readAnimation(String name, JsonValue map, SkeletonData skeletonData) {
    float scale = this.scale;
    Array<Timeline> timelines = new Array();
    float duration = 0;

    // Slot timelines.
    for (JsonValue slotMap = map.getChild("slots"); slotMap != null; slotMap = slotMap.next) {
        int slotIndex = skeletonData.findSlotIndex(slotMap.name);
        if (slotIndex == -1)
            throw new SerializationException("Slot not found: " + slotMap.name);

        for (JsonValue timelineMap = slotMap.child; timelineMap != null; timelineMap = timelineMap.next) {
            String timelineName = timelineMap.name;
            if (timelineName.equals("color")) {
                ColorTimeline timeline = new ColorTimeline(timelineMap.size);
                timeline.slotIndex = slotIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    Color color = Color.valueOf(valueMap.getString("color"));
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), color.r, color.g, color.b,
                            color.a);//w  w  w .ja  v a 2s.c  o  m
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 5 - 5]);

            } else if (timelineName.equals("attachment")) {
                AttachmentTimeline timeline = new AttachmentTimeline(timelineMap.size);
                timeline.slotIndex = slotIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next)
                    timeline.setFrame(frameIndex++, valueMap.getFloat("time"), valueMap.getString("name"));
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
            } else
                throw new RuntimeException(
                        "Invalid timeline type for a slot: " + timelineName + " (" + slotMap.name + ")");
        }
    }

    // Bone timelines.
    for (JsonValue boneMap = map.getChild("bones"); boneMap != null; boneMap = boneMap.next) {
        int boneIndex = skeletonData.findBoneIndex(boneMap.name);
        if (boneIndex == -1)
            throw new SerializationException("Bone not found: " + boneMap.name);

        for (JsonValue timelineMap = boneMap.child; timelineMap != null; timelineMap = timelineMap.next) {
            String timelineName = timelineMap.name;
            if (timelineName.equals("rotate")) {
                RotateTimeline timeline = new RotateTimeline(timelineMap.size);
                timeline.boneIndex = boneIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("angle"));
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 2 - 2]);

            } else if (timelineName.equals("translate") || timelineName.equals("scale")) {
                TranslateTimeline timeline;
                float timelineScale = 1;
                if (timelineName.equals("scale"))
                    timeline = new ScaleTimeline(timelineMap.size);
                else {
                    timeline = new TranslateTimeline(timelineMap.size);
                    timelineScale = scale;
                }
                timeline.boneIndex = boneIndex;

                int frameIndex = 0;
                for (JsonValue valueMap = timelineMap.child; valueMap != null; valueMap = valueMap.next) {
                    float x = valueMap.getFloat("x", 0), y = valueMap.getFloat("y", 0);
                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), x * timelineScale,
                            y * timelineScale);
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 3 - 3]);

            } else
                throw new RuntimeException(
                        "Invalid timeline type for a bone: " + timelineName + " (" + boneMap.name + ")");
        }
    }

    // IK timelines.
    for (JsonValue ikMap = map.getChild("ik"); ikMap != null; ikMap = ikMap.next) {
        IkConstraintData ikConstraint = skeletonData.findIkConstraint(ikMap.name);
        IkConstraintTimeline timeline = new IkConstraintTimeline(ikMap.size);
        timeline.ikConstraintIndex = skeletonData.getIkConstraints().indexOf(ikConstraint, true);
        int frameIndex = 0;
        for (JsonValue valueMap = ikMap.child; valueMap != null; valueMap = valueMap.next) {
            timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("mix"),
                    valueMap.getBoolean("bendPositive") ? 1 : -1);
            readCurve(timeline, frameIndex, valueMap);
            frameIndex++;
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() * 3 - 3]);
    }

    // FFD timelines.
    for (JsonValue ffdMap = map.getChild("ffd"); ffdMap != null; ffdMap = ffdMap.next) {
        Skin skin = skeletonData.findSkin(ffdMap.name);
        if (skin == null)
            throw new SerializationException("Skin not found: " + ffdMap.name);
        for (JsonValue slotMap = ffdMap.child; slotMap != null; slotMap = slotMap.next) {
            int slotIndex = skeletonData.findSlotIndex(slotMap.name);
            if (slotIndex == -1)
                throw new SerializationException("Slot not found: " + slotMap.name);
            for (JsonValue meshMap = slotMap.child; meshMap != null; meshMap = meshMap.next) {
                FfdTimeline timeline = new FfdTimeline(meshMap.size);
                Attachment attachment = skin.getAttachment(slotIndex, meshMap.name);
                if (attachment == null)
                    throw new SerializationException("FFD attachment not found: " + meshMap.name);
                timeline.slotIndex = slotIndex;
                timeline.attachment = attachment;

                int vertexCount;
                if (attachment instanceof MeshAttachment)
                    vertexCount = ((MeshAttachment) attachment).getVertices().length;
                else
                    vertexCount = ((SkinnedMeshAttachment) attachment).getWeights().length / 3 * 2;

                int frameIndex = 0;
                for (JsonValue valueMap = meshMap.child; valueMap != null; valueMap = valueMap.next) {
                    float[] vertices;
                    JsonValue verticesValue = valueMap.get("vertices");
                    if (verticesValue == null) {
                        if (attachment instanceof MeshAttachment)
                            vertices = ((MeshAttachment) attachment).getVertices();
                        else
                            vertices = new float[vertexCount];
                    } else {
                        vertices = new float[vertexCount];
                        int start = valueMap.getInt("offset", 0);
                        System.arraycopy(verticesValue.asFloatArray(), 0, vertices, start, verticesValue.size);
                        if (scale != 1) {
                            for (int i = start, n = i + verticesValue.size; i < n; i++)
                                vertices[i] *= scale;
                        }
                        if (attachment instanceof MeshAttachment) {
                            float[] meshVertices = ((MeshAttachment) attachment).getVertices();
                            for (int i = 0; i < vertexCount; i++)
                                vertices[i] += meshVertices[i];
                        }
                    }

                    timeline.setFrame(frameIndex, valueMap.getFloat("time"), vertices);
                    readCurve(timeline, frameIndex, valueMap);
                    frameIndex++;
                }
                timelines.add(timeline);
                duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
            }
        }
    }

    // Draw order timeline.
    JsonValue drawOrdersMap = map.get("drawOrder");
    if (drawOrdersMap == null)
        drawOrdersMap = map.get("draworder");
    if (drawOrdersMap != null) {
        DrawOrderTimeline timeline = new DrawOrderTimeline(drawOrdersMap.size);
        int slotCount = skeletonData.slots.size;
        int frameIndex = 0;
        for (JsonValue drawOrderMap = drawOrdersMap.child; drawOrderMap != null; drawOrderMap = drawOrderMap.next) {
            int[] drawOrder = null;
            JsonValue offsets = drawOrderMap.get("offsets");
            if (offsets != null) {
                drawOrder = new int[slotCount];
                for (int i = slotCount - 1; i >= 0; i--)
                    drawOrder[i] = -1;
                int[] unchanged = new int[slotCount - offsets.size];
                int originalIndex = 0, unchangedIndex = 0;
                for (JsonValue offsetMap = offsets.child; offsetMap != null; offsetMap = offsetMap.next) {
                    int slotIndex = skeletonData.findSlotIndex(offsetMap.getString("slot"));
                    if (slotIndex == -1)
                        throw new SerializationException("Slot not found: " + offsetMap.getString("slot"));
                    // Collect unchanged items.
                    while (originalIndex != slotIndex)
                        unchanged[unchangedIndex++] = originalIndex++;
                    // Set changed items.
                    drawOrder[originalIndex + offsetMap.getInt("offset")] = originalIndex++;
                }
                // Collect remaining unchanged items.
                while (originalIndex < slotCount)
                    unchanged[unchangedIndex++] = originalIndex++;
                // Fill in unchanged items.
                for (int i = slotCount - 1; i >= 0; i--)
                    if (drawOrder[i] == -1)
                        drawOrder[i] = unchanged[--unchangedIndex];
            }
            timeline.setFrame(frameIndex++, drawOrderMap.getFloat("time"), drawOrder);
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
    }

    // Event timeline.
    JsonValue eventsMap = map.get("events");
    if (eventsMap != null) {
        EventTimeline timeline = new EventTimeline(eventsMap.size);
        int frameIndex = 0;
        for (JsonValue eventMap = eventsMap.child; eventMap != null; eventMap = eventMap.next) {
            EventData eventData = skeletonData.findEvent(eventMap.getString("name"));
            if (eventData == null)
                throw new SerializationException("Event not found: " + eventMap.getString("name"));
            Event event = new Event(eventMap.getFloat("time"), eventData);
            event.intValue = eventMap.getInt("int", eventData.getInt());
            event.floatValue = eventMap.getFloat("float", eventData.getFloat());
            event.stringValue = eventMap.getString("string", eventData.getString());
            timeline.setFrame(frameIndex++, event);
        }
        timelines.add(timeline);
        duration = Math.max(duration, timeline.getFrames()[timeline.getFrameCount() - 1]);
    }

    timelines.shrink();
    skeletonData.animations.add(new Animation(name, timelines, duration));
}