Pull request #37: Finish integrating level selector

Merge in CGD/gather-and-defend from feature/integrateLevelSelector to main

* commit '9696ee614e4666d93da40bcec686e87ac6a30559':
  spawners n'apparaissent plus + beau back button
  finish integrating level selector
This commit is contained in:
Felix-gabriel Boucher-luneau 2023-07-25 23:07:22 +00:00
commit fb80cc3c9b
14 changed files with 3051 additions and 2400 deletions

View File

@ -7,6 +7,8 @@ public class LevelManagerEditor : Editor
public override void OnInspectorGUI()
{
DrawDefaultInspector();
if (Application.isPlaying)
{
if (GUILayout.Button("Save"))
{
LevelManager.Instance.SaveFile();
@ -16,4 +18,5 @@ public class LevelManagerEditor : Editor
LevelManager.Instance.LoadFile();
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 096f5f6b487dccb41a48faf69f87fae9
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -538,7 +538,7 @@ Camera:
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Bits: 55
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
@ -783,6 +783,14 @@ PrefabInstance:
propertyPath: m_Name
value: LevelManager
objectReference: {fileID: 0}
- target: {fileID: 3028288566889208750, guid: 02daecb0115395844b4932445d039051, type: 3}
propertyPath: _gameScene
value: Game
objectReference: {fileID: 0}
- target: {fileID: 3028288566889208750, guid: 02daecb0115395844b4932445d039051, type: 3}
propertyPath: _firstLevel
value:
objectReference: {fileID: 11400000, guid: a6e34739c9325da4cac4fbaea30d052c, type: 2}
- target: {fileID: 3028288566889208751, guid: 02daecb0115395844b4932445d039051, type: 3}
propertyPath: m_RootOrder
value: 2
@ -926,6 +934,7 @@ RectTransform:
- {fileID: 115274809}
- {fileID: 1709530844}
- {fileID: 2019202047}
- {fileID: 2064630363}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -1808,3 +1817,152 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2019202046}
m_CullTransparentMesh: 1
--- !u!1 &2064630362
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2064630363}
- component: {fileID: 2064630366}
- component: {fileID: 2064630365}
- component: {fileID: 2064630364}
- component: {fileID: 2064630367}
m_Layer: 5
m_Name: TemporaryGoBackButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2064630363
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2064630362}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1092900232}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 786, y: 603.62}
m_SizeDelta: {x: 97.7374, y: 78.499}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2064630364
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2064630362}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 2064630365}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2064630367}
m_TargetAssemblyTypeName: ChangeScene, GameAssembly
m_MethodName: LoadScene
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!114 &2064630365
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2064630362}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 40f4f2cff86c68f4aaccce14435eba65, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &2064630366
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2064630362}
m_CullTransparentMesh: 1
--- !u!114 &2064630367
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2064630362}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5013085c123fae4499f80b0a896f63af, type: 3}
m_Name:
m_EditorClassIdentifier:
scene: LevelSelect
sceneAction: 0
loadSceneMode: 0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ChangeScene : MonoBehaviour
{
[Scene]
public string scene;
public SceneActionType sceneAction;
public LoadSceneMode loadSceneMode;
public enum SceneActionType
{
Load,
Unload
}
public void LoadScene()
{
if (sceneAction == SceneActionType.Load)
{
SceneManager.LoadScene(scene, loadSceneMode);
}
else if (sceneAction == SceneActionType.Unload)
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
if (scene.name == this.scene)
{
SceneManager.UnloadSceneAsync(scene);
}
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5013085c123fae4499f80b0a896f63af
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -5,7 +5,7 @@ public class ObjectPlaceholder : DraggablePlaceholder
public GameObject Prefab { get; set; }
public override void Place()
{
Prefab.Create(transform.position);
Prefab.Create(transform.position, parent : LevelManager.Instance.LevelTransform);
}
public override bool CanBePlacedHere()
{

View File

@ -132,7 +132,12 @@ namespace GatherAndDefend.LevelEditor
//get grid
var grid = GameObject.FindObjectOfType<Grid>();
if (!grid) grid = new GameObject("Grid").AddComponent<Grid>();
if (!grid)
{
var levelMgrScript = GameObject.FindObjectOfType<LevelManagerScript>();
grid = new GameObject("Grid").AddComponent<Grid>();
grid.transform.SetParent(levelMgrScript.transform.parent);
}
//get tilemap by name
var tilemap = grid.GetComponentInChildren<Tilemap>(key);

View File

@ -96,8 +96,9 @@ public class LevelManager : Singleton<LevelManager>
#region [Level management]
public void UpdateLevel()
public void AddAndRemoveObjects()
{
//add and remove
var toAdd = new List<ILevelObject>(_toAdd);
toAdd.ForEach(addedObject =>
{
@ -113,27 +114,18 @@ public class LevelManager : Singleton<LevelManager>
_levelObjects.Remove(removedObject);
removedObject.LevelDestroy();
});
}
public void UpdateLevel()
{
AddAndRemoveObjects();
_levelObjects.ForEach(levelObject =>
{
levelObject.LevelUpdate();
});
toAdd = new List<ILevelObject>(_toAdd);
toAdd.ForEach(addedObject =>
{
_toAdd.Remove(addedObject);
_levelObjects.Add(addedObject);
addedObject.LevelStart();
});
toRemove = new List<ILevelObject>(_toRemove);
toRemove.ForEach(removedObject =>
{
_toRemove.Remove(removedObject);
_levelObjects.Remove(removedObject);
removedObject.LevelDestroy();
});
AddAndRemoveObjects();
}
public void ClearLevel()
@ -162,7 +154,9 @@ public class LevelManager : Singleton<LevelManager>
//create new grid if there is none
if (!grid)
{
var levelMgrScript = Object.FindObjectOfType<LevelManagerScript>();
grid = new GameObject("Grid").AddComponent<Grid>();
grid.transform.SetParent(levelMgrScript.transform);
}
//remove all tilemaps if there is a grid
else
@ -199,11 +193,6 @@ public class LevelManager : Singleton<LevelManager>
ClearLevel();
}
foreach (var ob in Database.Instance.ScriptableObjects)
{
Debug.Log(ob);
}
//fetch level from database
_currentLevel = Database.Instance.ScriptableObjects[levelName] as Level;
@ -290,10 +279,5 @@ public class LevelManager : Singleton<LevelManager>
}
/// <summary>
/// align camera to the rightmost tile of the tilemap
/// </summary>
#endregion
}

View File

@ -1,14 +1,15 @@
using UnityEngine;
using GatherAndDefend.LevelEditor;
public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
using UnityEngine.SceneManagement;
using Level = GatherAndDefend.LevelEditor.Level;
public class LevelManagerScript : MonoBehaviour
{
public Level firstLevel;
[Scene][SerializeField]
private string _gameScene;
[SerializeField]
private Level _firstLevel;
private void Start()
{
DontDestroyOnLoad(gameObject);
if (!firstLevel) throw new System.Exception("there is no first level set in the level manager script");
LevelManager.Instance.LevelTransform = transform;
int levelToLoadFromWorldMap = PlayerPrefs.GetInt("LevelToLoad", -1);
if (levelToLoadFromWorldMap != -1)
{
@ -16,8 +17,14 @@ public class LevelManagerScript : SingletonBehaviour<LevelManagerScript>
LevelManager.Instance.LoadLevel(lvlName, true);
return;
}
LevelManager.Instance.LoadLevel(firstLevel, true);
else if (_firstLevel)
{
LevelManager.Instance.LoadLevel(_firstLevel, true);
}
else
{
Debug.LogWarning("there is no first level set in the level manager script");
}
}
void Update()

View File

@ -0,0 +1,55 @@
using UnityEditor;
using UnityEngine;
public class SceneAttribute : PropertyAttribute { }
[CustomPropertyDrawer(typeof(SceneAttribute))]
public class SceneDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
if (property.propertyType == SerializedPropertyType.String)
{
var sceneObject = GetSceneObject(property.stringValue);
var scene = EditorGUI.ObjectField(position, label, sceneObject, typeof(SceneAsset), true);
if (scene == null)
{
property.stringValue = "";
}
else if (scene.name != property.stringValue)
{
var sceneObj = GetSceneObject(scene.name);
if (sceneObj == null)
{
Debug.LogWarning("The scene " + scene.name + " cannot be used. To use this scene add it to the build settings for the project");
}
else
{
property.stringValue = scene.name;
}
}
}
else
EditorGUI.LabelField(position, label.text, "Use [Scene] with strings.");
}
protected SceneAsset GetSceneObject(string sceneObjectName)
{
if (string.IsNullOrEmpty(sceneObjectName))
{
return null;
}
foreach (var editorScene in EditorBuildSettings.scenes)
{
if (editorScene.path.IndexOf(sceneObjectName) != -1)
{
return AssetDatabase.LoadAssetAtPath(editorScene.path, typeof(SceneAsset)) as SceneAsset;
}
}
Debug.LogWarning("Scene [" + sceneObjectName + "] cannot be used. Add this scene to the 'Scenes in the Build' in build settings.");
return null;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 389cc3c423055324fb8d7de50f62f709
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -16,6 +16,8 @@ public class WorldMapManager : MonoBehaviour
private Sprite _lockedIcon;
[SerializeField]
private Sprite _savedIcon;
[Scene][SerializeField]
private string gameScene;
private WorldMapSave _worldMapSave;
@ -70,12 +72,10 @@ public class WorldMapManager : MonoBehaviour
public void CallLevelWorld1(int levelToCall)
{
string levelToGet = "1-" + levelToCall;
if (_buttonList[levelToCall - 1].GetComponent<Image>().sprite.name != "worldmap_level_locked")
{
PlayerPrefs.SetInt("LevelToLoad", levelToCall);
SceneManager.LoadScene("Game");
//LevelManager.Instance.LoadLevel(levelToGet, true);
SceneManager.LoadScene(gameScene);
}
}
}