(subtype ItemSubType, intensity Intensity, proximity, target string, index int, message string)
| 69 | } |
| 70 | |
| 71 | func UpdateAttackMessage(subtype ItemSubType, intensity Intensity, proximity, target string, index int, message string) error { |
| 72 | group, ok := attackMessages[subtype] |
| 73 | if !ok { |
| 74 | return fmt.Errorf("unknown subtype: %s", subtype) |
| 75 | } |
| 76 | |
| 77 | opts, ok := group.Options[intensity] |
| 78 | if !ok { |
| 79 | return fmt.Errorf("unknown intensity: %s", intensity) |
| 80 | } |
| 81 | |
| 82 | update := func(sl MessageOptions, i int) (MessageOptions, error) { |
| 83 | if i < 0 || i >= len(sl) { |
| 84 | return nil, fmt.Errorf("index %d out of range (length %d)", i, len(sl)) |
| 85 | } |
| 86 | sl[i] = ItemMessage(message) |
| 87 | return sl, nil |
| 88 | } |
| 89 | |
| 90 | var err error |
| 91 | switch proximity { |
| 92 | case "together": |
| 93 | switch target { |
| 94 | case "toattacker": |
| 95 | opts.Together.ToAttacker, err = update(opts.Together.ToAttacker, index) |
| 96 | case "todefender": |
| 97 | opts.Together.ToDefender, err = update(opts.Together.ToDefender, index) |
| 98 | case "toroom": |
| 99 | opts.Together.ToRoom, err = update(opts.Together.ToRoom, index) |
| 100 | default: |
| 101 | return fmt.Errorf("unknown together target: %s", target) |
| 102 | } |
| 103 | case "separate": |
| 104 | switch target { |
| 105 | case "toattacker": |
| 106 | opts.Separate.ToAttacker, err = update(opts.Separate.ToAttacker, index) |
| 107 | case "todefender": |
| 108 | opts.Separate.ToDefender, err = update(opts.Separate.ToDefender, index) |
| 109 | case "toattackerroom": |
| 110 | opts.Separate.ToAttackerRoom, err = update(opts.Separate.ToAttackerRoom, index) |
| 111 | case "todefenderroom": |
| 112 | opts.Separate.ToDefenderRoom, err = update(opts.Separate.ToDefenderRoom, index) |
| 113 | default: |
| 114 | return fmt.Errorf("unknown separate target: %s", target) |
| 115 | } |
| 116 | default: |
| 117 | return fmt.Errorf("unknown proximity: %s (expected together or separate)", proximity) |
| 118 | } |
| 119 | |
| 120 | if err != nil { |
| 121 | return err |
| 122 | } |
| 123 | |
| 124 | group.Options[intensity] = opts |
| 125 | |
| 126 | return SaveAttackMessageGroup(group) |
| 127 | } |
| 128 |
no test coverage detected