コード例 #1
0
    public void FSetUpPlayers(string sDefName, PLY_SnapSpot rSnapSpot)
    {
        DATA_Play p = IO_DefPlays.FLOAD_PLAY_BY_NAME(sDefName);

        Debug.Log("About to run: " + p.mName);

        List <PRAC_Def_Ply> plys = new List <PRAC_Def_Ply>();

        // ------------------------- Old style still has the starting position in there already.
        DATA_Play defPlay = IO_DefPlays.FLOAD_PLAY_BY_NAME(sDefName);

        // PRAC_UI ui = FindObjectOfType<PRAC_UI>();
        // ui.mDefensivePlayName.text = defPlay.mName;

        for (int i = 0; i < defPlay.mPlayerRoles.Length; i++)
        {
            Vector3 vPlayerSpot = new Vector3();
            vPlayerSpot.x = defPlay.mPlayerRoles[i].mStart.x;
            vPlayerSpot.z = defPlay.mPlayerRoles[i].mStart.y;
            vPlayerSpot  += rSnapSpot.transform.position;
            var clone = Instantiate(PF_DefPlayer, vPlayerSpot, transform.rotation);
            clone.mJob.mTag    = defPlay.mPlayerRoles[i].mTag;
            clone.mJob.mRole   = defPlay.mPlayerRoles[i].mRole;
            clone.mJob.mDetail = defPlay.mPlayerRoles[i].mDetail;
        }

        // ----------------------- Figure out who's covering who.

        return;
    }
コード例 #2
0
 private void FShowDefensivePlay(DATA_Play defPlay, PLY_SnapSpot snapSpot)
 {
     for (int i = 0; i < defPlay.mPlayerRoles.Length; i++)
     {
         RenderRole(defPlay.mPlayerRoles[i], snapSpot);
     }
 }
コード例 #3
0
    public void FDisplayPlay()
    {
        DATA_Play ply = IO_PlayList.FLOAD_PLAY_BY_NAME(mPlayName);

        if (ply == null)
        {
            Debug.Log("That play doesn't exist");
            return;
        }

        foreach (DT_PlayerRole guy in ply.mPlayerRoles)
        {
            var     clone     = Instantiate(GFX_Player, transform.position, transform.rotation);
            Vector2 vGFXSpawn = new Vector2();
            vGFXSpawn = guy.mStart;
            // Now we do this conversion for the 1000x time.
            vGFXSpawn *= rField.GetComponent <RectTransform>().rect.width / 50f;     // field is 50 meters.
            vGFXSpawn += (Vector2)rField.transform.position;
            vGFXSpawn *= 1000f;
            GFX_Player gfx = clone.GetComponentInChildren <GFX_Player>();
            Debug.Log("Current transform: " + gfx.GetComponent <RectTransform>().position);
            clone.GetComponentInChildren <RectTransform>().position = vGFXSpawn;
            clone.transform.position = vGFXSpawn;
            Debug.Log("New transform: " + gfx.GetComponent <RectTransform>().position);
        }
    }
コード例 #4
0
    // Loads in all plays.
    public static void FLOAD_PLAYS()
    {
        string path = Application.dataPath + "/FILE_IO/Plays/";

        string[] fPathNames = Directory.GetFiles(path, "*.bin");
        foreach (string sName in fPathNames)
        {
            Debug.Log(sName);
        }

        mPlays = new DATA_Play[fPathNames.Length];
        for (int i = 0; i < fPathNames.Length; i++)
        {
            BinaryReader br = new BinaryReader(new FileStream(fPathNames[i], FileMode.Open));
            mPlays[i]       = new DATA_Play();
            mPlays[i].mName = br.ReadString();
            // Debug.Log("Play Name: " + mPlays[i].mName);
            mPlays[i].mPlayerRoles = new DT_PlayerRole[br.ReadInt32()];         // read in the number of players
            for (int j = 0; j < mPlays[i].mPlayerRoles.Length; j++)
            {
                DT_PlayerRole temp = new DT_PlayerRole();
                temp.mTag     = br.ReadString();
                temp.mRole    = br.ReadString();
                temp.mDetail  = br.ReadString();
                temp.mStart.x = br.ReadSingle();
                temp.mStart.y = br.ReadSingle();

                mPlays[i].mPlayerRoles[j] = temp;
            }
        }
    }
コード例 #5
0
    public void BT_SavePlay()
    {
        if (rPlayInputText.text == string.Empty)
        {
            Debug.Log("Please enter a play name");
            return;
        }

        // gather up all the defenders in the scene.
        PE_Role[] roles = FindObjectsOfType <PE_Role>();
        DATA_Play ply   = new DATA_Play();

        ply.mName        = rPlayInputText.text;
        ply.mPlayerRoles = new DT_PlayerRole[roles.Length];     // Should always be 11.
        Debug.Log("Should be 11: " + ply.mPlayerRoles.Length);
        for (int i = 0; i < ply.mPlayerRoles.Length; i++)
        {
            DT_PlayerRole dtRole = new DT_PlayerRole();
            dtRole.mTag         = roles[i].mTag;
            dtRole.mRole        = roles[i].mRole;
            dtRole.mDetail      = roles[i].mDetails;
            dtRole.mStart       = roles[i].mStartPos;
            ply.mPlayerRoles[i] = dtRole;
        }
        IO_DefPlays.FWRITE_PLAY(ply);
    }
コード例 #6
0
    // Fun fact, scriptable objects created at runtime will not be kept.

    public DATA_Play FConvertPlayToDATA(string sName)
    {
        DATA_Play play = new DATA_Play();

        play.mName = sName;

        // get array of all ED_Roles? Then save them.
        PE_Role[] roles = FindObjectsOfType <PE_Role>();
        play.mPlayerRoles = new DT_PlayerRole[roles.Length];
        for (int i = 0; i < roles.Length; i++)
        {
            DT_PlayerRole temp = new DT_PlayerRole();
            temp.mRole = roles[i].mRole;
            // temp.mStart = roles[i].mStartPos;
            temp.mTag = roles[i].mTag;

            // find the position from the field position.
            float fMetersToPixels = 50f / rField.GetComponent <RectTransform>().rect.width;      // field is 50 meters
            temp.mStart.x = (roles[i].transform.position.x - rField.transform.position.x) / fMetersToPixels;
            // adjust for starting on 10.
            temp.mStart.y = (roles[i].transform.position.y - rField.transform.position.y) / fMetersToPixels + 15f;

            // oh lol, forgot to add detail.
            temp.mDetail = roles[i].mDetails;

            play.mPlayerRoles[i] = temp;
        }

        return(play);
    }
コード例 #7
0
    public static DATA_Play FLOAD_PLAY_BY_NAME(string sName)
    {
        DATA_Play play = new DATA_Play();

        for (int i = 0; i < mPlays.Length; i++)
        {
            if (mPlays[i].mName == sName)
            {
                play = mPlays[i];
                Debug.Log("Play Name: " + play.mName);
                return(play);
            }

            Debug.Log("Plays loaded: " + mPlays[i].mName);
        }

        Debug.Log("Play not found: " + sName);
        return(null);
    }
コード例 #8
0
ファイル: IO_DefPlays.cs プロジェクト: tdcoish/SW_Quarterback
    public static bool FWRITE_PLAY(DATA_Play play)
    {
        if (play.mName == string.Empty)
        {
            Debug.Log("Can't save empty play name");
            return(false);
        }

        string sPath = Application.dataPath + "/FILE_IO/Plays/Defense/";

        // first check if that play already exists.
        string[] fPathNames = Directory.GetFiles(sPath, "*.bin");
        sPath += play.mName + ".bin";
        foreach (string sName in fPathNames)
        {
            if (sName == sPath)
            {
                Debug.Log("Error. Play name conflict.");
                Debug.Log("Overwriting anyways");
                //return false;
            }
        }


        BinaryWriter bw = new BinaryWriter(new FileStream(sPath, FileMode.Create));

        bw.Write(play.mName);
        // here's where I write the number of players.
        bw.Write(play.mPlayerRoles.Length);
        foreach (DT_PlayerRole pRole in play.mPlayerRoles)
        {
            bw.Write(pRole.mTag);
            bw.Write(pRole.mRole);
            bw.Write(pRole.mDetail);            // this would be things like the specific route, or how to run block.
            bw.Write(pRole.mStart.x);
            bw.Write(pRole.mStart.y);
        }
        Debug.Log("Play Saved: " + play.mName);
        bw.Close();

        return(true);
    }
コード例 #9
0
    // We also have to destroy the roles currently in the scene.
    public void FLoadPlay(DATA_Play play)
    {
        PE_Role[] roles = FindObjectsOfType <PE_Role>();
        for (int i = 0; i < roles.Length; i++)
        {
            Destroy(roles[i].gameObject);
        }

        Debug.Log("Play: " + play.mName);
        for (int i = 0; i < play.mPlayerRoles.Length; i++)
        {
            PE_Role role = Instantiate(PF_PlayerRole, transform.position, transform.rotation);
            role.mTag        = play.mPlayerRoles[i].mTag;
            role.mRole       = play.mPlayerRoles[i].mRole; // just a string now.
            role.mDetails    = play.mPlayerRoles[i].mDetail;
            role.mStartPos.x = play.mPlayerRoles[i].mStart.x;
            role.mStartPos.y = play.mPlayerRoles[i].mStart.y;

            // Here I'm making sure that the players always start on whole numbers, even if the play is not saved that way.
            role.mStartPos.x = (float)System.Math.Round((double)role.mStartPos.x, 0);
            role.mStartPos.y = (float)System.Math.Round((double)role.mStartPos.y, 0);

            // okay, now actually make it spawn in the right spot.
            // update. I guess we need to work in pixels.
            float   fMetersToPixels = 50f / rField.GetComponent <RectTransform>().rect.width;
            Vector3 vPos            = new Vector3();
            vPos.x = rField.transform.position.x + role.mStartPos.x * fMetersToPixels;
            vPos.y = rField.transform.position.y + role.mStartPos.y * fMetersToPixels;
            // set the y to the 10 yard line, normalized. That is where I decided the play starts from.
            vPos.y -= 15f * fMetersToPixels;
            role.transform.position = vPos;
        }

        // Since the old ones are garbage now.
        cSelector.FGetNewReferences();
    }
コード例 #10
0
 public void FShowAllPlayRoles(DATA_Play offPlay, DATA_Play defPlay, PLY_SnapSpot snapSpot)
 {
     FShowOffensivePlay(offPlay, snapSpot);
     FShowDefensivePlay(defPlay, snapSpot);
 }
コード例 #11
0
    // For now we are ignoring the defensive play name.
    public void FSetUpPlay(string sOffName, string sDefName, PLY_SnapSpot rSnapSpot)
    {
        // ------------------------------- LOAD IN PLAYERS
        DATA_Play playToRun = IO_PlayList.FLOAD_PLAY_BY_NAME(sOffName);

        if (playToRun == null)
        {
            Debug.Log("No play of that name");
        }

        // Now we just pretend there were no issues, so we put our players in their spots.
        for (int i = 0; i < playToRun.mPlayerRoles.Length; i++)
        {
            Vector3 vPlayerSpot = new Vector3();
            vPlayerSpot.x = playToRun.mPlayerRoles[i].mStart.x;
            vPlayerSpot.z = playToRun.mPlayerRoles[i].mStart.y;
            vPlayerSpot  += rSnapSpot.transform.position;
            var clone = Instantiate(PF_OffensivePlayer, vPlayerSpot, transform.rotation);
            clone.mJob.mTag    = playToRun.mPlayerRoles[i].mTag;
            clone.mJob.mRole   = playToRun.mPlayerRoles[i].mRole;
            clone.mJob.mDetail = playToRun.mPlayerRoles[i].mDetail;
        }

        int randomDefPlay = Random.Range(0, IO_DefPlays.mPlays.Length);
        // DATA_Play defPlay = IO_DefPlays.mPlays[randomDefPlay];
        DATA_Play defPlay = IO_DefPlays.FLOAD_PLAY_BY_NAME(sDefName);
        PRAC_UI   ui      = FindObjectOfType <PRAC_UI>();

        ui.mDefensivePlayName.text = defPlay.mName;

        // spawn a defensive player according to the play.
        for (int i = 0; i < defPlay.mPlayerRoles.Length; i++)
        {
            Vector3 vPlayerSpot = new Vector3();
            vPlayerSpot.x = defPlay.mPlayerRoles[i].mStart.x;
            vPlayerSpot.z = defPlay.mPlayerRoles[i].mStart.y;
            vPlayerSpot  += rSnapSpot.transform.position;
            var clone = Instantiate(PF_DefensivePlayer, vPlayerSpot, transform.rotation);
            clone.mJob.mTag    = defPlay.mPlayerRoles[i].mTag;
            clone.mJob.mRole   = defPlay.mPlayerRoles[i].mRole;
            clone.mJob.mDetail = defPlay.mPlayerRoles[i].mDetail;
        }

        // --------------------------------------------- Set all athletes to waiting for snap.
        PRAC_Ath[] athletes = FindObjectsOfType <PRAC_Ath>();
        foreach (PRAC_Ath athlete in athletes)
        {
            athlete.mState = PRAC_Ath.PRAC_ATH_STATE.SPRE_SNAP;
        }


        // --------------------------------------------- Re-arrange offensive and defensive player pointers left->right.
        PRAC_Off[] offenders = FindObjectsOfType <PRAC_Off>();
        PRAC_Def[] defenders = FindObjectsOfType <PRAC_Def>();
        SortPlayersLeftToRight(offenders);
        SortPlayersLeftToRight(defenders);


        // -------------------------------------- For route runners, load in their routes.
        IO_RouteList.FLOAD_ROUTES();
        for (int i = 0; i < offenders.Length; i++)
        {
            if (offenders[i].mJob.mRole == "Route")
            {
                // Yep, memory not allocated error if we don't do this here.
                offenders[i].GetComponent <OFF_RouteLog>().mRouteSpots = new List <Vector3>();

                DATA_Route rt = IO_RouteList.FLOAD_ROUTE_BY_NAME(offenders[i].mJob.mDetail);
                foreach (Vector2 routeSpot in rt.mSpots)
                {
                    Vector3 vSpot = offenders[i].transform.position;
                    vSpot.x += routeSpot.x; vSpot.z += routeSpot.y;
                    // Also, shove the spot into the receiver, just for now.
                    offenders[i].GetComponent <OFF_RouteLog>().mRouteSpots.Add(vSpot);
                    // Instantiate(PF_RouteNode, vSpot, transform.rotation);
                }
            }
        }

        // ---------------------------------------------------------- Shove the player "into" the QB character.
        for (int i = 0; i < offenders.Length; i++)
        {
            if (offenders[i].mJob.mTag == "QB")
            {
                Vector3 vSpot = offenders[i].transform.position;
                vSpot.y = 1f;
                FindObjectOfType <PC_Controller>().transform.position = vSpot;
            }
        }

        // ------------------------------------------ Now we're assigning the man for man coverage.
        // An offense has 5 eligible receivers on every play, so we actually SHOULD go by that, not their routes.
        // Update, we've added PRS_AssignMan which globally stores the order that tags should be covered, and the same for defense.

        List <PRAC_Off> elibibleRecs = new List <PRAC_Off>();

        foreach (PRAC_Off off in offenders)
        {
            if (PRS_AssignMan.FELIGIBLE_RECEIVER(off.mJob.mTag))
            {
                elibibleRecs.Add(off);
            }
        }

        elibibleRecs = PRS_AssignMan.FSORT_RECEIVER_IMPORTANCE(elibibleRecs);

        List <PRAC_Def> defsInMan = new List <PRAC_Def>();

        foreach (PRAC_Def def in defenders)
        {
            if (def.mJob.mRole == "Man")
            {
                Debug.Log("Added");
                defsInMan.Add(def);
            }
        }

        defsInMan = PRS_AssignMan.FSORT_DEFENDER_IMPORTANCE(defsInMan);

        // Now we finally start assigning man coverage responsibility.
        for (int i = 0; i < defsInMan.Count; i++)
        {
            if (elibibleRecs.Count <= 0)
            {
                break;
            }

            defsInMan[i].GetComponent <DEF_ManLog>().rMan = elibibleRecs[0];
            elibibleRecs.RemoveAt(0);
        }

        // ---------- ALIGN MAN DEFENDERS TO THE GUY THEY'RE COVERING
        for (int i = 0; i < defsInMan.Count; i++)
        {
            Vector3 vManPos = defsInMan[i].GetComponent <DEF_ManLog>().rMan.transform.position;
            vManPos.z += 7f;
            defsInMan[i].transform.position = vManPos;
        }
    }