private void RecursiveDrawTransformation(Dictionary <TransformationDefinition, ManyToManyNode <TransformationDefinition> > tree, ManyToManyNode <TransformationDefinition> mtmn, ref int xOffset, ref int yOffset)
        {
            if (!mtmn.Current.HasMenuIcon || !mtmn.Current.CheckPrePlayerConditions())
            {
                return;
            }
            Texture2D buffIcon = mtmn.Current.BuffIconGetter.Invoke();

            if (buffIcon == null)
            {
                return;
            }

            UIImageButton transformationButton = null;
            UIImage       unknownImage = null, unknownImageGray = null, lockedImage = null;

            InitButton(ref transformationButton, buffIcon, new MouseEvent((evt, element) => TrySelectingTransformation(mtmn.Current, evt, element)),
                       xOffset, yOffset, backPanelImage);

            InitImage(ref unknownImage, GFX.unknownImage, 0, 0, transformationButton);
            unknownImage.ImageScale = 0f;

            InitImage(ref unknownImageGray, GFX.unknownImageGray, 0, 0, unknownImage);
            unknownImage.ImageScale = 0f;

            InitImage(ref lockedImage, GFX.lockedImage, 0, 0, unknownImageGray);
            lockedImage.ImageScale = 0f;

            _imagePairs.Add(mtmn.Current, new UIImagePair(transformationButton, unknownImage, unknownImageGray, lockedImage));
            _imagePositions.Add(mtmn.Current, new Point(xOffset, yOffset));
            xOffset += buffIcon.Width + SMALL_SPACE;

            int localXOffset = xOffset;

            for (int i = 0; i < mtmn.Next.Count; i++)
            {
                TransformationDefinition nextDef = mtmn.Next[i];
                if (nextDef.BuffIconGetter == null)
                {
                    continue;
                }

                List <Vector2> points = new List <Vector2>();
                points.Add(_imagePositions[mtmn.Current].ToVector2());

                for (int j = 0; j < mtmn.Previous.Count; j++)
                {
                    if (mtmn.Previous[j].BuffIconGetter == null)
                    {
                        continue;
                    }

                    points.Add(_imagePositions[mtmn.Previous[j]].ToVector2());
                }

                _polyLinesToDraw.Add(points.ToArray());

                RecursiveDrawTransformation(tree, tree[nextDef], ref xOffset, ref yOffset);

                if (i + 1 < mtmn.Next.Count)
                {
                    yOffset += buffIcon.Height + SMALL_SPACE * 2;
                }

                xOffset = localXOffset;
            }
        }
Exemple #2
0
        public void HandleTransformations()
        {
            TransformationDefinition targetTransformation = null;
            TransformationDefinition transformation       = GetCurrentTransformation();

            // TODO Handle all of the multi-transformation aspects.
            // player has just pressed the normal transform button one time, which serves two functions.
            if (IsTransformingUpOneStep())
            {
                if (transformation != null)
                {
                    NodeTree <TransformationDefinition>       tree = TransformationDefinitionManager.Tree;
                    ManyToManyNode <TransformationDefinition> mtmn = tree[transformation];

                    if (mtmn.Next.Count == 0)
                    {
                        return;
                    }

                    // Find the first available transformation.
                    for (int i = 0; i < mtmn.Next.Count; i++)
                    {
                        // TODO Verify this is the actual method to use.
                        if (CanTransform(mtmn.Next[i]))
                        {
                            targetTransformation = mtmn.Next[i];
                            break;
                        }
                    }

                    // TODO Dynamicize this
                    // player is ascending transformation, pushing for ASSJ or USSJ depending on what form they're in.

                    /*if (IsAscendingTransformation() && CanAscend())
                     * {
                     *  if (transformation == TransformationDefinitionManager.SSJ1Definition)
                     *      targetTransformation = TransformationDefinitionManager.ASSJDefinition;
                     *  else if (transformation == TransformationDefinitionManager.ASSJDefinition)
                     *      targetTransformation = TransformationDefinitionManager.USSJDefinition;
                     * }*/
                }
                else
                {
                    // first attempt to step up to the selected form in the menu.
                    targetTransformation = UI.TransformationMenu.SelectedTransformation;
                }

                // TODO Add this again maybe ?
                // if for any reason we haven't gotten our transformation target, try the next step instead.

                /*if (targetTransformation == null)
                 * {
                 *  targetTransformation = player.GetNextTransformationStep();
                 * }*/
            }
            else if (IsPoweringDownOneStep() && IsPlayerTransformed() && transformation != TransformationDefinitionManager.KaiokenDefinition)
            {
                if (transformation.Parents.Length == 1)
                {
                    // player is powering down a transformation state.
                    targetTransformation = transformation.Parents[0];
                }
            }

            // if we made it this far without a target, it means for some reason we can't change transformations.
            if (targetTransformation == null)
            {
                return;
            }

            // finally, check that the transformation is really valid and then do it.
            if (CanTransform(targetTransformation))
            {
                DoTransform(targetTransformation);
            }
        }