gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/datax/modifyx2/pool-modify.go (about)

     1  package modifyx
     2  
     3  type IModify interface {
     4  	Key() string
     5  	Valid() bool
     6  	Value(old interface{}) (last interface{})
     7  }
     8  
     9  //
    10  //// 由于公式的不可控,每次执行公式,版本号自动加一,即每次调用公式影响的字段,都会重新计算
    11  //// todo: 对于某些公式只需要计算一次的情况,增加一个配置
    12  //type IModifyFormula interface {
    13  //	IModify
    14  //	Name() string
    15  //	Args() string
    16  //}
    17  //
    18  //type IModifyFloat interface {
    19  //	IModify
    20  //	Kind() string
    21  //	Value() float64
    22  //}
    23  //
    24  //type Modify struct {
    25  //	// 例如: CEffectDamage/Amount
    26  //	key string
    27  //}
    28  //
    29  //func (a *Modify) Valid() bool {
    30  //	return true
    31  //}
    32  //
    33  //func (b *Modify) SetKey(val string) *Modify {
    34  //	b.key = val
    35  //	return b
    36  //}
    37  //
    38  //func (m *Modify) Key() string {
    39  //	return m.key
    40  //}
    41  //
    42  //// 修正浮点数
    43  //type ModifyFormula struct {
    44  //	//
    45  //	Modify
    46  //	// 公式
    47  //	// Cmd arg0 arg1
    48  //	name string
    49  //	//
    50  //	args string
    51  //}
    52  //
    53  //func (b *ModifyFormula) SetName(val string) *ModifyFormula {
    54  //	b.name = val
    55  //	return b
    56  //}
    57  //
    58  //func (m *ModifyFormula) Name() string {
    59  //	return m.name
    60  //}
    61  //
    62  //func (b *ModifyFormula) SetArgs(val string) *ModifyFormula {
    63  //	b.args = val
    64  //	return b
    65  //}
    66  //
    67  //func (m *ModifyFormula) Args() string {
    68  //	return m.args
    69  //}
    70  //
    71  //// 修正浮点数
    72  //type ModifyFloat struct {
    73  //	//
    74  //	Modify
    75  //	// 修正类型
    76  //	// enums.ModifyFloatKind
    77  //	kind string
    78  //	// 修正值
    79  //	value float64
    80  //}
    81  //
    82  //func (b *ModifyFloat) SetKind(val string) *ModifyFloat {
    83  //	b.kind = val
    84  //	return b
    85  //}
    86  //
    87  //func (m *ModifyFloat) Kind() string {
    88  //	return m.kind
    89  //}
    90  //
    91  //func (b *ModifyFloat) SetValue(val float64) *ModifyFloat {
    92  //	b.value = val
    93  //	return b
    94  //}
    95  //
    96  //func (m *ModifyFloat) Value() float64 {
    97  //	return m.value
    98  //}
    99  //
   100  //var formulas = map[string]func(x interface{}, cmd string, args ...string) interface{}{}
   101  //
   102  //func RegisterFormulas(key string, f func(x interface{}, cmd string, args ...string) interface{}) {
   103  //	formulas[key] = f
   104  //}
   105  //
   106  //func CalculateModifyFormula(x float64, bonus IModifyFormula) (y float64) {
   107  //	name := bonus.Name()
   108  //	if name == "" {
   109  //		return x
   110  //	}
   111  //	f, has := formulas[name]
   112  //	if !has {
   113  //		return x
   114  //	}
   115  //	args := strings.Split(bonus.Args(), ",")
   116  //	y = f(x, name, args...).(float64)
   117  //	return
   118  //}
   119  //
   120  //func CalculateModifyFloat(x float64, bonus IModifyFloat) (y float64) {
   121  //	switch bonus.Kind() {
   122  //	case "Add":
   123  //		x += bonus.Value()
   124  //	case "Sub":
   125  //		x -= bonus.Value()
   126  //	case "Mul":
   127  //		x *= bonus.Value()
   128  //	case "Div":
   129  //		x /= bonus.Value()
   130  //	case "Set":
   131  //		x = bonus.Value()
   132  //		//case enums.BonusFixFloatKind_Formula:
   133  //		//	f, has := formulas[bonus.Formula]
   134  //		//	if has {
   135  //		//		x = f(x, params).(float64)
   136  //		//	}
   137  //	}
   138  //	y = x
   139  //	return
   140  //}