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; } }
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); } }