Galaxy scripts commented

This commit is contained in:
Aaron Moser
2023-07-22 12:30:32 +02:00
parent 17e3df8244
commit f0773fdf5d
7 changed files with 313 additions and 36 deletions

View File

@@ -1,16 +1,49 @@
/**
* @file
*
* @author Aaron Moser
*
* @package Assets.Scripts.Galaxy.Controller
*/
namespace NGalaxy
{
/**
* @section DESCRIPTION
*
* @todo Class cares about communication of galaxy view and model.
*
* At the moment just instantiates a street system of solar systems at galaxy model and lets view display it.
*/
public class GalaxyController
{
private NGalaxy.GalaxyModelBuilder oGalaxyModelBuilder;
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public values
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Private values
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public functions
/**
* Constructor of galaxy controller, creates at the moment only a street solar system.
*
* @todo Add different maps to lobby, which players can choose from. Add parameter to this constructor that describes what kind of map was chosen.
*
* @param oGalaxyModel, reference to galaxy model.
* @param oGalaxyView, reference to galaxy view.
*/
public GalaxyController(GalaxyModel oGalaxyModel, GalaxyViewScript oGalaxyView)
{
oGalaxyModelBuilder = new NGalaxy.GalaxyModelBuilder();
NGalaxy.GalaxyModelBuilder oGalaxyModelBuilder = new NGalaxy.GalaxyModelBuilder();
// Create street solar system
oGalaxyModel.SolarSystemModels = oGalaxyModelBuilder.BuildStreetSystem(oGalaxyModel.SolarSystemCount);
oGalaxyView.DisplaySolarSystems();
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Private functions
}
}

View File

@@ -1,16 +1,56 @@
/**
* @file
*
* @author Aaron Moser
*
* @package Assets.Scripts.Galaxy.Model
*/
namespace NGalaxy
{
/**
* @section DESCRIPTION
*
* Class containing definition of galaxy model.
* Galaxy model consists of solar system models.
*/
public class GalaxyModel
{
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public values
/**
* Count of solar system at galaxy.
*/
public int SolarSystemCount;
/**
* Array with references to solar system models.
*/
public SolarSystemModel[] SolarSystemModels;
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Private values
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public functions
/**
* Constructor of galaxy model, sets only count of solar systems
*/
public GalaxyModel()
{
this.SolarSystemCount = NewGameDataManager.Instance.NumberOfSolarSystems;
}
/**
* Searches for planet indicated by unique iPlanetID at the solar systems.
*
* @todo throw Exception if planet was not found, because this sholdn't be possible and returning null is not good.
*
* @param PlanetID, unique id of a planet to search for.
*
* @return Planet indicated by PlanetID or null if planet not found.
*/
public NPlanet.PlanetModel FindPlanet(int PlanetID)
{
NPlanet.PlanetModel oPlanetToReturn = null;
@@ -27,6 +67,13 @@ namespace NGalaxy
return oPlanetToReturn;
}
/**
* Returns sum of industrial capacity of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of industrial capacity.
*
* @return Sum of industrial capacity of the player.
*/
public int GetIndustrialCapacityOfSolarSystems(int iPlayerID)
{
int iIndustrialCapacitySum = 0;
@@ -37,6 +84,13 @@ namespace NGalaxy
return iIndustrialCapacitySum;
}
/**
* Returns sum of money of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of money.
*
* @return Sum of money of the player.
*/
public int GetMoneyOfSolarSystems(int iPlayerID)
{
int iMoneySum = 0;
@@ -47,6 +101,13 @@ namespace NGalaxy
return iMoneySum;
}
/**
* Returns sum of science of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of science.
*
* @return Sum of science of the player.
*/
public int GetScienceOfSolarSystems(int iPlayerID)
{
int iScienceSum = 0;
@@ -57,6 +118,13 @@ namespace NGalaxy
return iScienceSum;
}
/**
* Returns sum of power of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of power.
*
* @return Sum of power of the player.
*/
public int GetPowerOfSolarSystems(int iPlayerID)
{
int iPowerSum = 0;
@@ -67,6 +135,13 @@ namespace NGalaxy
return iPowerSum;
}
/**
* Returns sum of food of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of food.
*
* @return Sum of food of the player.
*/
public int GetFoodOfSolarSystems(int iPlayerID, int iFoodTechLevel)
{
int iFoodSum = 0;
@@ -77,6 +152,13 @@ namespace NGalaxy
return iFoodSum;
}
/**
* Returns sum of population of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of population.
*
* @return Sum of population of the player.
*/
public int GetPopulationOfSolarSystems(int iPlayerID)
{
int iPopulationSum = 0;
@@ -87,6 +169,13 @@ namespace NGalaxy
return iPopulationSum;
}
/**
* Returns sum of actual food of a solar system which belongs to the player indicated by iPlayerID.
*
* @param iPlayerID, id of player to check the amount of actual food.
*
* @return Sum of actual food of the player.
*/
public int GetActualFoodOfSolarSystems(int iPlayerID)
{
int iActualFoodSum = 0;

View File

@@ -1,13 +1,29 @@
/**
* @file
*
* @author Aaron Moser
*
* @package Assets.Scripts.Galaxy.Model
*/
using UnityEngine;
namespace NGalaxy
{
/**
* @section DESCRIPTION
*
* Class has functionality to build different galaxy layouts, instantiating solar systems and setting their positions
*/
public class GalaxyModelBuilder
{
/**
* Builds street of solar systems at galaxy canvas.
*
* @todo split functionality of positioning information and other unrelated values.
*
* @param iCountOfSolarSystems
* @return SolarSystemModel[] models of solarsystem
* @param iCountOfSolarSystems, number of solar systems to create.
*
* @return SolarSystemModel[] models of solar systems, containing information of street system.
*/
public SolarSystemModel[] BuildStreetSystem(int iCountOfSolarSystems)
{
@@ -71,7 +87,9 @@ namespace NGalaxy
return SolarSystemModels;
}
//TODO
/**
* @todo Build custom solar system
*/
private void BuildSolarSystems(int iCountOfSolarSystems, int iCountOfPlayers, int[,] aaiPlayerArea)
{
int iNumberOfDistinctSolarSystems = iCountOfSolarSystems / iCountOfPlayers;
@@ -111,7 +129,9 @@ namespace NGalaxy
// Insert distinct planets and clones into each players area so each player has the same amount of resources
}
//TODO
/**
* @todo Build custom solar system
*/
private void Build4PlayerGalaxy(int iCountOfSolarSystems, int iCountOfPlayers)
{
// Depending on players divide grid so each player has one area.

View File

@@ -1,11 +1,34 @@
/**
* @file
*
* @author Aaron Moser
*
* @package Assets.Scripts.Galaxy.Model
*/
using UnityEngine;
/**
* @section DESCRIPTION
*
* Class supposed to help solar system builder with generating random maps, creating a two dimensional array of this class.
* Array should be like a grid at the galaxy canvas.
*/
public class SolarSystemBuildHelper
{
/**
* Position at screen
*/
public Vector2 Position;
/**
* True if this field is already occupied, so to roll another value to set the next solar system to.
*/
public bool Occupied;
/**
* Constructor initializes position with 0, 0 and Occupied with false.
*
*/
public SolarSystemBuildHelper()
{
Position = new Vector2(0, 0);

View File

@@ -10,15 +10,22 @@ namespace NSolarSystem
/**
* @section DESCRIPTION
*
* Class .
* Class describes event arguments, which occur at galaxy level.
* If a solar system at galaxy view is clicked, this arguments are used to overhand the unique id of the solar system clicked.
*/
public class SolarSystemEventArgs
{
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public values
/**
* Property eSolarSystemEvent, describes the event occured @see ESolarSystemEvent.
*/
public ESolarSystemEvent eSolarSystemEvent { get; set; }
/**
* Property SolarSystemID, unique id of clicked solar system.
*/
public int SolarSystemID { get; set; }
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -27,6 +34,12 @@ namespace NSolarSystem
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public functions
/**
* Constructor of solar system event arguments. Sets attributes of this.
*
* @param eSolarSystemEvent, event that occured (at the moment only one event solar system clicked possible).
* @param iSolarSystemID, unique id of solar system clicked.
*/
public SolarSystemEventArgs(ESolarSystemEvent eSolarSystemEvent, int iSolarSystemID)
{
this.eSolarSystemEvent = eSolarSystemEvent;

View File

@@ -1,40 +1,101 @@
/**
* @file
*
* @author Aaron Moser
* @author Mohamad Kadou
*
* @package Assets.Scripts.Galaxy.View
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* @section DESCRIPTION
*
* Class cares about the galaxy view, the events, that can only occur on its level and the display of the solar system view bodies.
*/
public class GalaxyViewScript : MonoBehaviour
{
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public values
/**
* View game object of solar system level.
*
* InvisibleObjectsCanvas.GameView.GalaxyView.SolarSystemView
*/
public SolarSystemViewScript oSolarSystemView;
/**
* Canvas reference containing galaxy ui.
*
* GalaxyCanvas
*/
public GameObject GalaxyCanvas;
/**
* Canvas reference containing solar system ui.
*
* SolarSystemCanvas
*/
public GameObject SolarSystemCanvas;
/**
* Canvas reference containing galaxy bodies ui.
*
* GalaxyCanvas.GalaxyBodysCanvas
*/
public Canvas GalaxyBodysCanvas;
/**
* Reference to galaxy view spawner game object.
*
* GalaxyCanvas.GalaxyBodysCanvas.GalaxyViewSpawner
*/
public GalaxyViewSpawnerScript GalaxyViewSpawner;
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Private values
/**
* Array for references to solar system views which will be instantiated @see DisplaySolarSystems().
*/
private SolarSystemViewBody[] SolarSystemViewBodies;
/**
* Reference to a game model, set @see SetGameModel(GameModel oGameModel)
*/
private GameModel oGameModel;
/// <summary>
/// Lets spawner instantiate solarsystemviewbodies.
/// </summary>
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Public functions
/**
* Lets spawner instantiate solar system view bodies.
* Afterwards sets values of them.
* Also adds event listeners on click.
*/
public void DisplaySolarSystems()
{
SolarSystemViewBodies = GalaxyViewSpawner.SpawnSolarSystems(oGameModel.GalaxyModel.SolarSystemCount);
SolarSystemModel[] aoSolarSystemModels = oGameModel.GalaxyModel.SolarSystemModels;
for (int i = 0; i < SolarSystemViewBodies.Length; i++)
{
SolarSystemViewBodies[i].SolarSystemSprite = oGameModel.GalaxyModel.SolarSystemModels[i].SolarSystemSprite;
// Set solar system sprite
SolarSystemViewBodies[i].SolarSystemSprite = aoSolarSystemModels[i].SolarSystemSprite;
// Set position related attributes
SolarSystemViewBodies[i].transform.SetParent(GalaxyBodysCanvas.transform, false);
SolarSystemViewBodies[i].transform.position = oGameModel.GalaxyModel.SolarSystemModels[i].Position;
SolarSystemViewBodies[i].transform.position = aoSolarSystemModels[i].Position;
SolarSystemViewBodies[i].transform.localScale = new Vector3(1, 1, 1);
SolarSystemViewBodies[i].ID = oGameModel.GalaxyModel.SolarSystemModels[i].SolarSystemID;
// Set unique solar system id
SolarSystemViewBodies[i].ID = aoSolarSystemModels[i].SolarSystemID;
// Add event listeners, on click
int ID = SolarSystemViewBodies[i].ID;
SolarSystemViewBodies[i].onClick.AddListener(() => DisplaySolarSystem(ID));
SolarSystemViewBodies[i].onClick.AddListener(() => SetSolarSystemCanvasActive());
@@ -42,21 +103,11 @@ public class GalaxyViewScript : MonoBehaviour
}
}
private void SetSolarSystemCanvasActive()
{
SolarSystemCanvas.SetActive(true);
}
private void SetGalaxyCanvasInactive()
{
GalaxyCanvas.SetActive(false);
}
private void DisplaySolarSystem(int iSolarSystemID)
{
NSolarSystem.SolarSystemController.SolarSystemPressedEvent(this, new NSolarSystem.SolarSystemEventArgs(ESolarSystemEvent.SolarSystemClicked, iSolarSystemID));
}
/**
* Sets game model reference of this and children.
*
* @param oGameModel, reference to game model.
*/
public void SetGameModel(GameModel oGameModel)
{
// Set own game model
@@ -65,4 +116,35 @@ public class GalaxyViewScript : MonoBehaviour
// Set sub views game model
oSolarSystemView.SetGameModel(oGameModel);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Private functions
/**
* Sets solar system canvas active.
*/
private void SetSolarSystemCanvasActive()
{
SolarSystemCanvas.SetActive(true);
}
/**
* Sets galaxy canvas inactive.
*/
private void SetGalaxyCanvasInactive()
{
GalaxyCanvas.SetActive(false);
}
/**
* Triggers event of solar system controller, that solar system with unique id iSolarSystemID was clicked.
*/
private void DisplaySolarSystem(int iSolarSystemID)
{
NSolarSystem.SolarSystemEventArgs oSolarSystemWasClickedWithID = new NSolarSystem.SolarSystemEventArgs(ESolarSystemEvent.SolarSystemClicked, iSolarSystemID);
NSolarSystem.SolarSystemController.SolarSystemPressedEvent(this, oSolarSystemWasClickedWithID);
}
}

View File

@@ -1,19 +1,36 @@
/**
* @file
*
* @author Mohamad Kadou
* @author Aaron Moser
*
* @package Assets.Scripts.Galaxy.View
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* @section DESCRIPTION
*
* Class contains functionality to instantiate a number of solar system view body prefabs.
*/
public class GalaxyViewSpawnerScript : MonoBehaviour
{
/// <summary>
/// Prefab to instantiate.
/// </summary>
/**
* Prefab reference to instantiate.
*
* Assets.PreFabs.SolarSystem
*/
public SolarSystemViewBody SolarSystemViewBodyPrefab;
/// <summary>
/// Instantiates iCountOfSolarSystems PlanetViewBodies and returns the array reference.
/// </summary>
/// <param name="iCountOfSolarSystems"></param>
/// <returns></returns>
/**
* Instantiates iCountOfSolarSystems PlanetViewBodies and returns the array reference.
*
* @param iCountOfSolarSystems, count of solar systems to instantiate.
*
* @return Array with solar system bodies references, which were instantiated.
*/
public SolarSystemViewBody[] SpawnSolarSystems(int iCountOfSolarSystems)
{
SolarSystemViewBody[] aoSolarSystemViewBodies = new SolarSystemViewBody[iCountOfSolarSystems];