protected override void SequenceMainBranch()
        {
            switch (SequenceStep)
            {
            case 0:
                //If, for whatever reason, a Duplighost isn't using this move, then just continue
                if (DuplighostRef == null)
                {
                    Debug.LogWarning($"{User.Name} is not a Duplighost, so nothing will happen!");
                    ChangeSequenceBranch(SequenceBranch.End);
                    break;
                }

                BattleEntity entityDisguised = EntitiesAffected[0];

                //Copy the animations of the entity
                DuplighostRef.CopyEntityAnimations(entityDisguised.AnimManager);

                //See which Partner the Duplighost is disguised as
                BattlePartner partnerDisguised = entityDisguised as BattlePartner;
                if (partnerDisguised != null)
                {
                    DuplighostRef.PartnerTypeDisguise = partnerDisguised.PartnerType;

                    //If disguising as Watt, add Electrified, Watt's light source, and Watt's Payback
                    if (DuplighostRef.PartnerTypeDisguise == Enumerations.PartnerTypes.Watt)
                    {
                        DuplighostRef.EntityProperties.AddPhysAttribute(Enumerations.PhysicalAttributes.Electrified);
                        DuplighostRef.EntityProperties.AddAdditionalProperty(Enumerations.AdditionalProperty.LightSource,
                                                                             partnerDisguised.EntityProperties.GetAdditionalProperty <double>(Enumerations.AdditionalProperty.LightSource));

                        //Copy Watt's Payback
                        Watt watt = partnerDisguised as Watt;

                        StatusGlobals.PaybackHolder wattPayback = watt.ElectricPayback;
                        DuplighostRef.PaybackCopied = wattPayback;
                        DuplighostRef.EntityProperties.AddPayback(wattPayback);
                    }
                    //Do an Easter Egg by replicating PM's glitchy behavior when Duplighosts disguise as Goompa
                    //Kill off the Duplighost, and set Mario to its position
                    else if (DuplighostRef.PartnerTypeDisguise == Enumerations.PartnerTypes.Goompa)
                    {
                        //Make sure Mario is in battle (he should be!)
                        if (User.BManager.Mario != null)
                        {
                            User.BManager.Mario.Position = DuplighostRef.Position;
                        }

                        DuplighostRef.Die();
                    }
                }

                //If copying a Flippable BattleEntity, copy its Flippable behavior
                IFlippableEntity flippableEnt = entityDisguised as IFlippableEntity;
                if (flippableEnt != null)
                {
                    DuplighostRef.FlippableBehavior = flippableEnt.FlippedBehavior.CopyBehavior(DuplighostRef);
                }

                //Copy its Defense and height state
                DuplighostRef.BattleStats.BaseDefense = entityDisguised.BattleStats.BaseDefense;

                //Handle marking that it's airborne
                if (entityDisguised.HeightState == Enumerations.HeightStates.Airborne)
                {
                    DuplighostRef.ChangeHeightState(entityDisguised.HeightState);
                    DuplighostRef.SetBattlePosition(DuplighostRef.BattlePosition - new Vector2(0f, BattleGlobals.AirborneY));
                    DuplighostRef.Position = DuplighostRef.BattlePosition;
                }

                CurSequenceAction = new WaitSeqAction(DisguiseWaitDur);
                ChangeSequenceBranch(SequenceBranch.End);
                break;

            default:
                PrintInvalidSequence();
                break;
            }
        }
Esempio n. 2
0
 public FlippedBattleEvent(IFlippableEntity flippableEntity)
 {
     FlippableEntity = flippableEntity;
 }