コード例 #1
0
ファイル: CardGameUI.cs プロジェクト: Crapsky233/Entrogic
        public override void Update(GameTime gameTime)
        {
            if (Main.dedServ)
            {
                return;
            }
            Player         clientPlayer    = Main.LocalPlayer;
            EntrogicPlayer clientModPlayer = EntrogicPlayer.ModPlayer(clientPlayer);

            for (int i = 0; i < HandCardSlots.Count; i++)
            {
                Item slotitem = new Item();
                slotitem.SetDefaults(clientModPlayer.CardGameType[i]);
                HandCardSlots[i].inventoryItem = slotitem;
                HandCardSlots[i].Update();
            }
            NPCCardSlot.Update();

            bool pause = (!Main.hasFocus || Main.gamePaused) && Main.netMode == NetmodeID.SinglePlayer;

            if (pause)
            {
                return;
            }
            if (clientModPlayer.CardGameNPCIndex == -1)
            {
                return;
            }
            //clientModPlayer._bullets = new List<CardFightBullet>() // 意思意思
            //{
            //    new MushroomBullet()
            //    {
            //        Position = new Vector2(100f, 100f)
            //    }
            //};
            NPC npc = Main.npc[clientModPlayer.CardGameNPCIndex];

            if (npc.type != NPCID.None && npc.modNPC is CardFightableNPC) // 表示此ModNPC属于CardFightableNPC
            {
                CardFightableNPC fightNPC = (CardFightableNPC)npc.modNPC;
                fightNPC.PanelPosition = PanelPos;
                if (clientModPlayer.CardGaming != fightNPC.CardGaming)
                {
                    QuitGame();                                                    // 必须要同为一个状态的
                }
                if (fightNPC.CardGaming && clientModPlayer.CardGaming)
                {
                    if (!clientPlayer.active || clientPlayer.dead || !npc.active)
                    {
                        QuitGame();
                        return;
                    }
                    clientPlayer.stoned            = true;
                    clientPlayer.noKnockback       = true;
                    npc.dontTakeDamageFromHostiles = true;
                    npc.dontTakeDamage             = true;
                    #region NPC Stand
                    if (npc.ai[0] != 0f)
                    {
                        npc.netUpdate = true;
                    }
                    npc.ai[0]      = 0f;
                    npc.ai[1]      = 300f;
                    npc.localAI[3] = 100f;
                    if (Main.LocalPlayer.Center.X < npc.Center.X)
                    {
                        npc.direction = -1;
                    }
                    else
                    {
                        npc.direction = 1;
                    }
                    npc.spriteDirection = npc.direction;
                    #endregion
                    clientModPlayer.CardGameNPCHealth    = fightNPC.CardGameHealth;
                    clientModPlayer.CardGameNPCMaxHealth = fightNPC.CardGameHealthMax;
                    if (Deathing != 0)
                    {
                        return;
                    }
                    if (clientModPlayer.CardGamePlayerTurn) // 玩家局
                    {
                        foreach (HandCardSlot slot in HandCardSlots)
                        {
                            slot.PlayerTurn = true;
                        }
                        if (PlayerTurnOver) // 转NPC局
                        {
                            IsUseBiggerTexture = false;
                            clientModPlayer.CardGamePlayerTurn = false;
                            fightNPC.PreStartRound(false);
                            Main.PlaySound(Entrogic.Instance.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/CGChangeTurn"));

                            TimerCountdown = 0;
                            AnimationTimer = 0;
                            TurnText       = Language.GetTextValue("Mods.Entrogic.Common.NPCTurn");

                            CardGamePlayer player = new CardGamePlayer()
                            {
                                Center     = PlaygroundSize / 2f,
                                UIPosition = PanelPos
                            };
                            clientModPlayer._bullets.Add(player);
                            for (int i = 0; i < HandCardSlots.Count; i++)
                            {
                                clientModPlayer.CardGameType[i] = ItemID.None;
                            }
                            NPCCardSlot.ActiveAnimation();
                        }
                    }
                    if (!clientModPlayer.CardGamePlayerTurn) // NPC局
                    {
                        foreach (HandCardSlot slot in HandCardSlots)
                        {
                            slot.PlayerTurn = false;
                            slot.Clicked    = false;
                        }
                        fightNPC.GameAI();
                        fightNPC.RoundDuration -= (float)gameTime.ElapsedGameTime.TotalSeconds;
                        if (fightNPC.RoundDuration <= 0) // 转玩家局
                        {
                            PlayerTurnOver = false;
                            clientModPlayer.CardGamePlayerTurn = true;
                            fightNPC.PreStartRound(true);
                            IsUseBiggerTexture = true;
                            Main.PlaySound(Entrogic.Instance.GetLegacySoundSlot(SoundType.Custom, "Sounds/Custom/CGChangeTurn"));
                            for (int i = 0; i < clientModPlayer._bullets.Count; i++)
                            {
                                if (clientModPlayer._bullets[i].IsFriendly == false)
                                {
                                    clientModPlayer._bullets[i].Kill(clientPlayer);
                                    clientModPlayer._bullets.RemoveAt(i);
                                    i--;
                                }
                            }

                            clientModPlayer.CardGameLeftCard = 1; // 设置出牌机会
                            //List<int> buffer = new List<int>();
                            //foreach (int card in clientModPlayer.CardType)
                            //    buffer.Add(card);
                            //for (int i = 0; i < clientModPlayer.CardGameType.Length; i++)
                            //{
                            //    int chosed = Main.rand.Next(0, buffer.Count);
                            //    clientModPlayer.CardGameType[i] = buffer[chosed];
                            //    buffer.RemoveAt(chosed);
                            //}

                            TimerCountdown = 0;
                            AnimationTimer = 0;
                            TurnText       = Language.GetTextValue("Mods.Entrogic.Common.PlayerTurn");
                        }
                    }
                    foreach (var bullet in clientModPlayer._bullets.ToArray())
                    {
                        bullet.Update(gameTime, clientPlayer, npc);
                    }
                    for (int i = 0; i < clientModPlayer._bullets.Count; i++)
                    {
                        if (clientModPlayer._bullets[i].IsRemoved)
                        {
                            clientModPlayer._bullets[i].Kill(clientPlayer);
                            clientModPlayer._bullets.RemoveAt(i);
                            i--;
                        }
                    }
                    foreach (var particle in clientModPlayer._particles.ToArray())
                    {
                        particle.Update(gameTime);
                    }
                    for (int i = 0; i < clientModPlayer._particles.Count; i++)
                    {
                        if (clientModPlayer._particles[i].IsRemoved)
                        {
                            clientModPlayer._particles.RemoveAt(i);
                            i--;
                        }
                    }
                    clientModPlayer.CardGamePlayerHealth   = Math.Min(clientModPlayer.CardGamePlayerHealth, clientModPlayer.CardGamePlayerMaxHealth);
                    clientModPlayer.CardGameHealthAlpha    = Math.Min(clientModPlayer.CardGameHealthAlpha + 0.02f, 1f);
                    clientModPlayer.CardGameNPCHealthAlpha = Math.Min(clientModPlayer.CardGameNPCHealthAlpha + 0.02f, 1f);
                    if (clientModPlayer.CardGamePlayerLastHealth != clientModPlayer.CardGamePlayerHealth)
                    {
                        clientModPlayer.CardGameHealthAlpha = -2; // 这样就不用再搞Delay变量了
                        DelayHealthPercentPlayer            = 0f;
                        LastRecordHealthPlayer = clientModPlayer.CardGamePlayerLastHealth;
                    }
                    if (clientModPlayer.CardGameNPCLastHealth != clientModPlayer.CardGameNPCHealth)
                    {
                        clientModPlayer.CardGameNPCHealthAlpha = -2; // 这样就不用再搞Delay变量了
                        DelayHealthPercentNPC = 0f;
                        LastRecordHealthNPC   = clientModPlayer.CardGameNPCLastHealth;
                    }
                    clientModPlayer.CardGamePlayerLastHealth = clientModPlayer.CardGamePlayerHealth;
                    clientModPlayer.CardGameNPCLastHealth    = clientModPlayer.CardGameNPCHealth;
                    // NPC没血,NPC输玩家赢
                    if (clientModPlayer.CardGameNPCHealth <= 0)
                    {
                        fightNPC.CardGameLost();
                        PlayerWin();
                        clientModPlayer._bullets.Clear();
                        Deathing = 2; // NPC死

                        TimerCountdown = 0;
                        AnimationTimer = 0;
                        TurnTextColor  = new Color(228, 196, 74);
                        TurnText       = Language.GetTextValue("Mods.Entrogic.Common.YouWin");
                    }
                    // 玩家没血,NPC赢玩家输
                    if (clientModPlayer.CardGamePlayerHealth <= 0)
                    {
                        fightNPC.CardGameWin();
                        PlayerLost();
                        clientModPlayer._bullets.Clear();
                        Deathing = 1; // 玩家死

                        TimerCountdown = 0;
                        AnimationTimer = 0;
                        TurnTextColor  = new Color(242, 12, 12);
                        TurnText       = Language.GetTextValue("Mods.Entrogic.Common.YouLost");
                    }
                }
            }
            else
            {
                clientModPlayer.CardGameNPCIndex = -1;
            }

            base.Update(gameTime);
        }