getYearlyStarIndex function

Map<String, int> getYearlyStarIndex(
  1. AstrolabeParams params
)

获取年系星的索引,包括 咸池,华盖,孤辰,寡宿, 天厨,破碎,天才,天寿,蜚蠊, 龙池,凤阁,天哭,天虚, 天官,天福

  • 安天才天寿

    • 天才由命宫起子,顺行至本生年支安之。天寿由身宫起子,顺行至本生年支安之。
  • 安破碎

    • 子午卯酉年安巳宫,寅申巳亥年安酉宫,辰戍丑未年安丑宫。
  • 安天厨

    • 甲丁食蛇口,乙戊辛马方。丙从鼠口得,己食于猴房。庚食虎头上,壬鸡癸猪堂。
  • 安蜚蠊

    • 子丑寅年在申酉戍,卯辰巳年在巳午未,午未申年在寅卯辰,酉戍亥年在亥子丑。
  • 安龙池凤阁

    • 龙池从辰宫起子,顺至本生年支安之。凤阁从戍宫起子,逆行至本生年支安之。
  • 安天哭天虚

    • 天哭天虚起午宫,午宫起子两分踪,哭逆行兮虚顺转,数到生年便停留。
  • 安天官天福

    • 甲喜羊鸡乙龙猴,丙年蛇鼠一窝谋。丁虎擒猪戊玉兔,
    • 己鸡居然与虎俦。庚猪马辛鸡蛇走,壬犬马癸马蛇游。
  • 安截路空亡(截空)

    • 甲己之年申酉,乙庚之年午未,
    • 丙辛之年辰巳,丁壬之年寅卯,
    • 戊癸之年子丑。
  • 安天空

    • 生年支顺数的前一位就是。 @param solarDate 阳历日期 @param timeIndex 时辰序号 @param fixLeap 是否修复闰月,假如当月不是闰月则不生效

Implementation

Map<String, int> getYearlyStarIndex(AstrolabeParams params) {
  final config = getConfig();
  final heavenlyStemEarthlyBranch = getHeavenlyStemAndEarthlyBranchSolarDate(
    params.solarDate,
    params.timeIndex,
    config.horoscopeDivide,
  );
  final soulAndBody = getSoulAndBody(params);
  HeavenlyStemName heavenlyStem = getMyHeavenlyStemNameFrom(
    heavenlyStemEarthlyBranch.yearly[0] ?? "Heavenly",
  );
  EarthlyBranchName earthlyBranchName = getMyEarthlyBranchNameFrom(
    heavenlyStemEarthlyBranch.yearly[1] ?? "Earthly",
  );
  Map<String, int> huaXuanMaps = getHuaGaiXianChiIndex(earthlyBranchName);
  Map<String, int> guGuaMaps = getGuGuaIndex(earthlyBranchName);
  int huaGaiIndex = huaXuanMaps["hgIdx"] ?? -1;
  int xianChiIndex = huaXuanMaps["xcIdx"] ?? -1;
  int guChenIndex = guGuaMaps["guChenIndex"] ?? -1;
  int guasuIndex = guGuaMaps["guaSuIndex"] ?? -1;
  int tianCaiIndex = fixIndex(
    soulAndBody.soulIndex + earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int tianShouIndex = fixIndex(
    soulAndBody.bodyIndex + earthlyBranches.indexOf(earthlyBranchName.key),
  );

  final index = heavenlyStems.indexOf(heavenlyStem.key);
  String tianEarthBranch =
      [
        siEarthly,
        wuEarthly,
        ziEarthly,
        siEarthly,
        wuEarthly,
        shenEarthly,
        yinEarthly,
        wuEarthly,
        youEarthly,
        haiEarthly,
      ][index];
  int tianChuIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(tianEarthBranch)),
  );
  int pusuiEarthBranchIndex =
      earthlyBranches.indexOf(earthlyBranchName.key) % 3;
  String posuiEarthBranch =
      [siEarthly, chouEarthly, youEarthly][pusuiEarthBranchIndex];
  int posuiIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(posuiEarthBranch)),
  );

  int feilianbranchIndex = earthlyBranches.indexOf(earthlyBranchName.key);
  String feilianBranch =
      [
        shenEarthly,
        youEarthly,
        xuEarthly,
        siEarthly,
        wuEarthly,
        weiEarthly,
        yinEarthly,
        maoEarthly,
        chenEarthly,
        haiEarthly,
        ziEarthly,
        chouEarthly,
      ][feilianbranchIndex];
  int feiLianIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(feilianBranch)),
  );

  int longChinIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.chenEarthly) +
        earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int fenGeIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.xuEarthly) -
        earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int tianKuIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.wuEarthly) -
        earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int tianXuIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.wuEarthly) +
        earthlyBranches.indexOf(earthlyBranchName.key),
  );

  int tianGuanBranchIndex = heavenlyStems.indexOf(heavenlyStem.key);
  String tianGuanBranch =
      [
        weiEarthly,
        chenEarthly,
        siEarthly,
        yinEarthly,
        maoEarthly,
        youEarthly,
        haiEarthly,
        youEarthly,
        xuEarthly,
        wuEarthly,
      ][tianGuanBranchIndex];
  int tianGuanIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(tianGuanBranch)),
  );

  int tianFuBranchIndex = heavenlyStems.indexOf(heavenlyStem.key);
  String tianFuEarthlyBranch =
      [
        youEarthly,
        shenEarthly,
        ziEarthly,
        haiEarthly,
        maoEarthly,
        yinEarthly,
        wuEarthly,
        siEarthly,
        wuEarthly,
        siEarthly,
      ][tianFuBranchIndex];
  int tianFuIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(tianFuEarthlyBranch)),
  );

  int tianDeIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.youEarthly) +
        earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int yueDeIndex = fixIndex(
    fixEarthlyBranchIndex(EarthlyBranchName.siEarthly) +
        earthlyBranches.indexOf(earthlyBranchName.key),
  );
  int tianKongIndex = fixIndex(
    fixEarthlyBranchIndex(
          getMyEarthlyBranchNameFrom(heavenlyStemEarthlyBranch.yearly[1]),
        ) +
        1,
  );

  int jieLuHeanvelyIndex = heavenlyStems.indexOf(heavenlyStem.key) % 5;
  String jieLuEarthlyBranch =
      [
        shenEarthly,
        wuEarthly,
        chenEarthly,
        yinEarthly,
        ziEarthly,
      ][jieLuHeanvelyIndex];
  int jieLuIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(jieLuEarthlyBranch)),
  );

  int kongWangEarthlyIndex = heavenlyStems.indexOf(heavenlyStem.key) % 5;
  String kongWangEarthlyBranch =
      [
        youEarthly,
        weiEarthly,
        siEarthly,
        maoEarthly,
        chouEarthly,
      ][kongWangEarthlyIndex];
  int kongWangIndex = fixIndex(
    fixEarthlyBranchIndex(getMyEarthlyBranchNameFrom(kongWangEarthlyBranch)),
  );

  int xunKongIndex = fixIndex(
    fixEarthlyBranchIndex(
          getMyEarthlyBranchNameFrom(heavenlyStemEarthlyBranch.yearly[1]),
        ) +
        heavenlyStems.indexOf(guiHeavenly) -
        heavenlyStems.indexOf(heavenlyStem.key) +
        1,
  );
  // 判断命主出生年年支阴阳属性,如果结果为0则为阳,否则为阴
  final yinyang = earthlyBranches.indexOf(earthlyBranchName.key) % 2;
  if (yinyang != xunKongIndex % 2) {
    xunKongIndex = fixIndex(xunKongIndex + 1);
  }

  // int tianShangIndex = fixIndex(
  //   palaces.indexOf("friendsPalace") + soulAndBody.soulIndex,
  // );
  // int tianShiIndex = fixIndex(
  //   palaces.indexOf("healthPalace") + soulAndBody.soulIndex,
  // );
  /// 中州派没有截路空亡,只有一颗截空星
  /// 生年阳干在阳宫,阴干在阴宫
  final jiekongIndex = yinyang == 0 ? jieLuIndex : kongWangIndex;
  final jieshaAdjIndex = getJieShaAdjIndex(earthlyBranchName);
  final nianjieIndex =
      getNianJieIndex(
        getMyEarthlyBranchNameFrom(heavenlyStemEarthlyBranch.yearly[1]),
      )['nianJieIndex'] ??
      -1;
  final daHaoIndex = getDaHaoIndex(earthlyBranchName);
  print('dahaoindex $daHaoIndex');
  final genderYinYang = [GenderName.male, GenderName.female];
  final sameYinYang =
      yinyang == genderYinYang.indexOf(params.gender ?? GenderName.male);
  int tianShangIndex = fixIndex(
    palaces.indexOf(PalaceName.friendsPalace.key) + soulAndBody.soulIndex,
  );
  int tianShiIndex = fixIndex(
    palaces.indexOf(PalaceName.healthPalace.key) + soulAndBody.soulIndex,
  );
  if (config.algorithm == Algorithm.zhongZhou && !sameYinYang) {
    // 中州派的天使天伤与通行版本不一样
    // 天伤奴仆、天使疾厄、夹迁移宫最易寻得
    // 凡阳男阴女,皆依此诀,但若为阴男阳女,则改为天伤居疾厄、天使居奴仆。
    var temp = tianShiIndex;
    tianShiIndex = tianShangIndex;
    tianShangIndex = temp;
  }

  return {
    "xianChiIndex": xianChiIndex,
    "huaGaiIndex": huaGaiIndex,
    "guChenIndex": guChenIndex,
    "guaSuIndex": guasuIndex,
    "tianCaiIndex": tianCaiIndex,
    "tianShouIndex": tianShouIndex,
    "tianChuIndex": tianChuIndex,
    "poSuiIndex": posuiIndex,
    "feiLianIndex": feiLianIndex,
    "longChiIndex": longChinIndex,
    "fenGeIndex": fenGeIndex,
    "tianKuIndex": tianKuIndex,
    "tianXuIndex": tianXuIndex,
    "tianGuanIndex": tianGuanIndex,
    "tianFuIndex": tianFuIndex,
    "tianDeIndex": tianDeIndex,
    "yueDeIndex": yueDeIndex,
    "tianKongIndex": tianKongIndex,
    "jieLuIndex": jieLuIndex,
    "kongWangIndex": kongWangIndex,
    "xunKongIndex": xunKongIndex,
    "tianShangIndex": tianShangIndex,
    "tianShiIndex": tianShiIndex,
    'jieKongIndex': jiekongIndex,
    'jieShaAdjIndex': jieshaAdjIndex,
    'nianJieIndex': nianjieIndex,
    'daHaoIndex': daHaoIndex,
  };
}