Source code for screpl.encoder.const

from eudplib import *

import screpl.resources.table.tables as tb
from screpl.utils.conststring import EPDConstString
from screpl.utils.referencetable import search_table
from screpl.utils.string import f_strcmp_ptrepd

from .encoder import read_number, read_name, ArgEncoderPtr

tmpbuf = Db(100) # Temporarily store string

def _makeConstEncoder(table):
    @EUDFunc
    def _enc(offset, delim, ref_offset_epd, retval_epd):
        if EUDIf()(read_name(offset, delim, ref_offset_epd, EPD(tmpbuf)) == 1):
            if EUDIf()(search_table(tmpbuf, EPD(table), f_strcmp_ptrepd, retval_epd) == 1):
                EUDReturn(1)
            if EUDElse()():
                f_dwwrite_epd(ref_offset_epd, offset)
                EUDReturn(0)
            EUDEndIf()
        EUDEndIf()
        EUDReturn(read_number(offset, delim, ref_offset_epd, retval_epd))
    return _enc

[docs]@EUDFunc def _EncodeCount(offset, delim, ref_offset_epd, retval_epd): if EUDIf()(read_name(offset, delim, ref_offset_epd, EPD(tmpbuf)) == 1): if EUDIf()(f_strcmp_ptrepd(tmpbuf, EPDConstString('All')) == 0): f_dwwrite_epd(retval_epd, 0) EUDReturn(1) if EUDElse()(): f_dwwrite_epd(ref_offset_epd, offset) EUDReturn(0) EUDEndIf() EUDEndIf() EUDReturn(read_number(offset, delim, ref_offset_epd, retval_epd))
ArgEncNumber = ArgEncoderPtr(read_number) ArgEncCount = ArgEncoderPtr(_EncodeCount) ArgEncModifier = ArgEncoderPtr(_makeConstEncoder(tb.Modifier)) ArgEncAllyStatus = ArgEncoderPtr(_makeConstEncoder(tb.AllyStatus)) ArgEncComparison = ArgEncoderPtr(_makeConstEncoder(tb.Comparison)) ArgEncOrder = ArgEncoderPtr(_makeConstEncoder(tb.Order)) ArgEncPlayer = ArgEncoderPtr(_makeConstEncoder(tb.Player)) ArgEncPropState = ArgEncoderPtr(_makeConstEncoder(tb.PropState)) ArgEncResource = ArgEncoderPtr(_makeConstEncoder(tb.Resource)) ArgEncScore = ArgEncoderPtr(_makeConstEncoder(tb.Score)) ArgEncSwitchAction = ArgEncoderPtr(_makeConstEncoder(tb.SwitchAction)) ArgEncSwitchState = ArgEncoderPtr(_makeConstEncoder(tb.SwitchState))