Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
5 changes: 4 additions & 1 deletion Assets/Scripts/Map/MapService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace ServiceLocator.Map
{
public class MapService : MonoBehaviour
public class MapService :GenericMonoSingleton<MapService>
{
[SerializeField] private EventService eventService;
[SerializeField] private MapScriptableObject mapScriptableObject;
Expand All @@ -16,6 +16,9 @@ public class MapService : MonoBehaviour
private MapData currentMapData;
private SpriteRenderer tileOverlay;




private void Start()
{
SubscribeToEvents();
Expand Down
29 changes: 14 additions & 15 deletions Assets/Scripts/Player/PlayerService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,33 @@

namespace ServiceLocator.Player
{
public class PlayerService : MonoBehaviour
public class PlayerService : GenericMonoSingleton<PlayerService>
{
[SerializeField] private UIService uiService;
[SerializeField] private MapService mapService;
[SerializeField] private SoundService soundService;
[SerializeField] private PlayerService playerService;

[SerializeField] public PlayerScriptableObject playerScriptableObject;



private ProjectilePool projectilePool;

private List<MonkeyController> activeMonkeys;
private MonkeyView selectedMonkeyView;
private int health;
public int Money { get; private set; }


private void Start()
{
projectilePool = new ProjectilePool(playerService, playerScriptableObject.ProjectilePrefab, playerScriptableObject.ProjectileScriptableObjects);
projectilePool = new ProjectilePool( playerScriptableObject.ProjectilePrefab, playerScriptableObject.ProjectileScriptableObjects);
InitializeVariables();
}

private void InitializeVariables()
{
health = playerScriptableObject.Health;
Money = playerScriptableObject.Money;
uiService.UpdateHealthUI(health);
uiService.UpdateMoneyUI(Money);
UIService.Instance.UpdateHealthUI(health);
UIService.Instance.UpdateMoneyUI(Money);
activeMonkeys = new List<MonkeyController>();
}

Expand Down Expand Up @@ -82,18 +81,18 @@ public void ValidateSpawnPosition(int monkeyCost, Vector3 dropPosition)
if (monkeyCost > Money)
return;

mapService.ValidateSpawnPosition(dropPosition);
MapService.Instance.ValidateSpawnPosition(dropPosition);
}

public void TrySpawningMonkey(MonkeyType monkeyType, int monkeyCost, Vector3 dropPosition)
{
if (monkeyCost > Money)
return;

if (mapService.TryGetMonkeySpawnPosition(dropPosition, out Vector3 spawnPosition))
if (MapService.Instance.TryGetMonkeySpawnPosition(dropPosition, out Vector3 spawnPosition))
{
SpawnMonkey(monkeyType, spawnPosition);
soundService.PlaySoundEffects(SoundType.SpawnMonkey);
SoundService.Instance.PlaySoundEffects(SoundType.SpawnMonkey);
}
}

Expand All @@ -116,23 +115,23 @@ public void TakeDamage(int damageToTake)
int reducedHealth = health - damageToTake;
health = reducedHealth <= 0 ? 0 : health - damageToTake;

uiService.UpdateHealthUI(health);
UIService.Instance.UpdateHealthUI(health);
if(health <= 0)
PlayerDeath();
}

private void DeductMoney(int moneyToDedecut)
{
Money -= moneyToDedecut;
uiService.UpdateMoneyUI(Money);
UIService.Instance.UpdateMoneyUI(Money);
}

public void GetReward(int reward)
{
Money += reward;
uiService.UpdateMoneyUI(Money);
UIService.Instance.UpdateMoneyUI(Money);
}

private void PlayerDeath() => uiService.UpdateGameEndUI(false);
private void PlayerDeath() => UIService.Instance.UpdateGameEndUI(false);
}
}
6 changes: 2 additions & 4 deletions Assets/Scripts/Player/Projectile/ProjectileController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,14 @@ namespace ServiceLocator.Player.Projectile
{
public class ProjectileController
{
private PlayerService playerService;
private ProjectileView projectileView;
private ProjectileScriptableObject projectileScriptableObject;

private BloonController target;
private ProjectileState currentState;

public ProjectileController(PlayerService playerService, ProjectileView projectilePrefab, Transform projectileContainer)
public ProjectileController( ProjectileView projectilePrefab, Transform projectileContainer)
{
this.playerService = playerService;
projectileView = Object.Instantiate(projectilePrefab, projectileContainer);
projectileView.SetController(this);
}
Expand Down Expand Up @@ -63,7 +61,7 @@ public void ResetProjectile()
{
target = null;
projectileView.gameObject.SetActive(false);
playerService.ReturnProjectileToPool(this);
PlayerService.Instance.ReturnProjectileToPool(this);
}

private void SetState(ProjectileState newState) => currentState = newState;
Expand Down
6 changes: 2 additions & 4 deletions Assets/Scripts/Player/Projectile/ProjectilePool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@ namespace ServiceLocator.Player.Projectile
{
public class ProjectilePool : GenericObjectPool<ProjectileController>
{
private PlayerService playerService;
private ProjectileView projectilePrefab;
private List<ProjectileScriptableObject> projectileScriptableObjects;
private Transform projectileContainer;

public ProjectilePool(PlayerService playerService, ProjectileView projectilePrefab, List<ProjectileScriptableObject> projectileScriptableObjects)
public ProjectilePool( ProjectileView projectilePrefab, List<ProjectileScriptableObject> projectileScriptableObjects)
{
this.playerService = playerService;
this.projectilePrefab = projectilePrefab;
this.projectileScriptableObjects = projectileScriptableObjects;
this.projectileContainer = new GameObject("Projectile Container").transform;
Expand All @@ -33,6 +31,6 @@ public ProjectileController GetProjectile(ProjectileType projectileType)
return projectile;
}

protected override ProjectileController CreateItem() => new ProjectileController(playerService, projectilePrefab, projectileContainer);
protected override ProjectileController CreateItem() => new ProjectileController( projectilePrefab, projectileContainer);
}
}
4 changes: 3 additions & 1 deletion Assets/Scripts/Sound/SoundService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@

namespace ServiceLocator.Sound
{
public class SoundService : MonoBehaviour
public class SoundService : GenericMonoSingleton<SoundService>
{
[SerializeField] private SoundScriptableObject soundScriptableObject;
[SerializeField] private AudioSource audioEffects;
[SerializeField] private AudioSource backgroundMusic;



private void Start()
{
PlaybackgroundMusic(SoundType.BackgroundMusic, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,11 @@ namespace ServiceLocator.UI
{
public class MonkeyCellController
{
private PlayerService playerService;
private MonkeyCellView monkeyCellView;
private MonkeyCellScriptableObject monkeyCellSO;

public MonkeyCellController(PlayerService playerService, Transform cellContainer, MonkeyCellView monkeyCellPrefab, MonkeyCellScriptableObject monkeyCellScriptableObject)
public MonkeyCellController( Transform cellContainer, MonkeyCellView monkeyCellPrefab, MonkeyCellScriptableObject monkeyCellScriptableObject)
{
this.playerService = playerService;
this.monkeyCellSO = monkeyCellScriptableObject;
monkeyCellView = Object.Instantiate(monkeyCellPrefab, cellContainer);
monkeyCellView.SetController(this);
Expand All @@ -20,12 +18,12 @@ public MonkeyCellController(PlayerService playerService, Transform cellContainer

public void MonkeyDraggedAt(Vector3 dragPosition)
{
playerService.ValidateSpawnPosition(monkeyCellSO.Cost, dragPosition);
PlayerService.Instance.ValidateSpawnPosition(monkeyCellSO.Cost, dragPosition);
}

public void MonkeyDroppedAt(Vector3 dropPosition)
{
playerService.TrySpawningMonkey(monkeyCellSO.Type, monkeyCellSO.Cost, dropPosition);
PlayerService.Instance.TrySpawningMonkey(monkeyCellSO.Type, monkeyCellSO.Cost, dropPosition);
}
}
}
48 changes: 46 additions & 2 deletions Assets/Scripts/UI/MonkeySelectionPanel/MonkeyImageHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,66 @@

namespace ServiceLocator.UI
{
public class MonkeyImageHandler : MonoBehaviour
public class MonkeyImageHandler : MonoBehaviour, IDragHandler, IEndDragHandler, IPointerDownHandler
{
private Image monkeyImage;
private MonkeyCellController owner;
private Sprite spriteToSet;
private RectTransform rectTransform;
private Vector3 originalPosition;
private Vector3 originalAnchorPosition;

public void ConfigureImageHandler(Sprite spriteToSet, MonkeyCellController owner)
{
this.spriteToSet = spriteToSet;
this.owner = owner;
}
}

private void Awake()
{
monkeyImage = GetComponent<Image>();
monkeyImage.sprite = spriteToSet;
rectTransform = GetComponent<RectTransform>();
originalAnchorPosition = rectTransform.anchoredPosition;
originalPosition = rectTransform.position;


}


public void OnEndDrag(PointerEventData eventData)
{
ResetMokey();
owner.MonkeyDroppedAt(eventData.position);
}

void ResetMokey()
{
rectTransform.anchoredPosition = originalAnchorPosition;
rectTransform.position = originalPosition;
GetComponent<LayoutElement>().enabled = false;
GetComponent<LayoutElement>().enabled = true;
monkeyImage.color = new Color(1, 1, 1, 1);

}

public void OnPointerDown(PointerEventData eventData)
{
monkeyImage.color = new Color(1, 1, 1, 0.5f);
}

public void OnDrag(PointerEventData eventData)
{
Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
rectTransform.parent as RectTransform, // Reference to the parent UI element
eventData.position, // Mouse position
eventData.pressEventCamera, // Camera that rendered the UI
out localPoint // Converted local position
);

rectTransform.anchoredPosition = localPoint;
owner.MonkeyDraggedAt(rectTransform.position);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ public class MonkeySelectionUIController
private Transform cellContainer;
private List<MonkeyCellController> monkeyCellControllers;

public MonkeySelectionUIController(PlayerService playerService, Transform cellContainer, MonkeyCellView monkeyCellPrefab, List<MonkeyCellScriptableObject> monkeyCellScriptableObjects)
public MonkeySelectionUIController( Transform cellContainer, MonkeyCellView monkeyCellPrefab, List<MonkeyCellScriptableObject> monkeyCellScriptableObjects)
{
this.cellContainer = cellContainer;
monkeyCellControllers = new List<MonkeyCellController>();

foreach (MonkeyCellScriptableObject monkeySO in monkeyCellScriptableObjects)
{
MonkeyCellController monkeyCell = new MonkeyCellController(playerService, cellContainer, monkeyCellPrefab, monkeySO);
MonkeyCellController monkeyCell = new MonkeyCellController( cellContainer, monkeyCellPrefab, monkeySO);
monkeyCellControllers.Add(monkeyCell);
}
}
Expand Down
10 changes: 5 additions & 5 deletions Assets/Scripts/UI/UIService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@

namespace ServiceLocator.UI
{
public class UIService : MonoBehaviour
public class UIService : GenericMonoSingleton<UIService>
{
[SerializeField] private EventService eventService;
[SerializeField] private WaveService waveService;
[SerializeField] private PlayerService playerService;

[Header("Gameplay Panel")]
[SerializeField] private GameObject gameplayPanel;
Expand Down Expand Up @@ -41,9 +39,11 @@ public class UIService : MonoBehaviour
[SerializeField] private Button quitButton;




private void Start()
{
monkeySelectionController = new MonkeySelectionUIController(playerService, cellContainer, monkeyCellPrefab, monkeyCellScriptableObjects);
monkeySelectionController = new MonkeySelectionUIController( cellContainer, monkeyCellPrefab, monkeyCellScriptableObjects);
MonkeySelectionPanel.SetActive(false);
monkeySelectionController.SetActive(false);

Expand Down Expand Up @@ -71,7 +71,7 @@ public void OnMapSelected(int mapID)

private void OnNextWaveButton()
{
waveService.StarNextWave();
WaveService.Instance.StarNextWave();
SetNextWaveButton(false);
}

Expand Down
24 changes: 24 additions & 0 deletions Assets/Scripts/Utilities/GenericMonoSingleton.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GenericMonoSingleton<T> : MonoBehaviour where T: GenericMonoSingleton<T>
{
public static T Instance { get { return instance; } }

private static T instance;

private void Awake()
{
if (!instance)
{
instance = (T)this;
}
else if(instance)
{
Destroy(this.gameObject);
}
}


}
11 changes: 11 additions & 0 deletions Assets/Scripts/Utilities/GenericMonoSingleton.cs.meta

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

Loading