public static State GenerateInitialNode (bool is_double, ICostFactory cost_factory) { State initial = new State(null, 0.0f, -1, false); initial.limbs[0] = new Analyzer.State.Limb(); initial.limbs[1] = new Analyzer.State.Limb(); if (is_double) { initial.limbs[0].main = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[4], 0.0f, 0.0f, 0.0f ); initial.limbs[0].sub = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[3], 0.0f, 0.0f, 0.0f ); initial.limbs[0].extra = new Analyzer.State.Part( Analyzer.State.Movement.Unknown, null, 0.0f, 0.0f, 0.0f ); initial.limbs[1].main = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[5], 0.0f, 0.0f, 0.0f ); initial.limbs[1].sub = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[6], 0.0f, 0.0f, 0.0f ); initial.limbs[1].extra = new Analyzer.State.Part( Analyzer.State.Movement.Unknown, null, 0.0f, 0.0f, 0.0f ); } else { initial.limbs[0].main = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[0], 0.0f, 0.0f, 0.0f ); initial.limbs[0].sub = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[1], 0.0f, 0.0f, 0.0f ); initial.limbs[0].extra = new Analyzer.State.Part( Analyzer.State.Movement.Unknown, null, 0.0f, 0.0f, 0.0f ); initial.limbs[1].main = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[4], 0.0f, 0.0f, 0.0f ); initial.limbs[1].sub = new Analyzer.State.Part( Analyzer.State.Movement.PassiveDown, Panel.Panels_1D_Playable[3], 0.0f, 0.0f, 0.0f ); initial.limbs[1].extra = new Analyzer.State.Part( Analyzer.State.Movement.Unknown, null, 0.0f, 0.0f, 0.0f ); } initial.facing = new Vector(0.0f, 1.0f); initial.facing_desired = new Vector(0.0f, 1.0f); initial.sanityCheck(); initial.cost = cost_factory.Calculate(initial); return initial; }
public static State TransitionTo (State from, Limb[] to, float second, int distance_from_start, Beat beat, ICostFactory cost_factory) { State nxt = null; Vector facing = FacingCalculator.Calculate(to, from.facing); Vector facing_desired = FacingCalculator.CalculateDesiredFacing(facing, from.facing_desired); if (IsArcValidWithoutCrossing(to, facing_desired)) { nxt = new State(from, second, distance_from_start, false); } else if (IsArcValidWithCrossing(to, facing_desired)) { //nxt = new State(from, second, distance_from_start, true); return null; } else { return null; } //Transition for (int i = 0; i < from.limbs.Length; ++i) { nxt.limbs[i] = to[i]; } nxt.beat = beat; nxt.facing = facing; nxt.facing_desired = facing_desired; nxt.sanityCheck(); nxt.cost = cost_factory.Calculate(nxt); return nxt; }