Esempio n. 1
0
 def sd2blocklist(cls, sd: Sidedef, sectors):
     blocklist = [
         Assignment("sector", sectors[sd.sector][0]),
         Assignment("texturemiddle", sd.texturemiddle),
     ]
     if sd.offsetx:
         blocklist.append(Assignment("offsetx", sd.offsetx))
     if sd.offsety:
         blocklist.append(Assignment("offsety", sd.offsety))
     return blocklist
Esempio n. 2
0
 def _to_block(cls, dct, ld, vertices):
     lists = []
     lists += [
         Assignment("v1", vertices[ld.v1]),
         Assignment("v2", vertices[ld.v2]),
         Assignment("sidefront", dct['sidefront']),
     ]
     if "sideback" in dct:
         lists.append(Assignment("sideback", dct["sideback"]))
     lists += [Assignment("blocking", ld.blocking)]
     return lists
Esempio n. 3
0
    def _add_things(self, textmap: Textmap):
        # TODO multiplicity
        things = {
            t: Block("thing", [
                Assignment("x", Decimal("{0:.3f}".format(t.x))),
                Assignment("y", Decimal("{0:.3f}".format(t.y))),
                Assignment("type", t.type),
            ])
            for t in textmap.things
        }

        return list(things.values()) + self._add_vertices(textmap)
Esempio n. 4
0
    def _add_vertices(self, textmap: Textmap):
        vertices = {
            v: Block("vertex", [
                Assignment("x", Decimal("{0:.3f}".format(v.x))),
                Assignment("y", Decimal("{0:.3f}".format(v.y))),
            ])
            for i, v in enumerate(
                sorted(textmap.vertices, key=lambda e: (e.y, e.x)))
        }

        vertex_list = sorted(vertices.items(), key=lambda e: (e[0].y, e[0].x))
        vertex_list = [b for _, b in vertex_list]

        return vertex_list + self._add_linedefs(textmap)
Esempio n. 5
0
 def _s2blocklist(cls, s: Sector):
     blocklist = [
         Assignment("heightceiling", s.heightceiling),
         Assignment("texturefloor", s.texturefloor),
         Assignment("textureceiling", s.textureceiling),
     ]
     if s.heightfloor:
         blocklist.append(Assignment("heightfloor", s.heightfloor))
     if s.xscalefloor != 1.0:
         blocklist.append(
             Assignment("xscalefloor",
                        Decimal("{0:.6f}".format(s.xscalefloor))))
     if s.yscalefloor != 1.0:
         blocklist.append(
             Assignment("yscalefloor",
                        Decimal("{0:.6f}".format(s.yscalefloor))))
     if s.xscaleceiling != 1.0:
         blocklist.append(
             Assignment("xscaleceiling",
                        Decimal("{0:.6f}".format(s.xscaleceiling))))
     if s.yscaleceiling != 1.0:
         blocklist.append(
             Assignment("yscaleceiling",
                        Decimal("{0:.6f}".format(s.yscaleceiling))))
     return list(sorted(blocklist, key=lambda a: a.identifier))
Esempio n. 6
0
    def textmap2ast(self, textmap: Textmap) -> TranslationUnit:
        assignments = [
            Assignment("namespace", textmap.namespace),
        ]

        global_exprs = assignments + self._add_things(textmap)

        assert not any(e is None for e in global_exprs)

        return TranslationUnit(*global_exprs)
Esempio n. 7
0
    def _to_sidedefs(cls, cycles_sides, linedef_list):
        cycle_to_sectorid = cls._assign_cycle_to_sectorid(
            linedef_list, cycles_sides)

        front_sector_ids = cls._ld2sdid(linedef_list, cycle_to_sectorid)

        sidefronts = [
            Block("sidedef", [
                Assignment("sector", sector_id),
                Assignment("texturemiddle", "MARBFACE"),
            ]) for sector_id in front_sector_ids
        ]

        back_sector_ids = cls._ld2sdid_back(linedef_list, cycle_to_sectorid)

        sidebacks = [
            Block("sidedef", [
                Assignment("sector", sector_id),
                Assignment("texturemiddle", "MARBFACE"),
            ]) for sector_id in back_sector_ids
        ]

        return sidefronts + sidebacks
Esempio n. 8
0
def parse_udmf(textmap_string: str):
    """
    translation_unit := global_expr_list
    global_expr_list := global_expr global_expr_list
    global_expr := block | assignment_expr
    block := identifier '{' expr_list '}'
    expr_list := assignment_expr expr_list
    assignment_expr := identifier '=' value ';' | nil
    identifier := [A-Za-z_]+[A-Za-z0-9_]*
    value := integer | float | quoted_string | keyword
    integer := [+-]?[1-9]+[0-9]* | 0[0-9]+ | 0x[0-9A-Fa-f]+
    float := [+-]?[0-9]+'.'[0-9]*([eE][+-]?[0-9]+)?
    quoted_string := "([^"\\]*(\\.[^"\\]*)*)"
    keyword := [^{}();"'\n\t ]+

    :param textmap_string:
    :return: pyparsing instance parsed from @textmap_string
    """
    _plusorminus = Literal('+') | Literal('-')
    identifier = Word(alphas + '_', alphanums + '_')
    _uinteger = Word(nums)
    # TODO hexadecimal, octal integers
    _integer = Combine(Optional(_plusorminus) + _uinteger)
    _float = Combine(_integer + Optional(Literal('.') + Optional(_uinteger)))
    keyword = Word(alphas)  # [^{}();"'\n\t ]+
    value = _float | QuotedString('"') | keyword

    assignment_expr = Assignment.group(identifier + '=' + value + ';')
    expr_list = ZeroOrMore(assignment_expr)
    block = Block.group(identifier + '{' + expr_list + '}')
    global_expr = block | assignment_expr
    global_expr_list = ZeroOrMore(global_expr)
    translation_unit = TranslationUnit.group(global_expr_list)

    ast = translation_unit.parseString(textmap_string)[0]
    return ast
Esempio n. 9
0
    def ast(self) -> TranslationUnit:
        return TranslationUnit(
            Assignment("namespace", "zdoom"),
            Block("thing", [
                Assignment("x", Decimal('32.000')),
                Assignment("y", Decimal('32.000')),
                Assignment("type", 1),
            ]),

            Block("vertex", [
                Assignment("x", Decimal('0.000')),
                Assignment("y", Decimal('0.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('64.000')),
                Assignment("y", Decimal('0.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('128.000')),
                Assignment("y", Decimal('0.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('0.000')),
                Assignment("y", Decimal('64.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('64.000')),
                Assignment("y", Decimal('64.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('128.000')),
                Assignment("y", Decimal('64.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('0.000')),
                Assignment("y", Decimal('128.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('64.000')),
                Assignment("y", Decimal('128.000')),
            ]),
            Block("vertex", [
                Assignment("x", Decimal('128.000')),
                Assignment("y", Decimal('128.000')),
            ]),

            Block("linedef", [
                Assignment("v1", 0),
                Assignment("v2", 3),
                Assignment("sidefront", 0),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 1),
                Assignment("v2", 0),
                Assignment("sidefront", 1),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 2),
                Assignment("v2", 1),
                Assignment("sidefront", 2),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 3),
                Assignment("v2", 4),
                Assignment("sidefront", 3),
                Assignment("sideback", 12),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 3),
                Assignment("v2", 6),
                Assignment("sidefront", 4),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 4),
                Assignment("v2", 1),
                Assignment("sidefront", 5),
                Assignment("sideback", 13),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 4),
                Assignment("v2", 5),
                Assignment("sidefront", 6),
                Assignment("sideback", 14),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 5),
                Assignment("v2", 2),
                Assignment("sidefront", 7),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 6),
                Assignment("v2", 7),
                Assignment("sidefront", 8),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 7),
                Assignment("v2", 4),
                Assignment("sidefront", 9),
                Assignment("sideback", 15),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 7),
                Assignment("v2", 8),
                Assignment("sidefront", 10),
                Assignment("blocking", True),
            ]),
            Block("linedef", [
                Assignment("v1", 8),
                Assignment("v2", 5),
                Assignment("sidefront", 11),
                Assignment("blocking", True),
            ]),

            Block("sidedef", [
                Assignment("sector", 0),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 0),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 1),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 0),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 2),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 0),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 1),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 1),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 2),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 2),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 3),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 3),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 2),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 1),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 3),
                Assignment("texturemiddle", "MARBFACE"),
            ]),
            Block("sidedef", [
                Assignment("sector", 3),
                Assignment("texturemiddle", "MARBFACE"),
            ]),

            Block("sector", [
                Assignment("heightceiling", 128),
                Assignment("textureceiling", "CEIL3_3"),
                Assignment("texturefloor", "CEIL3_3"),
            ]),
            Block("sector", [
                Assignment("heightceiling", 128),
                Assignment("textureceiling", "CEIL3_3"),
                Assignment("texturefloor", "CEIL3_3"),
            ]),
            Block("sector", [
                Assignment("heightceiling", 128),
                Assignment("textureceiling", "CEIL3_3"),
                Assignment("texturefloor", "CEIL3_3"),
            ]),
            Block("sector", [
                Assignment("heightceiling", 128),
                Assignment("textureceiling", "CEIL3_3"),
                Assignment("texturefloor", "CEIL3_3"),
            ]),
        )