Exemplo n.º 1
0
func (self *disband) Options(v dip.Validator, nation dip.Nation, src dip.Province) (result dip.Options) {
	if v.Phase().Type() == cla.Adjustment {
		if v.Graph().Has(src) {
			if unit, actualSrc, ok := v.Unit(src); ok {
				if unit.Nation == nation {
					if _, _, balance := cla.AdjustmentStatus(v, unit.Nation); balance < 0 {
						result = dip.Options{
							dip.SrcProvince(actualSrc): nil,
						}
					}
				}
			}
		}
	} else if v.Phase().Type() == cla.Retreat {
		if v.Graph().Has(src) {
			if unit, actualSrc, ok := v.Dislodged(src); ok {
				if unit.Nation == nation {
					result = dip.Options{
						dip.SrcProvince(actualSrc): nil,
					}
				}
			}
		}
	}
	return
}
Exemplo n.º 2
0
Arquivo: move.go Projeto: arlm/godip
func (self *move) Validate(v dip.Validator) error {
	if v.Phase().Type() == cla.Movement {
		return self.validateMovementPhase(v)
	} else if v.Phase().Type() == cla.Retreat {
		return self.validateRetreatPhase(v)
	}
	return cla.ErrInvalidPhase
}
Exemplo n.º 3
0
func (self *disband) Validate(v dip.Validator) error {
	if v.Phase().Type() == cla.Adjustment {
		return self.validateBuildPhase(v)
	} else if v.Phase().Type() == cla.Retreat {
		return self.validateRetreatPhase(v)
	}
	return cla.ErrInvalidPhase
}
Exemplo n.º 4
0
Arquivo: move.go Projeto: arlm/godip
func (self *move) Options(v dip.Validator, nation dip.Nation, src dip.Province) (result dip.Options) {
	if v.Phase().Type() == cla.Retreat {
		if !self.flags[cla.ViaConvoy] {
			if v.Graph().Has(src) {
				if unit, actualSrc, ok := v.Dislodged(src); ok {
					if unit.Nation == nation {
						for _, dst := range cla.PossibleMoves(v, src, false, true) {
							if _, _, foundUnit := v.Unit(dst); !foundUnit {
								if !v.Bounce(src, dst) {
									if result == nil {
										result = dip.Options{}
									}
									if result[dip.SrcProvince(actualSrc)] == nil {
										result[dip.SrcProvince(actualSrc)] = dip.Options{}
									}
									result[dip.SrcProvince(actualSrc)][dst] = nil
								}
							}
						}
					}
				}
			}
		}
	} else if v.Phase().Type() == cla.Movement {
		if v.Graph().Has(src) {
			if unit, actualSrc, ok := v.Unit(src); ok {
				if unit.Nation == nation {
					if !self.flags[cla.ViaConvoy] || unit.Type == cla.Army {
						for _, dst := range cla.PossibleMoves(v, src, true, false) {
							if !self.flags[cla.ViaConvoy] {
								if result == nil {
									result = dip.Options{}
								}
								if result[dip.SrcProvince(actualSrc)] == nil {
									result[dip.SrcProvince(actualSrc)] = dip.Options{}
								}
								result[dip.SrcProvince(actualSrc)][dst] = nil
							} else {
								if cp := cla.AnyConvoyPath(v, src, dst, false, nil); len(cp) > 1 {
									if result == nil {
										result = dip.Options{}
									}
									if result[dip.SrcProvince(actualSrc)] == nil {
										result[dip.SrcProvince(actualSrc)] = dip.Options{}
									}
									result[dip.SrcProvince(actualSrc)][dst] = nil
								}
							}
						}
					}
				}
			}
		}
	}
	return
}
Exemplo n.º 5
0
Arquivo: hold.go Projeto: arlm/godip
func (self *hold) Validate(v dip.Validator) error {
	if v.Phase().Type() != cla.Movement {
		return cla.ErrInvalidPhase
	}
	if !v.Graph().Has(self.targets[0]) {
		return cla.ErrInvalidTarget
	}
	var ok bool
	if _, self.targets[0], ok = v.Unit(self.targets[0]); !ok {
		return cla.ErrMissingUnit
	}
	return nil
}
Exemplo n.º 6
0
Arquivo: hold.go Projeto: arlm/godip
func (self *hold) Options(v dip.Validator, nation dip.Nation, src dip.Province) (result dip.Options) {
	if v.Phase().Type() == cla.Movement {
		if v.Graph().Has(src) {
			if unit, actualSrc, ok := v.Unit(src); ok {
				if unit.Nation == nation {
					result = dip.Options{
						dip.SrcProvince(actualSrc): nil,
					}
				}
			}
		}
	}
	return
}