Example #1
0
        public HexVector AddVectors(RawHexVector vectorA, RawHexVector vectorB)
        {
            var rawVector = new RawHexVector();

            rawVector.AddComponents(vectorA.Components);
            rawVector.AddComponents(vectorB.Components);

            return(ConsolidateAndCopyVector(rawVector));
        }
Example #2
0
        public void ConsolidateVector(RawHexVector rawVector)
        {
            List <HexVectorComponent> reductedComponents = rawVector.Components.ToList();

            rawVector.ClearComponents();
            rawVector.AddComponent(ConsolidateCardinalDirection(HexAxis.Up, reductedComponents));

            do
            {
                // Step 1. Consolidate opposing vectors.
                reductedComponents = new List <HexVectorComponent>
                {
                    ConsolidateCardinalDirection(HexAxis.A, reductedComponents),
                    ConsolidateCardinalDirection(HexAxis.B, reductedComponents),
                    ConsolidateCardinalDirection(HexAxis.C, reductedComponents)
                };

                reductedComponents = reductedComponents.Where(av => av.Magnitude > 0).ToList();
                HexVectorComponent fittingVectorA,
                                   fittingVectorB;
                // Step 2. Consolidate vectors 120 degree apart.
                var medianDirection = FindVectors120Apart(reductedComponents, out fittingVectorA, out fittingVectorB);
                if (medianDirection != null && fittingVectorA != null && fittingVectorB != null)
                {
                    int minimumMagnitude = Math.Min(fittingVectorA.Magnitude, fittingVectorB.Magnitude);
                    fittingVectorA.Magnitude -= minimumMagnitude;
                    fittingVectorB.Magnitude -= minimumMagnitude;
                    reductedComponents.Add(new HexVectorComponent(medianDirection.Value, minimumMagnitude)); //This one will be resolved in the next iteration.
                }
            }while (reductedComponents.Count > 2 || HasVectors120Apart(reductedComponents));

            rawVector.AddComponents(reductedComponents);
        }