public void HandleTransformations() { TransformationDefinition targetTransformation = null; TransformationDefinition transformation = GetCurrentTransformation(); if (ActiveTransformations.Count > 0 || PreviousTransformations.Count > 0) { PreviousTransformations = new List <TransformationDefinition>(ActiveTransformations); } // 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 && transformation.OnPlayerTryAscend(this)) { 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 = 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.OnPlayerTryDescend(this) && 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)) { TransformationDefinition lastTransformation = transformation; DoTransform(targetTransformation); if (lastTransformation != null) { lastTransformation.OnTransformationEnded(this); } } }