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