Skip to content
Closed
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions Assets/Scripts/Game/DataCollection/GameplayData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Game.GameManager;
using Game.LevelManager;
using Game.NarrativeGenerator;
using Game.DataInterfaces;
using ScriptableObjects;
using UnityEngine;
// using UnityEditor.Scripting.Python;
Expand All @@ -33,7 +34,7 @@ public class GameplayData : MonoBehaviour
private static int POST_QUESTIONS = 12;
private static int NUMBER_OF_ENEMIES = 210;


public static event SendGameAndPlayerDataEvent SendGameAndPlayerDataEventHandler;
public static GameplayData instance = null;


Expand Down Expand Up @@ -330,13 +331,6 @@ private void OnRoomExit(object sender, ExitRoomEventArgs eventArgs)
}
}

//From inheritance
private void OnApplicationQuit()
{
//Log
}


private void OnGameStart(object sender, EventArgs eventArgs)
{
profileString = "";
Expand Down Expand Up @@ -416,6 +410,13 @@ private void EndTheLevel()

//Save to remote file
SendProfileToServer(map);

//TODO create data class to pass to ML profiler
var playerAndGameplayData = new PlayerAndGameplayData(
preFormAnswers, PostFormAnswers, hasDied, hasFinished, totalVisits, totalRooms, numberOfVisitedRooms,
collectedKeys, totalKeys, openedLocks, totalLocks, TreasureCollected, TotalTreasures, numberOfKilledEnemies, numberOfEnemies
);
SendGameAndPlayerDataEventHandler?.Invoke( this, new SendGameAndPlayerDataArgs( playerAndGameplayData) );

// Reset all values
visitedRooms.Clear();
Expand Down Expand Up @@ -717,4 +718,4 @@ private static void ProcessPlayerData ()
// PythonRunner.RunFile($"{Application.dataPath}/ensure_naming.py");
}
}
}
}
3 changes: 3 additions & 0 deletions Assets/Scripts/Game/DataInterfaces.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

101 changes: 101 additions & 0 deletions Assets/Scripts/Game/DataInterfaces/PlayerAndGameplayData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;

namespace Game.DataInterfaces
{
public class PlayerAndGameplayData
{
public PlayerAndGameplayData(List<int> preTestAnswers, List<int> postTestAnswers,
bool hasDied, bool hasFinished, int totalVisits, int totalRooms,
int numberOfVisitedRooms, int collectedKeys, int totalKeys, int openedLocks,
int totalLocks, int collectedTreasures, int totalTreasures, int enemiesDefeated,
int totalEnemies)
{
_hasDied = Convert.ToInt32(hasDied);
_hasFinished = Convert.ToInt32(hasFinished);
_totalVisits = totalVisits;
_totalRooms = totalRooms;
_numberOfVisitedRooms = numberOfVisitedRooms;
_collectedKeys = collectedKeys;
_totalKeys = totalKeys;
_openedLocks = openedLocks;
_totalLocks = totalLocks;
_collectedTreasures = collectedTreasures;
_totalTreasures = totalTreasures;
_enemiesDefeated = enemiesDefeated;
_totalEnemies = totalEnemies;

PreTestAnswers.AddRange( preTestAnswers );
PostTestAnswers.AddRange( postTestAnswers );
}

private int _hasDied;
private int _hasFinished;
private int _totalVisits;
private int _totalRooms;
private int _numberOfVisitedRooms;
private int _collectedKeys;
private int _totalKeys;
private int _openedLocks;
private int _totalLocks;
private int _collectedTreasures;
private int _totalTreasures;
private int _enemiesDefeated;
private int _totalEnemies;
public List<int> PreTestAnswers { get; set; }
public List<int> PostTestAnswers { get; set; }

public int HasDied
{
get => _hasDied;
}
public int HasFinished
{
get => _hasFinished;
}
public int TotalVisits
{
get => _totalVisits;
}
public int TotalRooms
{
get => _totalRooms;
}
public int NumberOfVisitedRooms
{
get => _numberOfVisitedRooms;
}
public int CollectedKeys
{
get => _collectedKeys;
}
public int TotalKeys
{
get => _totalKeys;
}
public int OpenedLocks
{
get => _openedLocks;
}
public int TotalLocks
{
get => _totalLocks;
}
public int CollectedTreasures
{
get => _collectedTreasures;
}
public int TotalTreasures
{
get => _totalTreasures;
}
public int EnemiesDefeated
{
get => _enemiesDefeated;
}
public int TotalEnemies
{
get => _totalEnemies;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,5 @@ public List<EnemySO> CreateSOBestEnemies()

return enemyList;
}
#endif
}
}
22 changes: 22 additions & 0 deletions Assets/Scripts/Game/Events/ProfileAnalystFinishedEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;

namespace Game.Events
{
public delegate void ProfileAnalystFinishedEvent(object sender, ProfileAnalystFinishedEventArgs e);
public class ProfileAnalystFinishedEventArgs : EventArgs
{
private Dictionary<string, int> answerByQuestion;

public ProfileAnalystFinishedEventArgs(Dictionary<string, int> answerByQuestion)
{
AnswerByQuestion = answerByQuestion;
}

public Dictionary<string, int> AnswerByQuestion
{
get => answerByQuestion;
set => answerByQuestion = value;
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions Assets/Scripts/Game/Events/SendGameAndPlayerDataEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;
using Game.EnemyGenerator;
using Game.DataInterfaces;

namespace Game.Events
{
public delegate void SendGameAndPlayerDataEvent(object sender, SendGameAndPlayerDataArgs e);

public class SendGameAndPlayerDataArgs : EventArgs
{
private PlayerAndGameplayData playerGameplayData;

public SendGameAndPlayerDataArgs(PlayerAndGameplayData playerGameplayData)
{
PlayerGameplayData = playerGameplayData;
}

public PlayerAndGameplayData PlayerGameplayData
{
get => playerGameplayData;
set => playerGameplayData = value;
}
}
}
11 changes: 11 additions & 0 deletions Assets/Scripts/Game/Events/SendGameAndPlayerDataEvent.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions Assets/Scripts/Game/GameManager/ExperimentController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private void SetQuestLinesForProfile(PlayerProfile playerProfile)
private void LoadDataForExperiment(object sender, ProfileSelectedEventArgs profileSelectedEventArgs)
{
PlayerProfile selectedProfile;
if (RandomSingleton.GetInstance().Random.Next(0, 100) < 50)
if (UseTrueProfile())
{
selectedProfile = profileSelectedEventArgs.PlayerProfile;
}
Expand All @@ -103,8 +103,13 @@ private void LoadDataForExperiment(object sender, ProfileSelectedEventArgs profi
selectedProfile.PlayerProfileEnum = (PlayerProfile.PlayerProfileCategory)RandomSingleton.GetInstance().Random.Next(0, 4);
} while (selectedProfile.PlayerProfileEnum == profileSelectedEventArgs.PlayerProfile.PlayerProfileEnum);
}
ProfileSelectedEventHandler?.Invoke(null, new ProfileSelectedEventArgs(selectedProfile));
SetQuestLinesForProfile(selectedProfile);
ProfileSelectedEventHandler?.Invoke(null, new ProfileSelectedEventArgs(selectedProfile));
}

private static bool UseTrueProfile()
{
return RandomSingleton.GetInstance().Random.Next(0, 100) < 100;
}
}
}
18 changes: 16 additions & 2 deletions Assets/Scripts/Game/GameManager/PostFormMenuBHV.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using TMPro;
using System;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
Expand All @@ -21,18 +22,31 @@ public class PostFormMenuBHV : MonoBehaviour, IMenuPanel

private void OnEnable()
{
playMoreButton.interactable = false;
var hasMoreLevels = !GameManagerSingleton.Instance.IsLastQuestLine;
if (hasMoreLevels) return;
postFormText.text = noMoreLevelsText;
playMoreButton.interactable = false;
ExperimentController.ProfileSelectedEventHandler += NewProfileSelected;
}

private void OnDisable()
{
ExperimentController.ProfileSelectedEventHandler -= NewProfileSelected;
}

public void GoToNext()
{
gameObject.SetActive(false);
SceneManager.LoadScene("Overworld");
GameManagerSingleton.Instance.StopMusic();
}

private void NewProfileSelected(object sender, EventArgs e)
{
playMoreButton.interactable = true;
}


public void GoToPrevious()
{
Debug.LogError("There is no Panel to Go Back To!");
Expand Down
1 change: 0 additions & 1 deletion Assets/Scripts/Game/LevelGenerator/Interface.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ private static void ConvertEaDungeonToSoDungeon(Coordinates coordinates, SORoom
};
}
//If it was a room with treasure, save it as a "T"
//TODO: change this as now every room may contain treasures, enemies and/or keys
else if (roomType == Common.RoomType.TREASURE)
{
roomDataInFile.type = Constants.RoomTypeString.TREASURE;
Expand Down
27 changes: 16 additions & 11 deletions Assets/Scripts/Game/NarrativeGenerator/QuestGeneratorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,23 +79,29 @@ public void OnDisable()
private void SelectPlayerProfile(object sender, NarrativeCreatorEventArgs e)
{
var playerProfile = Selector.SelectProfile(e);
if (createNarrative)
{
Selector.CreateMissions(this);
CreateNarrative(playerProfile);
}
else
{
ProfileSelectedEventHandler?.Invoke(this, new ProfileSelectedEventArgs(playerProfile));
CreateOrSelectNarrative(playerProfile);

}
}

private void SelectPlayerProfile(object sender, FormAnsweredEventArgs e)
{
var answers = e.AnswerValue;

var playerProfile = Selector.SelectProfile(answers);

CreateOrSelectNarrative(playerProfile);

}

private void SelectPlayerProfile(object sender, ProfileAnalystFinishedEventArgs e)
{
var answers = e.AnswerByQuestion;
var playerProfile = Selector.SelectProfile(answers);
CreateOrSelectNarrative(playerProfile);
}

private void CreateOrSelectNarrative(PlayerProfile playerProfile)
{
if (createNarrative)
{
Selector.CreateMissions(this);
Expand All @@ -105,9 +111,8 @@ private void SelectPlayerProfile(object sender, FormAnsweredEventArgs e)
{
ProfileSelectedEventHandler?.Invoke(this, new ProfileSelectedEventArgs(playerProfile));
}

}

private void Start()
{
Quests.Init();
Expand Down
15 changes: 15 additions & 0 deletions Assets/Scripts/Game/NarrativeGenerator/Selector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ public PlayerProfile SelectProfile(List<int> answers)
return playerProfile;
}

public PlayerProfile SelectProfile(Dictionary<string, int> answers)
{
CalculateProfileWeights(answers);

CreateProfileWithWeights();

return playerProfile;
}

public PlayerProfile SelectProfile(NarrativeCreatorEventArgs eventArgs)
{
questWeightsbyType = eventArgs.QuestWeightsbyType;
Expand Down Expand Up @@ -117,6 +126,12 @@ private List<QuestSO> DrawMissions(List<NpcSO> possibleNpcs, TreasureRuntimeSetS
return questsSos;
}

private void CalculateProfileWeights(Dictionary<string, int> answers)
{
//TODO implement logic
throw new NotImplementedException();
}

private void CalculateProfileWeights(List<int> answers)
{
var pesos = new int[4];
Expand Down