void Start() { wb = FindObjectOfType <WeaponBench>(); pab = FindObjectOfType <PassiveBench>(); pob = FindObjectOfType <PowerupBench>(); mp = FindObjectOfType <MusicPlayer>(); ic = FindObjectOfType <InputController>(); gops = FindObjectOfType <GameOptions>(); TMPBUI = GameObject.Find("TMPBUI").GetComponent <TextMeshProUGUI>(); TMPTUT = GameObject.Find("TMPTUT").GetComponent <TextMeshProUGUI>(); TMPTUI = GameObject.Find("TMPTUI").GetComponent <TextMeshProUGUI>(); TMPHS = GameObject.Find("TMPHS").GetComponent <TextMeshProUGUI>(); TMPBank = GameObject.Find("TMPBank").GetComponent <TextMeshPro>(); TMPTime = GameObject.Find("TMPTime").GetComponent <TextMeshPro>(); tutanim = TMPTUT.GetComponent <Animator>(); altar = FindObjectOfType <Altar>(); player = FindObjectOfType <Player>(); statl = FindObjectOfType <StatLibrary>(); sc = FindObjectOfType <SpawnController>(); TMPHS.text = ""; TMPTUT.text = ""; ClearStats(); killtext = "Kill enemies to get necromantic energy (Detrizide)."; dttext = "Press or hold the " + ic.Detrizide + " key when weapon is flashing to spend energy and cast spells. Do this constantly."; weapontext = "Collect weapons from the gold flashing altar in the middle once their cost has been paid."; passivetext = "Collect passive upgrades from the blue flashing altar to the west once their cost has been paid. "; poweruptext = "Powerups will periodically become available. Acquire them from the red flashing altar in the east to temporarily gain a bonus."; ammotext = "Some weapons run out of ammo. Switch weapons using " + ic.CycleWeapons + " or " + ic.NextWeapon + " to refill ammo."; swtext = "The Void Cannon and Devourer weapons are superweapons. These do immense damage, but cost banked Detrizide to use. Cost increases each use. "; }
public bool CanProgressToNextRoom() { if (SpawningWaveInProgress) { return(false); } foreach (var unit in AllUnits) { if (unit.Owner == OwnerId.Enemy) { return(false); } } foreach (var entry in AllObjects) { if (entry is Altar) { Altar A = entry as Altar; if (!A.Complete) { return(false); } } } return(true); }
public void Reset() { selectedAction = new Rest(); DaysLeft = 10; wentToMission = false; resources.Clear(); for (int i = 0; i < (int)Resource.MAX; ++i) { resources.Add((Resource)i, 0); } workstations.Clear(); AlchemistTable alchemistTable = new AlchemistTable(); workstations.Add(alchemistTable.Id, alchemistTable); Altar altar = new Altar(); workstations.Add(altar.Id, altar); Workshop workshop = new Workshop(); workstations.Add(workshop.Id, workshop); //Startowe zasoby resources[Resource.Food] += 4; resources[Resource.Scrap] += 1; resources[Resource.Gems] += 1; }
protected override void OnDelete() { base.OnDelete(); if (Altar != null) { Altar.Delete(); } if (Vendor != null) { Vendor.Delete(); } foreach (var b in Bosses.Where(b => b != null)) { b.Delete(); } foreach (var t in TeleportersTo.Union(TeleportersFrom).Where(t => t != null)) { t.Delete(); } foreach (var s in Floors.Where(l => l != null).SelectMany(l => l.Where(s => s != null))) { s.Delete(); } foreach (var s in Stage.Where(s => s != null)) { s.Delete(); } }
public void OnTick() { if (!Running) { Timer.Stop(); return; } if (Mobile.NetState == null || Mobile.Deleted || Altar.Deleted || Mobile.Map != Altar.Map || ViceVsVirtueSystem.Instance.Battle == null || !ViceVsVirtueSystem.Instance.Battle.OnGoing || !Mobile.Region.IsPartOf(ViceVsVirtueSystem.Instance.Battle.Region) || Altar.Contains(Mobile)) { Stop(); return; } // this should never happen! if (LastX != Target.X || LastY != Target.Y) { LastX = Target.X; LastY = Target.Y; Update(); } }
void OnTriggerStay(Collider col) { if (col.CompareTag("Skull") && _holdingSkull == null && playerState == PlayerState.Walking) { if (Input.GetButtonDown(_controls["PickUp"])) { col.transform.SetParent(this.transform); col.GetComponent <Skull>().owner = this; col.GetComponent <Skull>().DisableGravity(); _holdingSkull = col.gameObject; _holdingSkull.transform.position = skullHandlePoint.position; PlayAudioClip(sounds.obtainSkullClip); playerState = PlayerState.HasSkull; } } if (col.CompareTag("Altar")) { if (Input.GetButtonDown(_controls["PickUp"]) && playerState == PlayerState.HasSkull && _holdingSkull != null) { Altar altar = col.GetComponent <Altar>(); if (_holdingSkull) { // PlayAudioClip(sounds.placeSkullClip); altar.PlaceSkullObject(skullColorMaterial); _score++; Destroy(_holdingSkull); _holdingSkull = null; playerState = PlayerState.Walking; GameManager.Instance.ItemHasSpawned = false; } } } }
void OnTriggerEnter(Collider other) { // autopickup item if not carried if (!carryItem && other.gameObject.CompareTag("Item")) { carriedItemController = other.gameObject.GetComponent <ItemController>(); carriedItemController.ItemPickedUp(); carryItem = true; playerItemIndicator.ItemPickedUp(); gameManager.PlayerItemPickup(); } // entering the Entrance drop area if (other.gameObject.CompareTag("Entrance")) { enteredEntrance = other.gameObject.GetComponent <Entrance>(); } // entering the Altar drop area if (other.gameObject.CompareTag("Altar")) { enteredAltar = other.gameObject.GetComponent <Altar>(); } }
protected void Start() { possessed = false; altar = null; rb = GetComponent <Rigidbody2D>(); facingDirection = 1; oldDirection = 1; if (gameObject.tag == "Character") { GameManager.Instance.alive++; if (possessed) { rb.mass = mass; } else { rb.mass = staticMass; } } anim = GetComponent <Animator>(); timer = 0; }
// Update is called once per frame void Update() { WeaponSystem indexRef = gameObject.GetComponent <WeaponSystem>(); currentWeapon = equippedWeapons[indexRef.weaponIndex]; if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out interaction, interactionDistance)) { if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("gUse")) { // IF we hit an object that is interactable if (interaction.collider.gameObject.layer == LayerMask.NameToLayer("Interactable")) { string objName = interaction.transform.gameObject.name; if (objName == "Altar") { Altar altrRef = interaction.collider.gameObject.GetComponent <Altar>(); Debug.Log(interaction.transform.name); if (currentWeapon.blessedWeapon == false) { altrRef.BlessWeapon(currentWeapon); } } } } } }
public static string GetDescription(BuildingType type, ItemType itemType, int level) { string description = ""; switch ((int)type) { case 0: description = Farm.GetDescription(itemType, GetProduceNumber(type, level)); break; case 1: description = Mine.GetDescription(itemType, GetProduceNumber(type, level)); break; case 2: description = Teleporter.GetDescription(Teleporter.GetMaxDistance(level)); break; case 3: description = Altar.GetDescription(); break; default: break; } return(description); }
private void Interact() { if (Input.GetKeyDown(KeyCode.Space)) { RaycastHit2D hit = Physics2D.Raycast(rigidbody.position, lookDirection, 1.5f, LayerMask.GetMask("NPC")); if (hit.collider != null) { if (hit.transform.gameObject.tag == "NPC") { npc = hit.collider.GetComponent <Npcdialog>(); npc.MessageHandler(); } else if (hit.transform.gameObject.tag == "Altar") { Altar altar = hit.collider.GetComponent <Altar>(); altar.HandleInteraction(); } else if (hit.transform.gameObject.tag == "PuzzleDoor") { hit.transform.gameObject.GetComponent <PassPuzzle>().OpenPuzzle(); } } else if (dialogHandler.messageReceived) { dialogHandler.NextSentence(); } else { return; } } }
private void Start() { statl = FindObjectOfType <StatLibrary>(); altar = FindObjectOfType <Altar>(); player = FindObjectOfType <Player>(); sc = FindObjectOfType <SpawnController>(); sl = FindObjectOfType <SoundLibrary>(); }
void OnTriggerExit(Collider collider) { Altar a = collider.gameObject.GetComponent<Altar>(); if (a != null) { altar = null; } }
public Altar DeepCopy() { Altar newAltar = new Altar(name, cost, description); newAltar.portrait = portrait; newAltar.unit = unit.DeepCopy(); return(newAltar); }
public void DisplayHighScore() { if (sc.GetGameActive() && gops.GetSave().highScore < Mathf.FloorToInt(Altar.GetTimeSinceStart()) && gops.GetMaxHealth() <= 250) { gops.GetSave().highScore = Mathf.FloorToInt(Altar.GetTimeSinceStart()); SaveSystem.SaveGame(gops.GetSave().highScore, gops, ic, mp.GetChosenVolume(), Screen.currentResolution.width, Screen.currentResolution.height, QualitySettings.GetQualityLevel()); } TMPHS.text = "BEST TIME: " + gops.GetSave().highScore + "\n\nPress " + ic.Reset + " to try again."; }
public void SetAltar(Altar newAltar) { altar = newAltar; altarName.GetComponent <TextMesh>().text = altar.name.ToString(); cost.GetComponent <TextMesh>().text = altar.cost.ToString(); altarName.GetComponent <TextMesh>().text = altar.name.ToString(); portrait.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Altars/Altar of " + altar.portrait); description.GetComponent <TextMesh>().text = altar.description; }
public void AltarEnterExit(Altar _currentAltar, bool _onAltar) { currentAltar = _currentAltar; onAltar = _onAltar; foreach (Sacrifice b in sacrifices) { b.button.interactable = onAltar; } }
void OnTriggerEnter(Collider collider) { Debug.Log("Trigger" + playerEnergy); Altar a = collider.gameObject.GetComponent<Altar>(); if (a != null) { altar = a; altar.TurnIn(playerEnergy); } }
void Start() { altar = FindObjectOfType <Altar>(); wb = FindObjectOfType <WeaponBench>(); sl = FindObjectOfType <StatLibrary>(); detrianim = GetComponent <Animator>(); detriLight = gameObject; SetDTColours(); saveOriginalMaterials(); }
void OnTriggerExit(Collider other) { // leaving the Entrance drop area if (other.gameObject.CompareTag("Entrance")) { enteredEntrance = null; } // leaving the Altar drop area if (other.gameObject.CompareTag("Altar")) { enteredAltar = null; } }
public void LoadAltar() { if (currentNode.GetComponent <Node>().altar != null) { Altar altar = currentNode.GetComponent <Node>().altar; GameObject locationMenu = Tools.GetChildNamed(gameObject, "Location Menu"); GameObject altarSpace = Tools.GetChildNamed(locationMenu, "Altar Space"); GameObject titleText = Tools.GetChildNamed(altarSpace, "Altar Title Text"); GameObject altarSprite = Tools.GetChildNamed(altarSpace, "Altar Sprite"); GameObject descriptionText = Tools.GetChildNamed(altarSpace, "Altar Description Text"); titleText.GetComponent <TextMesh>().text = altar.name.ToString(); altarSprite.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Altars/Altar of " + altar.portrait); descriptionText.GetComponent <TextMesh>().text = altar.description; } }
public void MakeAltarBlueprints(GameObject player) { Faction faction = player.GetComponent <Player>().faction; Altar harvestAltar = new Altar(AltarName.Harvest, 20, "Increase this\nhex's income\nby 40%"); player.GetComponent <Player>().altarBlueprints.Add(AltarName.Harvest, harvestAltar); Altar devotionAltar = new Altar(AltarName.Devotion, 20, "Generate 1 zeal\neach turn"); player.GetComponent <Player>().altarBlueprints.Add(AltarName.Devotion, devotionAltar); Altar conflictAltar = new Altar(AltarName.Conflict, 20, "Build a powerful\ndefensive building"); player.GetComponent <Player>().altarBlueprints.Add(AltarName.Conflict, conflictAltar); Altar fateAltar = new Altar(AltarName.Fate, 20, "Increase influence in\ndetermining Oracle (unimplemented)"); player.GetComponent <Player>().altarBlueprints.Add(AltarName.Fate, fateAltar); }
private void CreateMenu() { try { bool newMenu = false; LeagueSharp.Common.Menu menu; if (Menu.GetMenu("SAssembliesRoot") == null) { menu = new LeagueSharp.Common.Menu("SAssemblies", "SAssembliesRoot", true); newMenu = true; } else { menu = Menu.GetMenu("SAssembliesRoot"); } MainMenu.Timer = Timer.SetupMenu(menu); mainMenu.UpdateDirEntry(ref MainMenu.Altar, Altar.SetupMenu(MainMenu.Timer.Menu)); var globalMenu = Menu.GetSubMenu(menu, "SAwarenessGlobalSettings"); if (globalMenu == null) { Menu.GlobalSettings.Menu = menu.AddSubMenu(new LeagueSharp.Common.Menu("Global Settings", "SAwarenessGlobalSettings")); Menu.GlobalSettings.Menu.AddItem( new MenuItem("SAssembliesGlobalSettingsServerChatPingActive", "Server Chat/Ping").SetValue(false)); Menu.GlobalSettings.Menu.AddItem( new MenuItem("SAssembliesGlobalSettingsVoiceVolume", "Voice Volume").SetValue(new Slider(100, 0, 100))); } else { Menu.GlobalSettings.Menu = globalMenu; } if (newMenu) { menu.AddItem(new MenuItem("By Screeder", "By Screeder V" + Assembly.GetExecutingAssembly().GetName().Version)); menu.AddToMainMenu(); } } catch (Exception ex) { Console.WriteLine("SAssemblies: {0}", ex); throw; } }
void MakeAltar() { Altar harvestAltar = new Altar(AltarName.Harvest, 20, "Increase this hex's\nincome by 40%"); altarBuySpaces[0].GetComponent <AltarShopSpace>().SetAltar(harvestAltar); Altar devotionAltar = new Altar(AltarName.Devotion, 20, "Generate 1 zeal\neach turn"); altarBuySpaces[1].GetComponent <AltarShopSpace>().SetAltar(devotionAltar); Altar conflictAltar = new Altar(AltarName.Conflict, 20, "Build a powerful\ndefensive building"); altarBuySpaces[2].GetComponent <AltarShopSpace>().SetAltar(conflictAltar); Altar fateAltar = new Altar(AltarName.Fate, 20, "Increase influence in\ndetermining Oracle"); altarBuySpaces[3].GetComponent <AltarShopSpace>().SetAltar(fateAltar); }
private void Update() { TMPBank.text = MakeRoman(statl.GetDetrizideBank()); if (!player.gameObject.GetComponent <Unit>().IsDead() && sc.GetGameActive()) { TMPTime.text = MakeRoman(Mathf.FloorToInt(Altar.GetTimeSinceStart())); } if (gops.GetUIEnabled() && !player.gameObject.GetComponent <Unit>().IsDead() && sc.GetGameActive()) { DisplayStats(); } else if (!player.gameObject.GetComponent <Unit>().IsDead() && !gops.GetUIEnabled()) { ClearStats(); } UpdateAndCheckTutorials(); }
void Start() { wb = FindObjectOfType <WeaponBench>(); fwanimator = GameObject.FindGameObjectWithTag("FadeWall").GetComponent <Animator>(); altar = FindObjectOfType <Altar>(); //resUnit = altar.GetResUnit(); ic = FindObjectOfType <InputController>(); weaponmanager = FindObjectOfType <WeaponManager>(); sc = FindObjectOfType <SpawnController>(); aso = gameObject.GetComponent <AudioSource>(); sl = FindObjectOfType <SoundLibrary>(); statl = FindObjectOfType <StatLibrary>(); unit = gameObject.GetComponent <Unit>(); unit.SetDeadClip(sl.GetPlayerDead()); ownedWeaponGOs = new List <GameObject>(); previousWeapon = FindObjectOfType <PlayerWeapon>().name; ownedWeaponGOs.Add(sc.provideGameObject("BoneBag")); }
private StateBase server() { State state = TaskState.Create(delegate { Task task = new Task(); TaskManager.AddAndIsOver(task, delegate { return(Model.Instance.hasGod); }); TaskManager.PushFront(task, delegate { //refreshHero(); //创建服务器 NetworkSystem.Instance.host(); //显示识别图 HudManager.Instance.marking(); //Desktop.Instance.hud.showImageTarget(); }); TaskManager.PushBack(task, delegate { //Desktop.Instance.hud.closeImageTarget(); //NetworkSystem.Instance.s }); return(task); }, this.fsm_, "running"); state.addAction("select", delegate(FSMEvent evt) { Database.Instance.godIndex = (int)(evt.obj); }); state.addAction("start", delegate { WhoIsGod wid = Altar.LocalComponent <WhoIsGod>(); wid.sheIsGod((uint)(Database.Instance.godIndex)); //设置控制者,并切换状态。 }); //state.addAction(""); return(state); }
public override void OnDoubleClick(Mobile from) { if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. } else if (Altar != null && (Altar.Owner == from || Party.Get(from) == Party.Get(Altar.Owner))) { if (Altar.Peerless == null) { Altar.SpawnBoss(); } Altar.AddFighter(from); ParoxysmusAltar.AddProtection(from); from.LocalOverheadMessage(MessageType.Regular, 58, 1074603); // You rub the slimy ointment on your body, temporarily protecting yourself from the corrosive river. Delete(); } }
private void Awake() { if (Instance != null) { Destroy(this.gameObject); } else { Instance = this; } ////同一场景的同一物体删了 //GameObject sameGo = GameObject.Find(this.gameObject.name); //if (sameGo.gameObject != this.gameObject) //{ // Destroy(this.gameObject); //} //else //{ //否则指定单例 // Instance = this; //} }
private StateBase server() { State state = TaskState.Create(delegate { Task task = new Task(); TaskManager.AddAndIsOver(task, delegate { return(Model.Instance.hasGod); }); TaskManager.PushFront(task, delegate { //创建服务器 NetworkSystem.Instance.host(); Debug.Log("server"); //显示识别图 HudManager.Instance.marking(); }); TaskManager.PushBack(task, delegate { Yggdrasil.Instance.transform.position = Camera.main.transform.position; Yggdrasil.Instance.transform.rotation = Camera.main.transform.rotation; }); return(task); }, this.fsm_, "running"); state.addAction("select", delegate(FSMEvent evt) { Database.Instance.godIndex = (int)(evt.obj); }); state.addAction("start", delegate { WhoIsGod wid = Altar.LocalComponent <WhoIsGod>(); wid.sheIsGod((uint)(Database.Instance.godIndex)); }); //state.addAction(""); return(state); }
public void HealEffect(Mobile from) { if (from.Player) { Hits += from.Hits; } else { Hits += from.Hits / 3; } FixedParticles(0x376A, 9, 32, 5005, EffectLayer.Waist); PlaySound(0x1F2); Say(1075117); // Muahahaha! Your life essence is MINE! if (Altar != null) { Altar.SendMessage(1075120); // An unholy aura surrounds Lady Melisande as her wounds begin to close. } m_NextHeal = DateTime.Now + TimeSpan.FromSeconds(10 + Utility.RandomDouble() * 5); }
public override void Patch() { base.Patch(); ObjectInteraction makeOferring = RogueLibsInteractions.CreateOriginalInteraction("MakeOffering", InteractionType.Button, (agent, obj) => obj is Altar a && !agent.interactionHelper.interactingFar); makeOferring.Action = (_, obj) => { Altar altar = (Altar)obj; if (altar.offeringsMade >= altar.offeringLimit) { altar.gc.audioHandler.Play(altar, "CantDo"); return(true); } altar.interactingAgent.SayDialogue("OfferingMustBeInBuilding"); altar.commander = altar.interactingAgent; altar.interactingAgent.mainGUI.invInterface.ShowTarget(altar, "MakeOffering"); IEnumerator enumerator = (IEnumerator)AccessTools.Method(typeof(Altar), "MakingOffer").Invoke(altar, new object[0]); altar.StartCoroutine(enumerator); return(false); }; }
private void Game_OnGameUpdate(EventArgs args) { if (!IsActive()) return; if (Menu.JungleTimer.GetActive()) { foreach (JungleCamp jungleCamp in JungleCamps) { if ((jungleCamp.NextRespawnTime - (int) Game.ClockTime) < 0) { jungleCamp.NextRespawnTime = 0; jungleCamp.Called = false; } } } if (Menu.AltarTimer.GetActive()) { var altarDestroyed = new Altar(null, null); foreach (Altar altar in Altars) { if (altar.Obj.IsValid) { bool hasBuff = false; foreach (BuffInstance buff in altar.Obj.Buffs) { if (buff.Name == "treelinelanternlock") { hasBuff = true; break; } } if (!hasBuff) { altar.Locked = false; altar.NextRespawnTime = 0; altar.Called = false; } else if (hasBuff && altar.Locked == false) { altar.Locked = true; altar.NextRespawnTime = altar.RespawnTime + (int) Game.ClockTime; } } else { if (altar.NextRespawnTime < (int) Game.ClockTime) { altarDestroyed = altar; } } } if (Altars.Remove(altarDestroyed)) { } foreach (Obj_AI_Minion altar in ObjectManager.Get<Obj_AI_Minion>()) { Altar nAltar = null; if (altar.Name.Contains("Buffplat")) { Altar health1 = Altars.Find(jm => jm.Obj.NetworkId == altar.NetworkId); if (health1 == null) if (altar.Name.Contains("_L")) nAltar = new Altar("Left Altar", altar); else nAltar = new Altar("Right Altar", altar); } if (nAltar != null) Altars.Add(nAltar); } } if (Menu.RelictTimer.GetActive()) { foreach (Relic relic in Relics) { if (!relic.Locked && (relic.Obj != null && (!relic.Obj.IsValid || relic.Obj.IsDead))) { if (Game.ClockTime < relic.SpawnTime) { relic.NextRespawnTime = relic.SpawnTime - (int) Game.ClockTime; } else { relic.NextRespawnTime = relic.RespawnTime + (int) Game.ClockTime; } relic.Locked = true; } if ((relic.NextRespawnTime - (int) Game.ClockTime) < 0) { relic.NextRespawnTime = 0; relic.Called = false; } } } //if (Menu.InhibitorTimer.GetActive()) //{ // if (_inhibitors.Inhibitors == null) // return; // foreach (var inhibitor in _inhibitors.Inhibitors) // { // if (inhibitor.Locked) // { // if (inhibitor.NextRespawnTime < Game.ClockTime) // { // inhibitor.Locked = false; // } // } // } //} if (Menu.HealthTimer.GetActive()) { var healthDestroyed = new Health(null); foreach (Health health in Healths) { if (health.Obj.IsValid) if (health.Obj.Health > 0) { health.Locked = false; health.NextRespawnTime = 0; health.Called = false; } else if (health.Obj.Health < 1 && health.Locked == false) { health.Locked = true; health.NextRespawnTime = health.RespawnTime + (int) Game.ClockTime; } else { if (health.NextRespawnTime < (int) Game.ClockTime) { healthDestroyed = health; } } } if (Healths.Remove(healthDestroyed)) { } foreach (Obj_AI_Minion health in ObjectManager.Get<Obj_AI_Minion>()) { Health nHealth = null; if (health.Name.Contains("Health")) { Health health1 = Healths.Find(jm => jm.Obj.NetworkId == health.NetworkId); if (health1 == null) nHealth = new Health(health); } if (nHealth != null) Healths.Add(nHealth); } } if (Menu.InhibitorTimer.GetActive()) { if (_inhibitors.Inhibitors == null) return; foreach (Inhibitor inhibitor in _inhibitors.Inhibitors) { if (inhibitor.Obj.Health > 0) { inhibitor.Locked = false; inhibitor.NextRespawnTime = 0; inhibitor.Called = false; } else if (inhibitor.Obj.Health < 1 && inhibitor.Locked == false) { inhibitor.Locked = true; inhibitor.NextRespawnTime = inhibitor.RespawnTime + (int) Game.ClockTime; } } } }
public void SpawnAltar() { GameObject altarObject = GameObject.Instantiate(altarPrefab) as GameObject; altarObject.transform.SetParent(SceneParent); Altar altar = altarObject.GetComponent<Altar>(); Altar = altar; altar.Init(); }
void Start () { m_altar = GetComponent<Altar>(); m_altar.ItemPlaced = OnAltarFull; }