Skip to content

Commit 86bbba3

Browse files
committed
feat(core): add tutorial 41 code
1 parent 674e8dd commit 86bbba3

14 files changed

Lines changed: 276 additions & 12 deletions
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System.Reflection;
2+
using UnityEngine;
3+
using UnityEditor;
4+
using UnityEngine.SceneManagement;
5+
6+
[InitializeOnLoad]
7+
public class MapMetadataExtractorHierarchyExtensions
8+
{
9+
private static GUIStyle _btnStyle;
10+
11+
static MapMetadataExtractorHierarchyExtensions()
12+
{
13+
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
14+
}
15+
16+
private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
17+
{
18+
if (_btnStyle == null)
19+
{
20+
_btnStyle = new GUIStyle(GUI.skin.button);
21+
_btnStyle.fontSize = 10;
22+
}
23+
24+
Object obj = EditorUtility.InstanceIDToObject(instanceID);
25+
26+
// if obj is null: item is a Scene in the hierarchy
27+
if (obj == null)
28+
{
29+
Scene s = _GetSceneFromInstanceID(instanceID);
30+
float width = 80f;
31+
Rect btnPosition = new Rect(
32+
selectionRect.x + selectionRect.width - width - 4,
33+
selectionRect.y + 1,
34+
width,
35+
selectionRect.height - 2);
36+
if (GUI.Button(btnPosition, "Extract", _btnStyle))
37+
MapMetadataExtractor.Extract(s);
38+
}
39+
}
40+
41+
private static Scene _GetSceneFromInstanceID(int id)
42+
{
43+
System.Type type = typeof(UnityEditor.SceneManagement.EditorSceneManager);
44+
MethodInfo mi = type.GetMethod(
45+
"GetSceneByHandle",
46+
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
47+
object classInstance = System.Activator.CreateInstance(type, null);
48+
return (Scene)mi.Invoke(classInstance, new object[] { id });
49+
}
50+
51+
}

Assets/Editor/MapMetadataExtractorHierarchyExtensions.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/Core.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/Core/CoreBooter.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
using UnityEngine.SceneManagement;
5+
6+
public class CoreBooter : MonoBehaviour
7+
{
8+
public static CoreBooter instance;
9+
10+
private void Awake()
11+
{
12+
if (instance == null)
13+
instance = this;
14+
}
15+
16+
private void Start()
17+
{
18+
LoadMap("Map1");
19+
//SceneManager.LoadSceneAsync("SampleScene", LoadSceneMode.Additive);
20+
}
21+
22+
public void LoadMap(string mapReference)
23+
{
24+
MapData d = Resources.Load<MapData>($"ScriptableObjects/Maps/{mapReference}");
25+
CoreDataHandler.instance.SetMapData(d);
26+
string s = d.sceneName;
27+
SceneManager.LoadSceneAsync(s, LoadSceneMode.Additive).completed += (_) =>
28+
{
29+
SceneManager.SetActiveScene(SceneManager.GetSceneByName(s));
30+
SceneManager.LoadSceneAsync("GameScene", LoadSceneMode.Additive);
31+
};
32+
}
33+
}

Assets/Scripts/Core/CoreBooter.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public class CoreDataHandler : MonoBehaviour
6+
{
7+
public static CoreDataHandler instance;
8+
9+
private MapData _mapData;
10+
11+
public string Scene => _mapData.sceneName;
12+
public float MapSize => _mapData.mapSize;
13+
14+
private void Awake()
15+
{
16+
if (instance == null)
17+
instance = this;
18+
}
19+
20+
public void SetMapData(MapData d)
21+
{
22+
_mapData = d;
23+
}
24+
}

Assets/Scripts/Core/CoreDataHandler.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/Managers/GameManager.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Collections;
1+
using System.Collections;
22
using System.Collections.Generic;
33
using UnityEngine;
44
using UnityEngine.AI;
@@ -16,12 +16,15 @@ public class GameManager : MonoBehaviour
1616
public GameObject fov;
1717

1818
[Header("Minimap")]
19+
public Transform minimapAnchor;
20+
public Camera minimapCamera;
21+
public BoxCollider minimapFOVCollider;
22+
public Minimap minimapScript;
1923
public Collider mapWrapperCollider;
2024
public int terrainSize = 200;
2125

2226
[HideInInspector]
2327
public bool gameIsPaused;
24-
public Vector3 startPosition;
2528

2629
[HideInInspector]
2730
public float producingRate = 3f; // in seconds
@@ -46,7 +49,8 @@ private void Awake()
4649
// enable/disable FOV depending on game parameters
4750
fov.SetActive(gameGlobalParameters.enableFOV);
4851

49-
_GetStartPosition();
52+
_SetupMinimap();
53+
5054
gameIsPaused = false;
5155
}
5256

@@ -55,6 +59,20 @@ public void Start()
5559
instance = this;
5660
}
5761

62+
private void _SetupMinimap()
63+
{
64+
Bounds b = GameObject.Find("Terrain").GetComponent<Terrain>().terrainData.bounds;
65+
66+
float terrainSize = b.size.x;
67+
float p = terrainSize / 2;
68+
69+
minimapAnchor.position = new Vector3(p, 0, p);
70+
minimapCamera.orthographicSize = p;
71+
minimapFOVCollider.center = new Vector3(0, b.center.y, 0);
72+
minimapFOVCollider.size = b.size;
73+
minimapScript.terrainSize = Vector2.one * terrainSize;
74+
}
75+
5876
private void Update()
5977
{
6078
if (Input.anyKeyDown)
@@ -116,11 +134,6 @@ private void _OnUpdateFOV(object data)
116134
fov.SetActive(fovIsOn);
117135
}
118136

119-
private void _GetStartPosition()
120-
{
121-
startPosition = Utils.MiddleOfScreenPointToWorld();
122-
}
123-
124137
private void OnApplicationQuit()
125138
{
126139
#if !UNITY_EDITOR
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using UnityEngine;
2+
3+
[CreateAssetMenu(fileName = "Map", menuName = "Scriptable Objects/Map")]
4+
public class MapData : ScriptableObject
5+
{
6+
7+
public string mapName;
8+
public float mapSize;
9+
10+
public string sceneName;
11+
}

Assets/Scripts/ScriptableObjects/MapData.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)