public override void Receive(Farmer source, List <object> data) { for (int i = 0; i < Game1.player.items.Count; i++) { if (Game1.player.items[i] is not StardewValley.Objects.Hat) { Game1.player.items[i] = null; } } DelayedAction.functionAfterDelay(() => { if (!ModEntry.BRGame.InProgress) { return; } var oldLocation = Game1.player.currentLocation; var oldPosition = new xTile.Dimensions.Location( (int)Game1.player.Position.X - Game1.viewport.Width / 2, (int)Game1.player.Position.Y - Game1.viewport.Height / 2 ); SpectatorMode.EnterSpectatorMode(oldLocation, oldPosition); }, 1000); }
/** * * FOLLOW MODE * Makes the spectator follow a live player * **/ private void setFollowCameraMode() { _spectatorMode = SpectatorMode.FOLLOW; _ui.modeSwitch(SpectatorMode.FOLLOW); _thirdPersonCamera.enabled = true; switchPlayerView(_currentPlayerIdx); }
public void modeSwitch(SpectatorMode mode) { this.mode = mode; spectatingNameText.gameObject.SetActive(mode == SpectatorMode.FOLLOW); transform.GetChild(1).gameObject.SetActive(mode == SpectatorMode.FOLLOW); transform.GetChild(3).gameObject.SetActive(mode == SpectatorMode.FOLLOW); }
protected override void Parse(ref BitStreamReader bsr) { SpecMode = (SpectatorMode)bsr.ReadByte(); Target1 = bsr.ReadByte(); Target2 = bsr.ReadByte(); Unknown = bsr.ReadByte(); }
public override bool SetSpectatorID(SpectatorMode mode, int spectatorId) { if (SpectatorMode == mode && mode != SpectatorMode.Player || SpectatorMode == SpectatorMode.Player && mode == SpectatorMode.Player && (spectatorId == -1 || SpectatorId == spectatorId || ClientId == spectatorId)) { return(false); } if (Team == Team.Spectators) { if (mode != SpectatorMode.Player || mode == SpectatorMode.Player && GameContext.Players[SpectatorId] != null && GameContext.Players[SpectatorId].Team != Team.Spectators) { if (mode == SpectatorMode.FlagRed || mode == SpectatorMode.FlagBlue) { foreach (var flag in Flag.Entities) { if (flag.Team == Team.Red && mode == SpectatorMode.FlagRed || flag.Team == Team.Blue && mode == SpectatorMode.FlagBlue) { SpectatorFlag = null; SpectatorId = flag.Carrier?.Player.ClientId ?? -1; break; } } if (SpectatorFlag == null) { return(false); } SpectatorMode = mode; return(true); } SpectatorFlag = null; SpectatorMode = mode; SpectatorId = spectatorId; return(true); } } else if (DeadSpectatorMode) { if (mode == SpectatorMode.Player && DeadCanFollow(GameContext.Players[SpectatorId])) { SpectatorMode = mode; SpectatorFlag = null; SpectatorId = spectatorId; return(true); } } return(false); }
/** * * FREE MOVE MODE * Allows the spectator to move freely around the arena * **/ private void setFreeCameraMode() { _spectatorMode = SpectatorMode.FREE; _ui.modeSwitch(SpectatorMode.FREE); _thirdPersonCamera.enabled = false; _freeCameraTarget.SetActive(true); _freeCameraTarget.transform.position = transform.position;// _thirdPersonCamera.getTarget().position; transform.SetParent(_freeCameraTarget.transform); transform.localPosition = Vector3.zero; }
IEnumerator Change(SpectatorMode newMode) { yield return(new WaitForSeconds(0.5f)); mode = newMode; freeCameraGameobject.SetActive(false); cinematicCameraGameobject.SetActive(false); camera.GetComponent <Camera>().enabled = true; if (_cameraObjects.Count > 1) { _cameraObjects[1].enabled = false; } if (_cameraObjects.Count > 2) { _cameraObjects[2].enabled = false; } switch (mode) { case SpectatorMode.Free: _dof.dofEnable = false; freeCameraGameobject.SetActive(true); break; case SpectatorMode.Cinematic: _dof.dofEnable = true; cinematicCameraGameobject.SetActive(true); timeline.Stop(); timeline.time = times[Random.Range(0, times.Count - 1)]; timeline.Evaluate(); timeline.Play(); break; case SpectatorMode.View: _dof.dofEnable = false; if (_cameraObjects.Count != 1) { camera.GetComponent <Camera>().enabled = false; _cameraObjects[_current].enabled = true; _cameraObjects[_current].fieldOfView = 70; if (_current == 1 && _cameraObjects.Count == 3) { _current = 2; } else if (_current == 2) { _current = 1; } } break; } }
private void setSpectatorMode(SpectatorMode mode) { switch (mode) { case SpectatorMode.FOLLOW: setFollowCameraMode(); break; case SpectatorMode.FREE: setFreeCameraMode(); break; default: throw new InvalidOperationException("This should not happen!"); } }
public static void TakeDamage(Farmer who, DamageSource source, int damage, long?damagerID = null, string monster = "") { if (!ModEntry.BRGame.InProgress) { damage = 0; } if (who != Game1.player) { NetworkUtils.SendDamageToPlayer(who, source, damage, damagerID); return; } if (IsDying(Game1.player)) { return; } Round round = ModEntry.BRGame.GetActiveRound(); Game1.currentMinigame = null; Farmer damager = null; if (damagerID != null) { damager = Game1.getFarmer((long)damagerID); } if (damager != null && Game1.player != damager && IsOnSameTeamAs(Game1.player, damager)) { return; } if (source != DamageSource.MONSTER) { bool oldIsEating = Game1.player.isEating; Game1.player.isEating = false; // Prevent invincibility Game1.player.takeDamage(source, damage, false, damager); Game1.player.isEating = oldIsEating; } bool wasInvincible = Game1.player.temporarilyInvincible; //Hit shake timer / Invincibility frames if (source != DamageSource.THORNS && !round.IsSpecialRoundType(SpecialRoundType.SLUGFEST) && !Game1.player.temporarilyInvincible) { int invincibilityDuration = 1200; int multiplier = Game1.player.GetEffectsOfRingMultiplier(861); invincibilityDuration += 1000 * multiplier; NetworkMessage.Send( NetworkUtils.MessageTypes.TELL_PLAYER_HIT_SHAKE_TIMER, NetworkMessageDestination.ALL, new List <object>() { invincibilityDuration } ); } if (Game1.player.health <= 0) { ResetStatistics(); Game1.player.CanMove = false; NetworkMessage.Send( NetworkUtils.MessageTypes.SEND_DEATH_ANIMATION, NetworkMessageDestination.ALL, new List <object>() ); DelayedAction.functionAfterDelay(() => { Random random = new(); //Spawn their items onto the floor foreach (var item in Game1.player.Items) { if (item != null) { if (item is not Tool || item is MeleeWeapon || item is Slingshot) { Debris debris = new(item, Game1.player.getStandingPosition(), Game1.player.getStandingPosition() + new Vector2(64 * (float)(random.NextDouble() * 2 - 1), 64 * (float)(random.NextDouble() * 2 - 1))); Game1.currentLocation.debris.Add(debris); } } } var oldLocation = Game1.player.currentLocation; var oldPosition = new xTile.Dimensions.Location( (int)Game1.player.Position.X - Game1.viewport.Width / 2, (int)Game1.player.Position.Y - Game1.viewport.Height / 2); ClearInventory(); SpectatorMode.EnterSpectatorMode(oldLocation, oldPosition); NetworkUtils.AnnounceClientDeath(source, monster, damagerID); }, 1800); } else if (source == DamageSource.PLAYER && damage > 0 && canBeKnockedBack && damager != null && !wasInvincible) // Knockback { double amount = 10 + 8 * (-1 + 2 / (1 + Math.Pow(Math.E, -0.03 * damage))); amount = Math.Min(18, amount); //Just in case if (damager.leftRing.Value != null && damager.leftRing.Value.GetsEffectOfRing(529)) { amount *= 1.5; } if (damager.rightRing.Value != null && damager.rightRing.Value.GetsEffectOfRing(529)) { amount *= 1.5; } Vector2 displacement = Vector2.Subtract(Game1.player.Position, damager.Position); if (displacement.LengthSquared() != 0) { displacement.Normalize(); displacement.Y *= -1; displacement = Vector2.Multiply(displacement, (float)amount); Game1.player.setTrajectory((int)displacement.X, (int)displacement.Y); } } }
public void EnableMode(SpectatorMode newMode) { animator.SetTrigger("Cut"); StartCoroutine(Change(newMode)); }
public abstract bool SetSpectatorID(SpectatorMode mode, int spectatorId);