Пример #1
0
    /// <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);
    }
Пример #2
0
    /// <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);
    }
Пример #3
0
    /// <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);
    }
Пример #4
0
    /// <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);
    }
Пример #5
0
    /// <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);
    }
Пример #6
0
    /// <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);
    }
Пример #7
0
 /// <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;
         }
     }
 }
Пример #8
0
    /// <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);
    }
Пример #9
0
    /// <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);
    }
Пример #10
0
    //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);
    }
Пример #11
0
 /// <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);
 }
Пример #12
0
    /// <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);
    }
Пример #13
0
    /// <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);
    }
Пример #14
0
 /// <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;
 }
Пример #15
0
 /// <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;
 }
Пример #16
0
 /// <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;
 }
Пример #17
0
 /// <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);
 }