/// <summary> /// Reduces money on the player /// </summary> /// <param name="a_Player">Player to which money is reduced</param> /// <returns></returns> public override bool OnRun(Player a_Player) { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Player " + a_Player.name + " was taxed $" + m_TaxAmmount, 2.0f)); a_Player.ModifyMoney(-m_TaxAmmount); return(true); }
/// <summary> /// The update function that will move the update through the two stages, before and after they press the roll key /// </summary> /// <returns>Returns true when the update is finished</returns> public bool OnUpdateFunction() { //Iterating through the states of the RollMananger switch (m_CurrentRollState) { //If the button has been pressed, which is caught in a different function, use one frame to setup the display of the dice, had errors when it was on the previous frame case RollManangerState.ButtonPress: { m_Panel.transform.FindChild("NumberDisplay").FindChild("DiceRoll").GetComponent <TextMeshProUGUI>().text = m_Player.m_LastRoll.ToString(); m_CurrentRollState = RollManangerState.NumberReveal; break; } //How long we want the player to look at the roll number case RollManangerState.NumberReveal: { m_DeltaTime += Time.deltaTime; if (m_DeltaTime >= c_REVEAL_TIME) { GameObject.Destroy(m_Panel); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(m_Player, m_Player.m_LastRoll)); return(true); } break; } } return(false); }
/// <summary> /// Returns the single instance of this object, needs to be placed in the scene /// Will search in the scene once for it /// </summary> /// <returns>Returns the single instance</returns> public static GameWorldMananger ReturnInstance() { if (m_Instance == null) { m_Instance = GameObject.FindObjectOfType <GameWorldMananger>(); } return(m_Instance); }
/// <summary> /// Rotates the camera arround the board /// </summary> void Update() { ///Gets the direction of the centre point to the goal rotation Vector3 m_Direction = (GameWorldMananger.ReturnInstance().m_Players[GameWorldMananger.ReturnInstance().m_CurrentPlayer].transform.position - transform.position).normalized; //rotate the direction towards it using a contiously increasing lerp value to smooth the movement transform.forward = Vector3.Lerp(transform.forward, m_Direction, Time.deltaTime * 3.0f); //Undo rotations to axis we dont want rotated transform.eulerAngles = new Vector3(0.0f, transform.eulerAngles.y, 0.0f); }
/// <summary> /// Setting up the window scene, creates the window and identifies the pieces it needs /// </summary> /// <returns></returns> public bool OnStartFunction() { m_Panel = Canvas.Instantiate(Resources.Load("StatusScreen", typeof(GameObject)) as GameObject); m_Panel.transform.parent = GameWorldMananger.ReturnInstance().m_Canvas.transform; m_Panel.transform.localPosition = Vector3.zero; m_Panel.transform.localRotation = Quaternion.identity; //The text we'll be setting m_Panel.transform.FindChild("Image").FindChild("Text").GetComponent <TextMeshProUGUI>().text = m_Message; return(false); }
/// <summary> /// Called by the Unity Button class /// </summary> public void ButtonPressed() { //Generates the roll results, 1 - 12 for 2 dices m_Player.m_LastRoll = Random.RandomRange(1, 12); m_Panel.transform.FindChild("RollButton").gameObject.SetActive(false); m_Panel.transform.FindChild("NumberDisplay").gameObject.SetActive(true); m_CurrentRollState = RollManangerState.ButtonPress; GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Rolled: " + m_Player.m_LastRoll); }
/// <summary> /// Sets the money constantly, could be better, could be hooked up to the change event, unfortuentally ran out of time /// </summary> void Update() { if (GameWorldMananger.ReturnInstance().m_Players.Count > 0) { if (m_IsPlayer1 == true) { m_TextToEdit.text = "Player 1 \n$" + GameWorldMananger.ReturnInstance().m_Players[0].m_Money; } else { m_TextToEdit.text = "Player 2 \n$" + GameWorldMananger.ReturnInstance().m_Players[1].m_Money; } } }
/// <summary> /// Creates all the windows and allocates them /// Would be better to just turn off and on but being strapped for time, this is safer in creating less bugs /// </summary> /// <returns></returns> public bool OnStartFunction() { m_DeltaTime = 0.0f; m_CurrentRollState = RollManangerState.NULL; //Instiates the window m_Panel = Canvas.Instantiate(Resources.Load("RollSreen", typeof(GameObject)) as GameObject); m_Panel.transform.parent = GameWorldMananger.ReturnInstance().m_Canvas.transform; m_Panel.transform.localPosition = Vector3.zero; m_Panel.transform.localRotation = Quaternion.identity; //Sets up the players name being displayed m_Panel.transform.FindChild("Name").GetComponent <TextMeshProUGUI>().text = m_Player.name + "'s Turn!"; m_Panel.transform.FindChild("RollButton").GetComponent <Button>().onClick.AddListener(ButtonPressed); return(true); }
/// <summary> /// Final step, also handles collecting money from Go /// </summary> /// <returns></returns> public bool OnFinishFunction() { // corrects for overshooting / error m_Player.transform.position = m_EndPos; m_Player.m_CurrentNode = m_Node; //Create a switch for things that need to activate when passing switch (m_Node.name) { // If we pass go, we want to be reqwarded money and a notifcation case "Go": { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Passed Go Collect $200", 2.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Obtained $200 from Go"); m_Player.ModifyMoney(200); break; } } return(false); }
//Default OnRun for all purchasable properties as they function similarishly public override bool OnRun(Player a_Player) { //If no owner, offer to purchase the property if (m_Owner == null) { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PropertyManagmentScreen(a_Player, this, PropertyManagmentScreen.PropertyManagmentFunctionality.PurchaseProperty)); } else { //If an owner, if not the player that just landed on the node, then ask for rent if (m_Owner != a_Player) { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PropertyManagmentScreen(a_Player, this, PropertyManagmentScreen.PropertyManagmentFunctionality.PayRent)); } else //Otherwise load up the management tab, for upgrading { OnManange(); } } return(true); }
/// <summary> /// Is called when the player lands on this card, starts an animation that sends to player to the jail node and can't leave until his sentance is served /// </summary> /// <param name="a_Player">The player we're sending to jail</param> /// <returns></returns> public override bool OnRun(Player a_Player) { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovementToNode(a_Player, GameWorldMananger.ReturnInstance().transform.FindChild("Jail").GetComponent <Node>(), 1.0f)); a_Player.m_DaysLeftInJail = c_DAYS_IN_JAIL; return(true); }
/// <summary> /// Runs the chance card /// </summary> /// <param name="a_Player">The player the card will affect</param> /// <returns></returns> public override bool OnRun(Player a_Player) { //Randomly choose a card int m_TempRandom = Random.Range(0, 10); switch (m_TempRandom) { case 0: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Advance To Go", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Advance To Go"); Node m_TempNode = FindDeepChild(GameWorldMananger.ReturnInstance().transform, "Go").GetComponent <Node>(); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(a_Player, HowFarAwayIsNodeFromAnother(this, m_TempNode))); break; } case 1: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Advance to Illinois Ave. - If you pass Go, collect $200", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Advance to Illinois Ave. - If you pass Go, collect $200"); Node m_TempNode = FindDeepChild(GameWorldMananger.ReturnInstance().transform, "Illinois Avenue").GetComponent <Node>(); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(a_Player, HowFarAwayIsNodeFromAnother(this, m_TempNode))); break; } case 2: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Bank pays you dividend of $50", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Bank pays you dividend of $50"); a_Player.ModifyMoney(50); break; } case 3: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Go Forward 3 Spaces", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Go Forward 3 Spaces"); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(a_Player, 3)); break; } case 4: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Go directly to Jail – Do not pass Go, do not collect $200", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Go directly to Jail – Do not pass Go, do not collect $200"); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovementToNode(a_Player, GameWorldMananger.ReturnInstance().transform.FindChild("Jail").GetComponent <Node>(), 1.0f)); a_Player.m_DaysLeftInJail = GoToJail.c_DAYS_IN_JAIL; break; } case 5: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Make general repairs on all your property – For each property pay $25", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Make general repairs on all your property – For each property pay $25"); a_Player.ModifyMoney(-a_Player.m_BoughtProperties.Count * 25); break; } case 6: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Pay poor tax of $15", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Pay poor tax of $15"); a_Player.ModifyMoney(-15); break; } case 7: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Take a trip to Reading Railroad - If you pass Go, collect $200", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Take a trip to Reading Railroad - If you pass Go, collect $200"); Node m_TempNode = FindDeepChild(GameWorldMananger.ReturnInstance().transform, "Reading Railroad").GetComponent <Node>(); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(a_Player, HowFarAwayIsNodeFromAnother(this, m_TempNode))); break; } case 8: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Take a walk on the Boardwalk – Advance token to Boardwalk - If you pass Go, collect $200", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Take a walk on the Boardwalk – Advance token to Boardwalk - If you pass Go, collect $200"); Node m_TempNode = FindDeepChild(GameWorldMananger.ReturnInstance().transform, "Boardwalk").GetComponent <Node>(); GameWorldMananger.ReturnInstance().AddToAnimationQueue(new PlayerMovement(a_Player, HowFarAwayIsNodeFromAnother(this, m_TempNode))); break; } case 9: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: Your building {and} loan matures – Collect $150", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: Your building {and} loan matures – Collect $150"); a_Player.ModifyMoney(150); break; } case 10: { GameWorldMananger.ReturnInstance().AddToAnimationQueue(new StatusScreen("Chance Card: You have won a crossword competition - Collect $100", 4.0f)); GameWorldMananger.ReturnInstance().WriteToLog("Player: " + a_Player.name + " Chance Card: You have won a crossword competition - Collect $100"); a_Player.ModifyMoney(100); break; } } return(true); }
/// <summary> /// Setting up windows and button callbacks based on the functionality /// </summary> /// <returns></returns> public bool OnStartFunction() { //Create the UI window m_Panel = Canvas.Instantiate(Resources.Load("PropertyManagementScreen", typeof(GameObject)) as GameObject); m_Panel.transform.parent = GameWorldMananger.ReturnInstance().m_Canvas.transform; m_Panel.transform.localPosition = Vector3.zero; m_Panel.transform.localRotation = Quaternion.identity; //Create the card from the property, the property will return it filled out and ready for use m_Card = m_PropertyNode.OnDisplay(); m_Card.transform.parent = m_Panel.transform; m_Card.transform.localPosition = new Vector3(0.0f, 115.0f, 0.0f); m_Card.transform.localRotation = Quaternion.identity; //Find the "Close" button m_Panel.transform.FindChild("Close").GetComponent <Button>().onClick.AddListener(CloseWindow); //Keep track of the button and the text inside as we'll be modyfying it heavily Button m_TempButton = m_Panel.transform.FindChild("Button").GetComponent <Button>(); Text m_tempText = m_TempButton.transform.FindChild("Text").GetComponent <Text>(); //Based on the functionality we require, modyfy the button switch (m_CurrentFunctionality) { //If we want to purchase the property, set the button up accordingly case PropertyManagmentFunctionality.PurchaseProperty: { if (m_Player.m_Money >= m_PropertyNode.m_PurchaseCost) { m_TempButton.onClick.AddListener(ButtonPressPurchaseProperty); m_tempText.text = "Purchase Property: $" + m_PropertyNode.m_PurchaseCost; } else //Checks if we can afford to purchase it { m_TempButton.onClick.AddListener(CloseWindow); m_tempText.text = "Cannot Afford: $" + m_PropertyNode.m_PurchaseCost + "/n Click To Close"; } break; } //If we want to pay rent on the property, set the button up accordingly case PropertyManagmentFunctionality.PayRent: { if (m_Player.m_Money >= m_PropertyNode.OnRent(m_Player)) { m_Panel.transform.FindChild("Close").gameObject.SetActive(false);; m_TempButton.onClick.AddListener(ButtonPressPayRent); m_tempText.text = "Pay Rent: $" + m_PropertyNode.OnRent(m_Player); } else //Checks if we can afford the rent, if we can't, mortgage properties or create an end state { //Player Loses } break; } //If we want to upgrade the property, set the button up accordingly case PropertyManagmentFunctionality.PurchaseUpgrade: { m_TempButton.onClick.AddListener(ButtonPressPurchaseUpgrade); m_tempText.text = "Upgrade Property: $50"; break; } } return(true); }
/// <summary> /// Close the window /// </summary> public void CloseWindow() { GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Did not interact with: " + m_Player.m_CurrentNode.name); m_CurrentPropertyState = PropertyManagmentStates.CloseWindow; }
/// <summary> /// Pay the rent /// </summary> public void ButtonPressPayRent() { GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Payed $" + m_PropertyNode.OnRent(m_Player) + " to " + m_PropertyNode.m_Owner.name + " rent for staying at: " + m_Player.m_CurrentNode.name); m_PropertyNode.m_Owner.TransferMoney(m_Player, m_PropertyNode.OnRent(m_Player)); m_CurrentPropertyState = PropertyManagmentStates.CloseWindow; }
/// <summary> /// Causes the property to upgrade /// </summary> public void ButtonPressPurchaseUpgrade() { GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Upgraded: " + m_Player.m_CurrentNode.name); m_CurrentPropertyState = PropertyManagmentStates.CloseWindow; }
/// <summary> /// The animation has finished, log the resulting location and run the OnRun of the node, calling its functionality /// </summary> /// <returns></returns> public bool OnFinishFunction() { GameWorldMananger.ReturnInstance().WriteToLog("Player: " + m_Player.name + " Landed On: " + m_Player.m_CurrentNode.name); m_Player.m_CurrentNode.OnRun(m_Player); return(false); }