예제 #1
0
파일: Room.cs 프로젝트: ditrit/OGREE-3D
    ///<summary>
    /// Parse and add a separator to attributes["separators"] and instantiate it.
    ///</summary>
    ///<param name="_input">The startPos and endPos of the new separator</param>
    public void AddSeparator(string _input)
    {
        if (!Regex.IsMatch(_input, "\\[[0-9.]+,[0-9.]+\\]@\\[[0-9.]+,[0-9.]+\\]"))
        {
            GameManager.gm.AppendLogLine("Syntax error", true, eLogtype.error);
            return;
        }

        string[] data     = _input.Split('@');
        Vector2  startPos = Utils.ParseVector2(data[0]);
        Vector2  endPos   = Utils.ParseVector2(data[1]);

        ReadFromJson.SSeparator separator = new ReadFromJson.SSeparator
        {
            startPosXYm = new float[] { startPos.x, startPos.y },
            endPosXYm   = new float[] { endPos.x, endPos.y }
        };
        AddSeparator(separator);
    }
예제 #2
0
파일: Room.cs 프로젝트: ditrit/OGREE-3D
    ///<summary>
    /// Add a separator to attributes["separators"] and instantiate it.
    ///</summary>
    ///<param name="_input">The separator data to add</param>
    public void AddSeparator(ReadFromJson.SSeparator _sep)
    {
        List <ReadFromJson.SSeparator> separators;

        if (attributes.ContainsKey("separators"))
        {
            separators = JsonConvert.DeserializeObject <List <ReadFromJson.SSeparator> >(attributes["separators"]);
        }
        else
        {
            separators = new List <ReadFromJson.SSeparator>();
        }
        separators.Add(_sep);
        attributes["separators"] = JsonConvert.SerializeObject(separators);

        Vector2 startPos = new Vector2(_sep.startPosXYm[0], _sep.startPosXYm[1]);
        Vector2 endPos   = new Vector2(_sep.endPosXYm[0], _sep.endPosXYm[1]);

        float length = Vector2.Distance(startPos, endPos);
        float height = walls.GetChild(0).localScale.y;
        float angle  = Vector3.SignedAngle(Vector3.right, endPos - startPos, Vector3.up);

        GameObject separator = Instantiate(GameManager.gm.separatorModel);

        separator.transform.parent = walls;

        // Set textured box
        separator.transform.GetChild(0).localScale    = new Vector3(length, height, 0.001f);
        separator.transform.GetChild(0).localPosition = new Vector3(length, height, 0) / 2;
        Renderer rend = separator.transform.GetChild(0).GetComponent <Renderer>();

        rend.material.mainTextureScale = new Vector2(length, height) * 1.5f;

        // Place the separator in the right place
        Vector3 roomScale = technicalZone.localScale * -5;

        separator.transform.localPosition = new Vector3(roomScale.x, 0, roomScale.z);

        // Apply wanted transform
        separator.transform.localPosition   += new Vector3(startPos.x, 0, startPos.y);
        separator.transform.localEulerAngles = new Vector3(0, -angle, 0);
    }