コード例 #1
0
    public static XmlNode buildDOM(Player player)
    {
        XmlNode playerNode = null;

        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        playerNode = doc.CreateElement("player");

        // Append the documentation (if avalaible)
        if (player.getDocumentation() != null)
        {
            XmlNode playerDocumentationNode = doc.CreateElement("documentation");
            playerDocumentationNode.AppendChild(doc.CreateTextNode(player.getDocumentation()));
            playerNode.AppendChild(playerDocumentationNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in player.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_CHARACTER);
            doc.ImportNode(resourcesNode, true);
            playerNode.AppendChild(resourcesNode);
        }

        // Create the textcolor
        XmlElement textColorNode = doc.CreateElement("textcolor");

        textColorNode.SetAttribute("showsSpeechBubble", (player.getShowsSpeechBubbles() ? "yes" : "no"));
        textColorNode.SetAttribute("bubbleBkgColor", player.getBubbleBkgColor());
        textColorNode.SetAttribute("bubbleBorderColor", player.getBubbleBorderColor());

        // Create and append the frontcolor
        XmlElement frontColorElement = doc.CreateElement("frontcolor");

        frontColorElement.SetAttribute("color", player.getTextFrontColor());
        textColorNode.AppendChild(frontColorElement);

        // Create and append the bordercolor
        XmlElement borderColoElement = doc.CreateElement("bordercolor");

        borderColoElement.SetAttribute("color", player.getTextBorderColor());
        textColorNode.AppendChild(borderColoElement);

        // Append the textcolor
        playerNode.AppendChild(textColorNode);

        foreach (Description description in player.getDescriptions())
        {
            // Create the description
            XmlNode descriptionNode = doc.CreateElement("description");

            // Append the conditions (if available)
            if (description.getConditions() != null && !description.getConditions().isEmpty())
            {
                XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(description.getConditions());
                doc.ImportNode(conditionsNode, true);
                descriptionNode.AppendChild(conditionsNode);
            }

            // Create and append the name, brief description and detailed description
            XmlElement nameNode = doc.CreateElement("name");
            if (description.getNameSoundPath() != null && !description.getNameSoundPath().Equals(""))
            {
                nameNode.SetAttribute("soundPath", description.getNameSoundPath());
            }
            nameNode.AppendChild(doc.CreateTextNode(description.getName()));
            descriptionNode.AppendChild(nameNode);

            XmlElement briefNode = doc.CreateElement("brief");
            if (description.getDescriptionSoundPath() != null && !description.getDescriptionSoundPath().Equals(""))
            {
                briefNode.SetAttribute("soundPath", description.getDescriptionSoundPath());
            }
            briefNode.AppendChild(doc.CreateTextNode(description.getDescription()));
            descriptionNode.AppendChild(briefNode);

            XmlElement detailedNode = doc.CreateElement("detailed");
            if (description.getDetailedDescriptionSoundPath() != null &&
                !description.getDetailedDescriptionSoundPath().Equals(""))
            {
                detailedNode.SetAttribute("soundPath", description.getDetailedDescriptionSoundPath());
            }
            detailedNode.AppendChild(doc.CreateTextNode(description.getDetailedDescription()));
            descriptionNode.AppendChild(detailedNode);

            // Append the description
            playerNode.AppendChild(descriptionNode);
        }

        // Create the voice tag
        XmlElement voiceNode = doc.CreateElement("voice");

        // Create and append the voice name and if is alwaysSynthesizer
        voiceNode.SetAttribute("name", player.getVoice());
        if (player.isAlwaysSynthesizer())
        {
            voiceNode.SetAttribute("synthesizeAlways", "yes");
        }
        else
        {
            voiceNode.SetAttribute("synthesizeAlways", "no");
        }

        // Append the voice tag

        playerNode.AppendChild(voiceNode);

        return(playerNode);
    }
コード例 #2
0
    public static XmlNode buildDOM(Scene scene, bool initialScene)
    {
        XmlElement sceneElement = null;

        if (scene != null)
        {
            TrajectoryFixer.fixTrajectory(scene);
        }
        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        sceneElement = doc.CreateElement("scene");
        sceneElement.SetAttribute("id", scene.getId());
        if (initialScene)
        {
            sceneElement.SetAttribute("start", "yes");
        }
        else
        {
            sceneElement.SetAttribute("start", "no");
        }

        sceneElement.SetAttribute("playerLayer", scene.getPlayerLayer().ToString());
        sceneElement.SetAttribute("playerScale", scene.getPlayerScale().ToString());

        // Append the documentation (if avalaible)
        if (scene.getDocumentation() != null)
        {
            XmlNode sceneDocumentationNode = doc.CreateElement("documentation");
            sceneDocumentationNode.AppendChild(doc.CreateTextNode(scene.getDocumentation()));
            sceneElement.AppendChild(sceneDocumentationNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in scene.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_SCENE);
            doc.ImportNode(resourcesNode, true);
            sceneElement.AppendChild(resourcesNode);
        }

        // Append the name
        XmlNode nameNode = doc.CreateElement("name");

        nameNode.AppendChild(doc.CreateTextNode(scene.getName()));
        sceneElement.AppendChild(nameNode);

        // Append the default inital position (if avalaible)
        if (scene.hasDefaultPosition())
        {
            XmlElement initialPositionElement = doc.CreateElement("default-initial-position");
            initialPositionElement.SetAttribute("x", scene.getPositionX().ToString());
            initialPositionElement.SetAttribute("y", scene.getPositionY().ToString());
            sceneElement.AppendChild(initialPositionElement);
        }

        // Append the exits (if there is at least one)
        if (scene.getExits().Count > 0)
        {
            XmlNode exitsElement = doc.CreateElement("exits");

            // Append every single exit
            foreach (Exit exit in scene.getExits())
            {
                // Create the exit element
                XmlElement exitElement = doc.CreateElement("exit");
                exitElement.SetAttribute("rectangular", (exit.isRectangular() ? "yes" : "no"));
                exitElement.SetAttribute("x", exit.getX().ToString());
                exitElement.SetAttribute("y", exit.getY().ToString());
                exitElement.SetAttribute("width", exit.getWidth().ToString());
                exitElement.SetAttribute("height", exit.getHeight().ToString());
                exitElement.SetAttribute("hasInfluenceArea", (exit.getInfluenceArea().isExists() ? "yes" : "no"));
                exitElement.SetAttribute("idTarget", exit.getNextSceneId());
                exitElement.SetAttribute("destinyY", exit.getDestinyY().ToString());
                exitElement.SetAttribute("destinyX", exit.getDestinyX().ToString());
                exitElement.SetAttribute("transitionType", exit.getTransitionType().ToString());
                exitElement.SetAttribute("transitionTime", exit.getTransitionTime().ToString());
                exitElement.SetAttribute("not-effects", (exit.isHasNotEffects() ? "yes" : "no"));

                if (exit.getInfluenceArea().isExists())
                {
                    exitElement.SetAttribute("influenceX", exit.getInfluenceArea().getX().ToString());
                    exitElement.SetAttribute("influenceY", exit.getInfluenceArea().getY().ToString());
                    exitElement.SetAttribute("influenceWidth", exit.getInfluenceArea().getWidth().ToString());
                    exitElement.SetAttribute("influenceHeight", exit.getInfluenceArea().getHeight().ToString());
                }

                // Append the documentation (if avalaible)
                if (exit.getDocumentation() != null)
                {
                    XmlNode exitDocumentationNode = doc.CreateElement("documentation");
                    exitDocumentationNode.AppendChild(doc.CreateTextNode(exit.getDocumentation()));
                    exitElement.AppendChild(exitDocumentationNode);
                }

                //Append the default exit look (if available)
                ExitLook defaultLook = exit.getDefaultExitLook();
                if (defaultLook != null)
                {
                    XmlElement exitLook = doc.CreateElement("exit-look");
                    if (defaultLook.getExitText() != null)
                    {
                        exitLook.SetAttribute("text", defaultLook.getExitText());
                    }
                    if (defaultLook.getCursorPath() != null)
                    {
                        exitLook.SetAttribute("cursor-path", defaultLook.getCursorPath());
                    }
                    if (defaultLook.getSoundPath() != null)
                    {
                        exitLook.SetAttribute("sound-path", defaultLook.getSoundPath());
                    }

                    if (defaultLook.getExitText() != null || defaultLook.getCursorPath() != null)
                    {
                        exitElement.AppendChild(exitLook);
                    }
                }

                // Append the next-scene structures
                foreach (NextScene nextScene in exit.getNextScenes())
                {
                    // Create the next-scene element
                    XmlElement nextSceneElement = doc.CreateElement("next-scene");
                    nextSceneElement.SetAttribute("idTarget", nextScene.getTargetId());

                    // Append the destination position (if avalaible)
                    if (nextScene.hasPlayerPosition())
                    {
                        nextSceneElement.SetAttribute("x", nextScene.getPositionX().ToString());
                        nextSceneElement.SetAttribute("y", nextScene.getPositionY().ToString());
                    }

                    nextSceneElement.SetAttribute("transitionTime", nextScene.getTransitionTime().ToString());
                    nextSceneElement.SetAttribute("transitionType", nextScene.getTransitionType().ToString());

                    // Append the conditions (if avalaible)
                    if (!nextScene.getConditions().isEmpty())
                    {
                        XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(nextScene.getConditions());
                        doc.ImportNode(conditionsNode, true);
                        nextSceneElement.AppendChild(conditionsNode);
                    }

                    //Append the default exit look (if available)
                    ExitLook look = nextScene.getExitLook();
                    if (look != null)
                    {
                        Debug.Log("SAVE 154: " + look.getExitText());
                        XmlElement exitLook = doc.CreateElement("exit-look");
                        if (look.getExitText() != null)
                        {
                            exitLook.SetAttribute("text", look.getExitText());
                        }
                        if (look.getCursorPath() != null)
                        {
                            exitLook.SetAttribute("cursor-path", look.getCursorPath());
                        }
                        if (look.getSoundPath() != null)
                        {
                            exitLook.SetAttribute("sound-path", look.getSoundPath());
                        }
                        if (look.getExitText() != null || look.getCursorPath() != null)
                        {
                            nextSceneElement.AppendChild(exitLook);
                        }
                    }

                    // Append the effects (if avalaible)
                    if (!nextScene.getEffects().isEmpty())
                    {
                        XmlNode effectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.EFFECTS,
                                                                        nextScene.getEffects());
                        doc.ImportNode(effectsNode, true);
                        nextSceneElement.AppendChild(effectsNode);
                    }

                    // Append the post-effects (if avalaible)
                    if (!nextScene.getPostEffects().isEmpty())
                    {
                        XmlNode postEffectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.POST_EFFECTS,
                                                                            nextScene.getPostEffects());
                        doc.ImportNode(postEffectsNode, true);
                        nextSceneElement.AppendChild(postEffectsNode);
                    }

                    // Append the next scene
                    exitElement.AppendChild(nextSceneElement);
                }

                if (!exit.isRectangular())
                {
                    foreach (Vector2 point in exit.getPoints())
                    {
                        XmlElement pointNode = doc.CreateElement("point");
                        pointNode.SetAttribute("x", ((int)point.x).ToString());
                        pointNode.SetAttribute("y", ((int)point.y).ToString());
                        exitElement.AppendChild(pointNode);
                    }
                }

                if (exit.getConditions() != null && !exit.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(exit.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    exitElement.AppendChild(conditionsNode);
                }

                if (exit.getEffects() != null && !exit.getEffects().isEmpty())
                {
                    Debug.Log("SceneDOM Effects: " + exit.getEffects().getEffects().Count);
                    XmlNode effectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.EFFECTS, exit.getEffects());
                    doc.ImportNode(effectsNode, true);
                    exitElement.AppendChild(effectsNode);
                }

                if (exit.getPostEffects() != null && !exit.getPostEffects().isEmpty())
                {
                    Debug.Log("SceneDOM PostEffects: " + exit.getPostEffects().getEffects().Count);
                    XmlNode postEffectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.POST_EFFECTS,
                                                                        exit.getPostEffects());
                    doc.ImportNode(postEffectsNode, true);
                    exitElement.AppendChild(postEffectsNode);
                }

                if (exit.getNotEffects() != null && !exit.getNotEffects().isEmpty())
                {
                    Debug.Log("SceneDOM NonEffects: " + exit.getNotEffects().getEffects().Count);
                    XmlNode notEffectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.NOT_EFFECTS,
                                                                       exit.getNotEffects());
                    doc.ImportNode(notEffectsNode, true);
                    exitElement.AppendChild(notEffectsNode);
                }

                // Append the exit
                exitsElement.AppendChild(exitElement);
            }
            // Append the list of exits
            sceneElement.AppendChild(exitsElement);
        }

        // Add the item references (if there is at least one)
        if (scene.getItemReferences().Count > 0)
        {
            XmlNode itemsNode = doc.CreateElement("objects");

            // Append every single item reference
            foreach (ElementReference itemReference in scene.getItemReferences())
            {
                // Create the item reference element
                XmlElement itemReferenceElement = doc.CreateElement("object-ref");
                itemReferenceElement.SetAttribute("idTarget", itemReference.getTargetId());
                itemReferenceElement.SetAttribute("x", itemReference.getX().ToString());
                itemReferenceElement.SetAttribute("y", itemReference.getY().ToString());
                itemReferenceElement.SetAttribute("scale", itemReference.getScale().ToString());
                if (itemReference.getLayer() != -1)
                {
                    itemReferenceElement.SetAttribute("layer", itemReference.getLayer().ToString());
                }
                if (itemReference.getInfluenceArea().isExists())
                {
                    itemReferenceElement.SetAttribute("hasInfluenceArea", "yes");
                    InfluenceArea ia = itemReference.getInfluenceArea();
                    itemReferenceElement.SetAttribute("influenceX", ia.getX().ToString());
                    itemReferenceElement.SetAttribute("influenceY", ia.getY().ToString());
                    itemReferenceElement.SetAttribute("influenceWidth", ia.getWidth().ToString());
                    itemReferenceElement.SetAttribute("influenceHeight", ia.getHeight().ToString());
                }
                else
                {
                    itemReferenceElement.SetAttribute("hasInfluenceArea", "no");
                }

                // Append the documentation (if avalaible)
                if (itemReference.getDocumentation() != null)
                {
                    XmlNode itemDocumentationNode = doc.CreateElement("documentation");
                    itemDocumentationNode.AppendChild(doc.CreateTextNode(itemReference.getDocumentation()));
                    itemReferenceElement.AppendChild(itemDocumentationNode);
                }

                // Append the conditions (if avalaible)
                if (!itemReference.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(itemReference.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    itemReferenceElement.AppendChild(conditionsNode);
                }

                // Append the exit
                itemsNode.AppendChild(itemReferenceElement);
            }
            // Append the list of exits
            sceneElement.AppendChild(itemsNode);
        }

        // Add the character references (if there is at least one)
        if (scene.getCharacterReferences().Count > 0)
        {
            XmlNode charactersNode = doc.CreateElement("characters");

            // Append every single character reference
            foreach (ElementReference characterReference in scene.getCharacterReferences())
            {
                // Create the character reference element
                XmlElement npcReferenceElement = doc.CreateElement("character-ref");
                npcReferenceElement.SetAttribute("idTarget", characterReference.getTargetId());
                npcReferenceElement.SetAttribute("x", characterReference.getX().ToString());
                npcReferenceElement.SetAttribute("y", characterReference.getY().ToString());
                npcReferenceElement.SetAttribute("scale", characterReference.getScale().ToString());
                if (characterReference.getLayer() != -1)
                {
                    npcReferenceElement.SetAttribute("layer", characterReference.getLayer().ToString());
                }
                if (characterReference.getInfluenceArea().isExists())
                {
                    npcReferenceElement.SetAttribute("hasInfluenceArea", "yes");
                    InfluenceArea ia = characterReference.getInfluenceArea();
                    npcReferenceElement.SetAttribute("influenceX", ia.getX().ToString());
                    npcReferenceElement.SetAttribute("influenceY", ia.getY().ToString());
                    npcReferenceElement.SetAttribute("influenceWidth", ia.getWidth().ToString());
                    npcReferenceElement.SetAttribute("influenceHeight", ia.getHeight().ToString());
                }
                else
                {
                    npcReferenceElement.SetAttribute("hasInfluenceArea", "no");
                }

                // Append the documentation (if avalaible)
                if (characterReference.getDocumentation() != null)
                {
                    XmlNode itemDocumentationNode = doc.CreateElement("documentation");
                    itemDocumentationNode.AppendChild(doc.CreateTextNode(characterReference.getDocumentation()));
                    npcReferenceElement.AppendChild(itemDocumentationNode);
                }

                // Append the conditions (if avalaible)
                if (!characterReference.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(characterReference.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    npcReferenceElement.AppendChild(conditionsNode);
                }

                // Append the exit
                charactersNode.AppendChild(npcReferenceElement);
            }
            // Append the list of exits
            sceneElement.AppendChild(charactersNode);
        }

        // Append the exits (if there is at least one)
        if (scene.getActiveAreas().Count > 0)
        {
            XmlNode aasElement = doc.CreateElement("active-areas");

            // Append every single exit
            foreach (ActiveArea activeArea in scene.getActiveAreas())
            {
                // Create the active area element
                XmlElement aaElement = doc.CreateElement("active-area");
                if (activeArea.getId() != null)
                {
                    aaElement.SetAttribute("id", activeArea.getId());
                }
                aaElement.SetAttribute("rectangular", (activeArea.isRectangular() ? "yes" : "no"));
                aaElement.SetAttribute("x", activeArea.getX().ToString());
                aaElement.SetAttribute("y", activeArea.getY().ToString());
                aaElement.SetAttribute("width", activeArea.getWidth().ToString());
                aaElement.SetAttribute("height", activeArea.getHeight().ToString());
                if (activeArea.getInfluenceArea().isExists())
                {
                    aaElement.SetAttribute("hasInfluenceArea", "yes");
                    InfluenceArea ia = activeArea.getInfluenceArea();
                    aaElement.SetAttribute("influenceX", ia.getX().ToString());
                    aaElement.SetAttribute("influenceY", ia.getY().ToString());
                    aaElement.SetAttribute("influenceWidth", ia.getWidth().ToString());
                    aaElement.SetAttribute("influenceHeight", ia.getHeight().ToString());
                }
                else
                {
                    aaElement.SetAttribute("hasInfluenceArea", "no");
                }

                // Append the documentation (if avalaible)
                if (activeArea.getDocumentation() != null)
                {
                    XmlNode exitDocumentationNode = doc.CreateElement("documentation");
                    exitDocumentationNode.AppendChild(doc.CreateTextNode(activeArea.getDocumentation()));
                    aaElement.AppendChild(exitDocumentationNode);
                }

                // Append the conditions (if avalaible)
                if (!activeArea.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(activeArea.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    aaElement.AppendChild(conditionsNode);
                }


                foreach (Description description in activeArea.getDescriptions())
                {
                    // Create the description
                    XmlNode descriptionNode = doc.CreateElement("description");

                    // Append the conditions (if available)
                    if (description.getConditions() != null && !description.getConditions().isEmpty())
                    {
                        XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(description.getConditions());
                        doc.ImportNode(conditionsNode, true);
                        descriptionNode.AppendChild(conditionsNode);
                    }

                    // Create and append the name, brief description and detailed description
                    XmlElement aaNameNode = doc.CreateElement("name");
                    if (description.getNameSoundPath() != null && !description.getNameSoundPath().Equals(""))
                    {
                        aaNameNode.SetAttribute("soundPath", description.getNameSoundPath());
                    }
                    aaNameNode.AppendChild(doc.CreateTextNode(description.getName()));
                    descriptionNode.AppendChild(aaNameNode);

                    XmlElement aaBriefNode = doc.CreateElement("brief");
                    if (description.getDescriptionSoundPath() != null &&
                        !description.getDescriptionSoundPath().Equals(""))
                    {
                        aaBriefNode.SetAttribute("soundPath", description.getDescriptionSoundPath());
                    }
                    aaBriefNode.AppendChild(doc.CreateTextNode(description.getDescription()));
                    descriptionNode.AppendChild(aaBriefNode);

                    XmlElement aaDetailedNode = doc.CreateElement("detailed");
                    if (description.getDetailedDescriptionSoundPath() != null &&
                        !description.getDetailedDescriptionSoundPath().Equals(""))
                    {
                        aaDetailedNode.SetAttribute("soundPath", description.getDetailedDescriptionSoundPath());
                    }
                    aaDetailedNode.AppendChild(doc.CreateTextNode(description.getDetailedDescription()));
                    descriptionNode.AppendChild(aaDetailedNode);

                    // Append the description
                    aaElement.AppendChild(descriptionNode);
                }

                // Append the actions (if there is at least one)
                if (activeArea.getActions().Count > 0)
                {
                    XmlNode actionsNode = ActionsDOMWriter.buildDOM(activeArea.getActions());
                    doc.ImportNode(actionsNode, true);

                    // Append the actions node
                    aaElement.AppendChild(actionsNode);
                }

                if (!activeArea.isRectangular())
                {
                    foreach (Vector2 point in activeArea.getPoints())
                    {
                        XmlElement pointNode = doc.CreateElement("point");
                        pointNode.SetAttribute("x", ((int)point.x).ToString());
                        pointNode.SetAttribute("y", ((int)point.y).ToString());
                        aaElement.AppendChild(pointNode);
                    }
                }

                // Append the exit
                aasElement.AppendChild(aaElement);
            }
            // Append the list of exits
            sceneElement.AppendChild(aasElement);
        }

        // Append the barriers (if there is at least one)
        if (scene.getBarriers().Count > 0)
        {
            XmlNode barriersElement = doc.CreateElement("barriers");

            // Append every single barrier
            foreach (Barrier barrier in scene.getBarriers())
            {
                // Create the active area element
                XmlElement barrierElement = doc.CreateElement("barrier");
                barrierElement.SetAttribute("x", barrier.getX().ToString());
                barrierElement.SetAttribute("y", barrier.getY().ToString());
                barrierElement.SetAttribute("width", barrier.getWidth().ToString());
                barrierElement.SetAttribute("height", barrier.getHeight().ToString());

                // Append the documentation (if avalaible)
                if (barrier.getDocumentation() != null)
                {
                    XmlNode exitDocumentationNode = doc.CreateElement("documentation");
                    exitDocumentationNode.AppendChild(doc.CreateTextNode(barrier.getDocumentation()));
                    barrierElement.AppendChild(exitDocumentationNode);
                }

                // Append the conditions (if avalaible)
                if (!barrier.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(barrier.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    barrierElement.AppendChild(conditionsNode);
                }

                // Append the barrier
                barriersElement.AppendChild(barrierElement);
            }
            // Append the list of exits
            sceneElement.AppendChild(barriersElement);
        }

        // Add the atrezzo item references (if there is at least one)
        if (scene.getAtrezzoReferences().Count > 0)
        {
            XmlNode atrezzoNode = doc.CreateElement("atrezzo");

            // Append every single atrezzo reference
            foreach (ElementReference atrezzoReference in scene.getAtrezzoReferences())
            {
                // Create the atrezzo reference element
                XmlElement atrezzoReferenceElement = doc.CreateElement("atrezzo-ref");
                atrezzoReferenceElement.SetAttribute("idTarget", atrezzoReference.getTargetId());
                atrezzoReferenceElement.SetAttribute("x", atrezzoReference.getX().ToString());
                atrezzoReferenceElement.SetAttribute("y", atrezzoReference.getY().ToString());
                atrezzoReferenceElement.SetAttribute("scale", atrezzoReference.getScale().ToString());
                if (atrezzoReference.getLayer() != -1)
                {
                    atrezzoReferenceElement.SetAttribute("layer", atrezzoReference.getLayer().ToString());
                }

                // Append the documentation (if avalaible)
                if (atrezzoReference.getDocumentation() != null)
                {
                    XmlNode itemDocumentationNode = doc.CreateElement("documentation");
                    itemDocumentationNode.AppendChild(doc.CreateTextNode(atrezzoReference.getDocumentation()));
                    atrezzoReferenceElement.AppendChild(itemDocumentationNode);
                }

                // Append the conditions (if avalaible)
                if (!atrezzoReference.getConditions().isEmpty())
                {
                    XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(atrezzoReference.getConditions());
                    doc.ImportNode(conditionsNode, true);
                    atrezzoReferenceElement.AppendChild(conditionsNode);
                }

                // Append the atrezzo reference
                atrezzoNode.AppendChild(atrezzoReferenceElement);
            }
            // Append the list of atrezzo references
            sceneElement.AppendChild(atrezzoNode);
        }

        if (scene.getTrajectory() != null)
        {
            XmlNode trajectoryNode = TrajectoryDOMWriter.buildDOM(scene.getTrajectory());
            doc.ImportNode(trajectoryNode, true);
            sceneElement.AppendChild(trajectoryNode);
        }

        return(sceneElement);
    }
コード例 #3
0
    /**
     * Build a node from a list of actions
     *
     * @param actions
     *            the list of actions
     * @return the xml node with the list of actions
     */

    public static XmlNode buildDOM(List <Action> actions)
    {
        XmlElement actionsElement = null;


        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        actionsElement = doc.CreateElement("actions");

        // Append the actions (if there is at least one)
        if (actions.Count > 0)
        {
            // For every action
            foreach (Action action in actions)
            {
                XmlElement actionElement = null;

                // Create the element
                switch (action.getType())
                {
                case Action.EXAMINE:
                    actionElement = doc.CreateElement("examine");
                    break;

                case Action.GRAB:
                    actionElement = doc.CreateElement("grab");
                    break;

                case Action.USE:
                    actionElement = doc.CreateElement("use");
                    break;

                case Action.TALK_TO:
                    actionElement = doc.CreateElement("talk-to");
                    break;

                case Action.USE_WITH:
                    actionElement = doc.CreateElement("use-with");
                    actionElement.SetAttribute("idTarget", action.getTargetId());
                    break;

                case Action.GIVE_TO:
                    actionElement = doc.CreateElement("give-to");
                    actionElement.SetAttribute("idTarget", action.getTargetId());
                    break;

                case Action.DRAG_TO:
                    actionElement = doc.CreateElement("drag-to");
                    actionElement.SetAttribute("idTarget", action.getTargetId());
                    break;

                case Action.CUSTOM:
                    actionElement = doc.CreateElement("custom");
                    actionElement.SetAttribute("name", ((CustomAction)action).getName());
                    foreach (ResourcesUni resources in ((CustomAction)action).getResources())
                    {
                        XmlNode resourcesXmlNode = ResourcesDOMWriter.buildDOM(resources,
                                                                               ResourcesDOMWriter.RESOURCES_CUSTOM_ACTION);
                        //doc.adoptXmlNode(resourcesXmlNode);
                        doc.ImportNode(resourcesXmlNode, true);
                        actionElement.AppendChild(resourcesXmlNode);
                    }
                    break;

                case Action.CUSTOM_INTERACT:
                    actionElement = doc.CreateElement("custom-interact");
                    actionElement.SetAttribute("idTarget", action.getTargetId());
                    actionElement.SetAttribute("name", ((CustomAction)action).getName());
                    foreach (ResourcesUni resources in ((CustomAction)action).getResources())
                    {
                        XmlNode resourcesXmlNode = ResourcesDOMWriter.buildDOM(resources,
                                                                               ResourcesDOMWriter.RESOURCES_CUSTOM_ACTION);
                        doc.ImportNode(resourcesXmlNode, true);
                        actionElement.AppendChild(resourcesXmlNode);
                    }
                    break;
                }

                actionElement.SetAttribute("needsGoTo", (action.isNeedsGoTo() ? "yes" : "no"));
                actionElement.SetAttribute("keepDistance", "" + action.getKeepDistance());
                actionElement.SetAttribute("not-effects", action.isActivatedNotEffects() ? "yes" : "no");

                // Append the documentation (if avalaible)
                if (action.getDocumentation() != null)
                {
                    XmlNode actionDocumentationXmlNode = doc.CreateElement("documentation");
                    actionDocumentationXmlNode.AppendChild(doc.CreateTextNode(action.getDocumentation()));
                    actionElement.AppendChild(actionDocumentationXmlNode);
                }

                // Append the conditions (if avalaible)
                if (!action.getConditions().isEmpty())
                {
                    XmlNode conditionsXmlNode = ConditionsDOMWriter.buildDOM(action.getConditions());
                    doc.ImportNode(conditionsXmlNode, true);
                    actionElement.AppendChild(conditionsXmlNode);
                }

                // Append the effects (if avalaible)
                if (!action.getEffects().isEmpty())
                {
                    XmlNode effectsXmlNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.EFFECTS, action.getEffects());
                    doc.ImportNode(effectsXmlNode, true);
                    actionElement.AppendChild(effectsXmlNode);
                }
                // Append the not effects (if avalaible)
                if (action.getNotEffects() != null && !action.getNotEffects().isEmpty())
                {
                    XmlNode notEffectsXmlNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.NOT_EFFECTS,
                                                                          action.getNotEffects());
                    doc.ImportNode(notEffectsXmlNode, true);
                    actionElement.AppendChild(notEffectsXmlNode);
                }

                // Append the action element
                actionsElement.AppendChild(actionElement);
            }
        }

        return(actionsElement);
    }
コード例 #4
0
    public static XmlNode buildDOM(Atrezzo atrezzo)
    {
        XmlElement atrezzoElement = null;

        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        atrezzoElement = doc.CreateElement("atrezzoobject");
        atrezzoElement.SetAttribute("id", atrezzo.getId());

        // Append the documentation (if avalaible)
        if (atrezzo.getDocumentation() != null)
        {
            XmlNode atrezzoDocumentationNode = doc.CreateElement("documentation");
            atrezzoDocumentationNode.AppendChild(doc.CreateTextNode(atrezzo.getDocumentation()));
            atrezzoElement.AppendChild(atrezzoDocumentationNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in atrezzo.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_ITEM);
            doc.ImportNode(resourcesNode, true);
            atrezzoElement.AppendChild(resourcesNode);
        }

        // atrezzo only have name
        // Create the description
        XmlNode descriptionNode = doc.CreateElement("description");

        // Create and append the name, brief description and detailed description and its soundPaths
        XmlElement nameNode = doc.CreateElement("name");

        if (atrezzo.getDescription(0).getNameSoundPath() != null &&
            !atrezzo.getDescription(0).getNameSoundPath().Equals(""))
        {
            nameNode.SetAttribute("soundPath", atrezzo.getDescription(0).getNameSoundPath());
        }
        nameNode.AppendChild(doc.CreateTextNode(atrezzo.getDescription(0).getName()));
        descriptionNode.AppendChild(nameNode);

        XmlElement briefNode = doc.CreateElement("brief");

        /* if (description.getDescriptionSoundPath( )!=null && !description.getDescriptionSoundPath( ).Equals( "" )){
         *       briefNode.SetAttribute( "soundPath", description.getDescriptionSoundPath( ) );
         *   }
         *   briefNode.AppendChild( doc.CreateTextNode( description.getDescription( ) ) );*/
        briefNode.AppendChild(doc.CreateTextNode(""));
        descriptionNode.AppendChild(briefNode);

        XmlElement detailedNode = doc.CreateElement("detailed");

        /* if (description.getDetailedDescriptionSoundPath( )!=null && !description.getDetailedDescriptionSoundPath( ).Equals( "" )){
         *       detailedNode.SetAttribute( "soundPath", description.getDetailedDescriptionSoundPath( ) );
         *   }
         *   detailedNode.AppendChild( doc.CreateTextNode( description.getDetailedDescription( ) ) );*/
        detailedNode.AppendChild(doc.CreateTextNode(""));
        descriptionNode.AppendChild(detailedNode);

        // Append the description
        atrezzoElement.AppendChild(descriptionNode);


        return(atrezzoElement);
    }
コード例 #5
0
    public static XmlNode buildDOM(Book book)
    {
        XmlElement bookElement = null;


        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        bookElement = doc.CreateElement("book");
        bookElement.SetAttribute("id", book.getId());

        // Adding next page position
        if (book.getNextPageVector2() != null)
        {
            bookElement.SetAttribute("xNextPage", book.getNextPageVector2().x + "");
            bookElement.SetAttribute("yNextPage", book.getNextPageVector2().y + "");
        }

        // Adding previous page position
        if (book.getPreviousPageVector2() != null)
        {
            bookElement.SetAttribute("xPreviousPage", book.getPreviousPageVector2().x + "");
            bookElement.SetAttribute("yPreviousPage", book.getPreviousPageVector2().y + "");
        }

        // Append the documentation (if avalaible)
        if (book.getDocumentation() != null)
        {
            XmlNode bookDocumentationNode = doc.CreateElement("documentation");
            bookDocumentationNode.AppendChild(doc.CreateTextNode(book.getDocumentation()));
            bookElement.AppendChild(bookDocumentationNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in book.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_BOOK);
            doc.ImportNode(resourcesNode, true);
            bookElement.AppendChild(resourcesNode);
        }

        // Create the text/pages element

        XmlElement textPagesElement = null;

        if (book.getType() == Book.TYPE_PARAGRAPHS)
        {
            textPagesElement = doc.CreateElement("text");

            // Create and append the paragraphs
            foreach (BookParagraph bookParagraph in book.getParagraphs())
            {
                XmlNode paragraphNode = null;

                // If it is a text paragraph
                if (bookParagraph.getType() == BookParagraph.TEXT)
                {
                    paragraphNode = doc.CreateTextNode(bookParagraph.getContent());
                }

                // If it is a text paragraph
                if (bookParagraph.getType() == BookParagraph.TITLE)
                {
                    paragraphNode = doc.CreateElement("title");
                    paragraphNode.AppendChild(doc.CreateTextNode(bookParagraph.getContent()));
                }

                // If it is a bullet paragraph
                else if (bookParagraph.getType() == BookParagraph.BULLET)
                {
                    paragraphNode = doc.CreateElement("bullet");
                    paragraphNode.AppendChild(doc.CreateTextNode(bookParagraph.getContent()));
                }

                // If it is an image paragraph
                else if (bookParagraph.getType() == BookParagraph.IMAGE)
                {
                    XmlElement imageParagraphElement = doc.CreateElement("img");
                    imageParagraphElement.SetAttribute("src", bookParagraph.getContent());
                    paragraphNode = imageParagraphElement;
                }

                // Append the created paragraph
                textPagesElement.AppendChild(paragraphNode);
            }
        }
        else if (book.getType() == Book.TYPE_PAGES)
        {
            textPagesElement = doc.CreateElement("pages");
            foreach (BookPage page in book.getPageURLs())
            {
                if (page.getUri().Length > 0)
                {
                    // Create the node for the page
                    XmlElement pageElement = doc.CreateElement("page");

                    //Attributes: uri, type, margin, scrollable
                    pageElement.SetAttribute("scrollable", (page.getScrollable() ? "yes" : "no"));
                    pageElement.SetAttribute("margin", page.getMargin().ToString());
                    if (page.getMarginEnd() != 0)
                    {
                        pageElement.SetAttribute("marginEnd", page.getMarginEnd().ToString());
                    }
                    if (page.getMarginTop() != 0)
                    {
                        pageElement.SetAttribute("marginTop", page.getMarginTop().ToString());
                    }
                    if (page.getMarginBottom() != 0)
                    {
                        pageElement.SetAttribute("marginBottom", page.getMarginBottom().ToString());
                    }
                    pageElement.SetAttribute("uri", page.getUri());
                    switch (page.getType())
                    {
                    case BookPage.TYPE_RESOURCE:
                        pageElement.SetAttribute("type", "resource");
                        break;

                    case BookPage.TYPE_IMAGE:
                        pageElement.SetAttribute("type", "image");
                        break;

                    case BookPage.TYPE_URL:
                        pageElement.SetAttribute("type", "url");
                        break;

                    default:
                        pageElement.SetAttribute("type", "url");
                        break;
                    }

                    textPagesElement.AppendChild(pageElement);
                }
            }
        }
        // Append the text element
        bookElement.AppendChild(textPagesElement);


        return(bookElement);
    }
コード例 #6
0
    public static bool writeAnimation(string filename, Animation animation)
    {
        bool            dataSaved      = false;
        XmlDocument     doc            = doc = new XmlDocument();
        XmlDeclaration  declaration    = doc.CreateXmlDeclaration("1.0", "UTF-8", "no");
        XmlDocumentType typeDescriptor = doc.CreateDocumentType("animation", "SYSTEM", "animation.dtd", null);

        doc.AppendChild(declaration);
        doc.AppendChild(typeDescriptor);
        XmlElement mainNode = doc.CreateElement("animation");

        //mainNode.AppendChild(doc.createAttribute("id").setNodeValue(animation.getId()));
        mainNode.SetAttribute("id", animation.getId());
        mainNode.SetAttribute("usetransitions", animation.isUseTransitions() ? "yes" : "no");
        mainNode.SetAttribute("slides", animation.isSlides() ? "yes" : "no");
        XmlElement documentation = doc.CreateElement("documentation");

        if (animation.getDocumentation() != null && animation.getDocumentation().Length > 0)
        {
            documentation.InnerText = animation.getDocumentation();
        }
        mainNode.AppendChild(documentation);

        foreach (ResourcesUni resources in animation.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_ANIMATION);
            doc.ImportNode(resourcesNode, true);
            mainNode.AppendChild(resourcesNode);
        }

        for (int i = 0; i < animation.getFrames().Count; i++)
        {
            mainNode.AppendChild(createTransitionElement(animation.getTransitions()[i], doc));
            mainNode.AppendChild(createFrameElement(animation.getFrames()[i], doc));
        }
        mainNode.AppendChild(createTransitionElement(animation.getEndTransition(), doc));

        doc.ImportNode(mainNode, true);
        doc.AppendChild(mainNode);
        string name = "Assets/Resources/" + filename;

        if (!name.EndsWith(".eaa"))
        {
            name += ".eaa";
        }
        doc.Save(name);
        //TODO: implementation?
        //transformer = tf.newTransformer();
        //transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "animation.dtd");

        //try
        //{
        //    fout = new FileOutputStream(filename);
        //}
        //catch (FileNotFoundException e)
        //{
        //    fout = new FileOutputStream(Controller.getInstance().getProjectFolder() + "/" + filename);
        //}

        //writeFile = new OutputStreamWriter(fout, "UTF-8");
        //transformer.transform(new DOMSource(doc), new StreamResult(writeFile));
        //writeFile.close();
        //fout.close();

        dataSaved = true;

        return(dataSaved);
    }
コード例 #7
0
    public static XmlNode buildDOM(Cutscene cutscene, bool initialScene)
    {
        XmlElement cutsceneElement = null;


        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        if (cutscene.getType() == GeneralScene.GeneralSceneSceneType.SLIDESCENE)
        {
            cutsceneElement = doc.CreateElement("slidescene");
        }
        else if (cutscene.getType() == GeneralScene.GeneralSceneSceneType.VIDEOSCENE)
        {
            cutsceneElement = doc.CreateElement("videoscene");
            if (((Videoscene)cutscene).isCanSkip())
            {
                cutsceneElement.SetAttribute("canSkip", "yes");
            }
            else
            {
                cutsceneElement.SetAttribute("canSkip", "no");
            }
        }

        // Set the attributes
        cutsceneElement.SetAttribute("id", cutscene.getId());
        if (initialScene)
        {
            cutsceneElement.SetAttribute("start", "yes");
        }
        else
        {
            cutsceneElement.SetAttribute("start", "no");
        }

        if (cutscene.getNext() == Cutscene.NEWSCENE)
        {
            cutsceneElement.SetAttribute("idTarget", cutscene.getTargetId());

            cutsceneElement.SetAttribute("destinyX", cutscene.getPositionX().ToString());
            cutsceneElement.SetAttribute("destinyY", cutscene.getPositionY().ToString());

            cutsceneElement.SetAttribute("transitionTime", cutscene.getTransitionTime().ToString());
            cutsceneElement.SetAttribute("transitionType", cutscene.getTransitionType().ToString());
        }

        if (cutscene.getNext() == Cutscene.GOBACK)
        {
            cutsceneElement.SetAttribute("next", "go-back");
        }
        else if (cutscene.getNext() == Cutscene.ENDCHAPTER)
        {
            cutsceneElement.SetAttribute("next", "end-chapter");
        }
        else if (cutscene.getNext() == Cutscene.NEWSCENE)
        {
            cutsceneElement.SetAttribute("next", "new-scene");
        }

        // Append the documentation (if avalaible)
        if (cutscene.getDocumentation() != null)
        {
            XmlNode cutsceneDocumentationNode = doc.CreateElement("documentation");
            cutsceneDocumentationNode.AppendChild(doc.CreateTextNode(cutscene.getDocumentation()));
            cutsceneElement.AppendChild(cutsceneDocumentationNode);
        }

        if (!cutscene.getEffects().isEmpty())
        {
            XmlNode effectsNode = EffectsDOMWriter.buildDOM(EffectsDOMWriter.EFFECTS, cutscene.getEffects());
            doc.ImportNode(effectsNode, true);
            cutsceneElement.AppendChild(effectsNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in cutscene.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_CUTSCENE);
            doc.ImportNode(resourcesNode, true);
            cutsceneElement.AppendChild(resourcesNode);
        }

        // Append the name
        XmlNode nameNode = doc.CreateElement("name");

        nameNode.AppendChild(doc.CreateTextNode(cutscene.getName()));
        cutsceneElement.AppendChild(nameNode);

        return(cutsceneElement);
    }
コード例 #8
0
    public static XmlNode buildDOM(Item item)
    {
        XmlElement itemElement = null;


        // Create the necessary elements to create the DOM
        XmlDocument doc = Writer.GetDoc();

        // Create the root node
        itemElement = doc.CreateElement("object");
        itemElement.SetAttribute("id", item.getId());
        itemElement.SetAttribute("returnsWhenDragged", (item.isReturnsWhenDragged() ? "yes" : "no"));

        //v1.4
        if (item.getBehaviour() == Item.BehaviourType.NORMAL)
        {
            itemElement.SetAttribute("behaviour", "normal");
        }
        if (item.getBehaviour() == Item.BehaviourType.ATREZZO)
        {
            itemElement.SetAttribute("behaviour", "atrezzo");
        }
        if (item.getBehaviour() == Item.BehaviourType.FIRST_ACTION)
        {
            itemElement.SetAttribute("behaviour", "first-action");
        }
        itemElement.SetAttribute("resources-transition-time", item.getResourcesTransitionTime().ToString());
        //v1.4

        // Append the documentation (if avalaible)
        if (item.getDocumentation() != null)
        {
            XmlNode itemDocumentationNode = doc.CreateElement("documentation");
            itemDocumentationNode.AppendChild(doc.CreateTextNode(item.getDocumentation()));
            itemElement.AppendChild(itemDocumentationNode);
        }

        // Append the resources
        foreach (ResourcesUni resources in item.getResources())
        {
            XmlNode resourcesNode = ResourcesDOMWriter.buildDOM(resources, ResourcesDOMWriter.RESOURCES_ITEM);
            doc.ImportNode(resourcesNode, true);
            itemElement.AppendChild(resourcesNode);
        }

        foreach (Description description in item.getDescriptions())
        {
            // Create the description
            XmlNode descriptionNode = doc.CreateElement("description");

            // Append the conditions (if available)
            if (description.getConditions() != null && !description.getConditions().isEmpty())
            {
                XmlNode conditionsNode = ConditionsDOMWriter.buildDOM(description.getConditions());
                doc.ImportNode(conditionsNode, true);
                descriptionNode.AppendChild(conditionsNode);
            }

            // Create and append the name, brief description and detailed description and its soundPaths
            XmlElement nameNode = doc.CreateElement("name");

            if (description.getNameSoundPath() != null && !description.getNameSoundPath().Equals(""))
            {
                nameNode.SetAttribute("soundPath", description.getNameSoundPath());
            }
            nameNode.AppendChild(doc.CreateTextNode(description.getName()));
            descriptionNode.AppendChild(nameNode);

            XmlElement briefNode = doc.CreateElement("brief");
            if (description.getDescriptionSoundPath() != null && !description.getDescriptionSoundPath().Equals(""))
            {
                briefNode.SetAttribute("soundPath", description.getDescriptionSoundPath());
            }
            briefNode.AppendChild(doc.CreateTextNode(description.getDescription()));
            descriptionNode.AppendChild(briefNode);

            XmlElement detailedNode = doc.CreateElement("detailed");
            if (description.getDetailedDescriptionSoundPath() != null &&
                !description.getDetailedDescriptionSoundPath().Equals(""))
            {
                detailedNode.SetAttribute("soundPath", description.getDetailedDescriptionSoundPath());
            }
            detailedNode.AppendChild(doc.CreateTextNode(description.getDetailedDescription()));
            descriptionNode.AppendChild(detailedNode);

            // Append the description
            itemElement.AppendChild(descriptionNode);
        }

        // Append the actions (if there is at least one)
        if (item.getActions().Count > 0)
        {
            // Create the actions node
            XmlNode actionsNode = ActionsDOMWriter.buildDOM(item.getActions());
            doc.ImportNode(actionsNode, true);
            // Append the actions node
            itemElement.AppendChild(actionsNode);
        }



        return(itemElement);
    }