summaryrefslogtreecommitdiff
path: root/src/SomhairlesDream.Modeling/Definitions.fs
blob: 9a9256e387b552204e81c77aa99f00473a31ea46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
namespace SomhairlesDream.Modeling

open SomhairlesDream.Shared

[<CLIMutable>]
type DesignStep =
    { StepId: string
      Index: int
      ObjectIds: string array
      Changes: ArtifactChange array }

module Design =
    let steps : DesignStep array =
        [| { StepId = "01-foundation"; Index = 0
             ObjectIds = [| "heritage.foundation"; "heritage.deck" |]
             Changes =
                 [| { ObjectId = "heritage.foundation"; Kind = "add"; Summary = "Add foundation slab" }
                    { ObjectId = "heritage.deck"; Kind = "add"; Summary = "Add raised deck" } |] }
           { StepId = "02-frame"; Index = 1
             ObjectIds =
                 [| "heritage.foundation"; "heritage.deck"; "heritage.frame.left"; "heritage.frame.right"; "heritage.spine" |]
             Changes =
                 [| { ObjectId = "heritage.frame.left"; Kind = "add"; Summary = "Add primary left frame" }
                    { ObjectId = "heritage.frame.right"; Kind = "add"; Summary = "Add primary right frame" }
                    { ObjectId = "heritage.spine"; Kind = "add"; Summary = "Add central spine" } |] }
           { StepId = "03-cabin"; Index = 2
             ObjectIds =
                 [| "heritage.foundation"; "heritage.deck"; "heritage.frame.left"; "heritage.frame.right"; "heritage.spine"; "heritage.cabin"; "heritage.crossbeam" |]
             Changes =
                 [| { ObjectId = "heritage.cabin"; Kind = "add"; Summary = "Add cabin volume" }
                    { ObjectId = "heritage.crossbeam"; Kind = "add"; Summary = "Add cabin crossbeam" } |] } |]

    // YJ-01 Voyager-class current-tech probe (source: interstellar-dual-track/current-tech-probe
    // scripts/build_probe.py, line ranges cited per step). Object ids map the legacy
    // UPPER_SNAKE names onto lowercase dotted ids via documented rule
    // (probe.bus.bay.panel.00 <- BUS_BAY_PANEL_00, probe.rtg.01.fin.00 <- RTG_01_FIN_0).
    // Display plinth, information card and MODEL_LABEL are intentionally excluded.
    let probeSteps : DesignStep array =
        let bus =
            [| "probe.bus.electronics.decagon"; "probe.bus.ring.front"; "probe.bus.ring.rear"
               "probe.bus.bay.panel.00"; "probe.bus.bay.panel.01"; "probe.bus.bay.panel.02"
               "probe.bus.bay.panel.03"; "probe.bus.bay.panel.04"; "probe.bus.bay.panel.05"
               "probe.bus.bay.panel.06"; "probe.bus.bay.panel.07"; "probe.bus.bay.panel.08"
               "probe.bus.bay.panel.09"
               "probe.bus.mli.top"; "probe.bus.mli.bottom"
               "probe.bus.radiator.port"; "probe.bus.radiator.starboard"
               "probe.aacs"
               "probe.thruster.01"; "probe.thruster.02"; "probe.thruster.03"; "probe.thruster.04" |]
        let booms =
            [| "probe.rtg.boom"
               "probe.mag.boom"; "probe.mag.head"; "probe.mag.sensor.a"; "probe.mag.sensor.b"
               "probe.pws.antenna.left"; "probe.pws.antenna.right"
               "probe.pws.tip.left"; "probe.pws.tip.right" |]
        let rtgs =
            [| "probe.rtg.01"; "probe.rtg.01.fin.00"; "probe.rtg.01.fin.01"; "probe.rtg.01.fin.02"
               "probe.rtg.02"; "probe.rtg.02.fin.00"; "probe.rtg.02.fin.01"; "probe.rtg.02.fin.02"
               "probe.rtg.03"; "probe.rtg.03.fin.00"; "probe.rtg.03.fin.01"; "probe.rtg.03.fin.02" |]
        let hga =
            [| "probe.hga.reflector"; "probe.hga.feed"
               "probe.hga.strut.00"; "probe.hga.strut.01"; "probe.hga.strut.02"; "probe.hga.strut.03" |]
        let instruments =
            [| "probe.scan.pivot"; "probe.scan.platform"
               "probe.crs"; "probe.plasma"; "probe.optical"; "probe.optical.aperture" |]
        let mast = [| "probe.science.boom" |]
        let prior (prefix: string array) (current: string array) =
            Array.append prefix current

        let busChanges = bus |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add ten-sided bus with bay panels, MLI and radiators" })
        let boomChanges = booms |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add fields-and-particles and RTG support booms" })
        let rtgChanges = rtgs |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add three RTGs with heat-rejection fins" })
        let hgaChanges = hga |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add high-gain antenna, feed and struts" })
        let instrumentChanges = instruments |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add articulated scan platform with science instruments" })
        let mastChanges = mast |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add deployable science mast" })
        let liveryChanges =
            [| { ObjectId = "probe.hga.reflector"; Kind = "update"; Summary = "Livery pass: reflector white finish" }
               { ObjectId = "probe.bus.mli.top"; Kind = "update"; Summary = "Livery pass: MLI gold foil finish" }
               { ObjectId = "probe.bus.bay.panel.01"; Kind = "update"; Summary = "Livery pass: restrained red accents on bay panels" }
               { ObjectId = "probe.pws.tip.left"; Kind = "update"; Summary = "Livery pass: red antenna tip markers" }
               { ObjectId = "probe.bus.electronics.decagon"; Kind = "update"; Summary = "Livery pass: body blue basecoat" }
               { ObjectId = "probe.rtg.01"; Kind = "update"; Summary = "Livery pass: graphite RTG housings" } |]

        [| { StepId = "probe-01-bus"; Index = 0; ObjectIds = bus; Changes = busChanges }
           { StepId = "probe-02-boom"; Index = 1; ObjectIds = prior bus booms; Changes = boomChanges }
           { StepId = "probe-03-rtg"; Index = 2; ObjectIds = prior (prior bus booms) rtgs; Changes = rtgChanges }
           { StepId = "probe-04-hga"; Index = 3; ObjectIds = prior (prior (prior bus booms) rtgs) hga; Changes = hgaChanges }
           { StepId = "probe-05-instruments"; Index = 4
             ObjectIds = prior (prior (prior (prior bus booms) rtgs) hga) instruments; Changes = instrumentChanges }
           { StepId = "probe-06-mast"; Index = 5
             ObjectIds = prior (prior (prior (prior (prior bus booms) rtgs) hga) instruments) mast
             Changes = mastChanges }
           { StepId = "probe-07-livery"; Index = 6
             ObjectIds = prior (prior (prior (prior (prior (prior bus booms) rtgs) hga) instruments) mast) [||]
             Changes = liveryChanges } |]

    let forProject (projectId: string) : DesignStep array =
        if projectId.StartsWith("probe-") then probeSteps else steps