Skip to content

Commit 4b14ffc

Browse files
committed
feat: Added auto generator
1 parent cbad856 commit 4b14ffc

File tree

6 files changed

+322
-5
lines changed

6 files changed

+322
-5
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using Code.Infrastructure.Generator.Services;
2+
using UnityEngine;
3+
using UnityEngine.UI;
4+
using Zenject;
5+
6+
namespace Code.Infrastructure.Generator
7+
{
8+
public class ButtonAutoGenerateLevel : MonoBehaviour
9+
{
10+
[SerializeField] private Button _buttonGenerateLevel;
11+
12+
private ILevelGeneratorService _levelGeneratorService;
13+
14+
private void OnValidate()
15+
{
16+
if(_buttonGenerateLevel == null)
17+
_buttonGenerateLevel = GetComponent<Button>();
18+
}
19+
20+
[Inject]
21+
public void Construct(ILevelGeneratorService levelGeneratorService)
22+
{
23+
_levelGeneratorService = levelGeneratorService;
24+
}
25+
26+
private void Start()
27+
{
28+
_buttonGenerateLevel.onClick.AddListener(OnGenerateLevelButtonClick);
29+
}
30+
31+
private void Update()
32+
{
33+
_levelGeneratorService?.Tick(Time.deltaTime);
34+
}
35+
36+
private void OnDestroy()
37+
{
38+
_buttonGenerateLevel.onClick.RemoveListener(OnGenerateLevelButtonClick);
39+
}
40+
41+
private void OnGenerateLevelButtonClick()
42+
{
43+
if (!_levelGeneratorService.HasEnableAutoSwitch())
44+
{
45+
_levelGeneratorService.EnableAutoSwitch(true, 5f);
46+
_buttonGenerateLevel.image.color = Color.cyan;
47+
}
48+
else
49+
{
50+
_levelGeneratorService.EnableAutoSwitch(false, 5f);
51+
_buttonGenerateLevel.image.color = Color.red;
52+
}
53+
}
54+
}
55+
}

Assets/Code/Infrastructure/Generator/ButtonAutoGenerateLevel.cs.meta

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

Assets/Code/Infrastructure/Generator/ButtonGenerateLevel.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
using System;
2-
using Code.Infrastructure.Generator.Services;
31
using UnityEngine;
42
using UnityEngine.UI;
53
using Zenject;
4+
using Code.Infrastructure.Generator.Services;
65

76
namespace Code
87
{

Assets/Code/Infrastructure/Generator/Services/ILevelGeneratorService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ public interface ILevelGeneratorService
99
void CleanUp(Action onComplete = null);
1010
void GenerateLevel();
1111
void LoadNextLevel();
12+
void Tick(float deltaTime);
13+
void EnableAutoSwitch(bool enabled, float delaySeconds = 5f);
14+
bool HasEnableAutoSwitch();
1215
}
1316
}

Assets/Code/Infrastructure/Generator/Services/LevelGeneratorService.cs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
using System;
2+
using UnityEngine;
13
using Code.Infrastructure.Generator.Factory;
24
using Code.Infrastructure.Services.StaticData;
35
using Code.Infrastructure.StaticData;
46
using Code.LevelEditor;
57
using DG.Tweening;
6-
using System;
7-
using UnityEngine;
88

99
namespace Code.Infrastructure.Generator.Services
1010
{
@@ -14,6 +14,10 @@ public class LevelGeneratorService : ILevelGeneratorService
1414
private GameObject _rootMapHolder;
1515
private int _currentLevelIndex = 1;
1616

17+
private float _nextLevelDelay = 5f;
18+
private bool _autoSwitchEnabled = false;
19+
private float _timer;
20+
1721
private readonly IStaticDataService _staticDataService;
1822
private readonly ITileFactory _tileFactory;
1923
private readonly IBlockFactory _blockFactory;
@@ -130,5 +134,27 @@ public void LoadNextLevel()
130134
CleanUp(() => GenerateLevel());
131135
_currentLevelIndex++;
132136
}
137+
138+
public void Tick(float deltaTime)
139+
{
140+
if (!_autoSwitchEnabled)
141+
return;
142+
143+
_timer += deltaTime;
144+
if (_timer >= _nextLevelDelay)
145+
{
146+
_timer = 0;
147+
LoadNextLevel();
148+
}
149+
}
150+
151+
public bool HasEnableAutoSwitch() => _autoSwitchEnabled;
152+
153+
public void EnableAutoSwitch(bool enabled, float delaySeconds = 5f)
154+
{
155+
_autoSwitchEnabled = enabled;
156+
_nextLevelDelay = delaySeconds;
157+
_timer = 0f;
158+
}
133159
}
134160
}

Assets/Resources/UI/GameHud.prefab

Lines changed: 232 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,235 @@
11
%YAML 1.1
22
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &467930264780422622
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 8726126793436277715}
12+
- component: {fileID: 2207331294330933465}
13+
- component: {fileID: 3920805192296619425}
14+
- component: {fileID: 2185575406066865739}
15+
- component: {fileID: 8186010676015788817}
16+
- component: {fileID: 1198516837710371643}
17+
m_Layer: 5
18+
m_Name: Button_Auto_Generate_Level
19+
m_TagString: Untagged
20+
m_Icon: {fileID: 0}
21+
m_NavMeshLayer: 0
22+
m_StaticEditorFlags: 0
23+
m_IsActive: 1
24+
--- !u!224 &8726126793436277715
25+
RectTransform:
26+
m_ObjectHideFlags: 0
27+
m_CorrespondingSourceObject: {fileID: 0}
28+
m_PrefabInstance: {fileID: 0}
29+
m_PrefabAsset: {fileID: 0}
30+
m_GameObject: {fileID: 467930264780422622}
31+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
32+
m_LocalPosition: {x: 0, y: 0, z: 0}
33+
m_LocalScale: {x: 1, y: 1, z: 1}
34+
m_ConstrainProportionsScale: 0
35+
m_Children:
36+
- {fileID: 3997704941678644245}
37+
m_Father: {fileID: 6547191552835619457}
38+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
39+
m_AnchorMin: {x: 0.5, y: 0.5}
40+
m_AnchorMax: {x: 0.5, y: 0.5}
41+
m_AnchoredPosition: {x: -102.54999, y: 896.4}
42+
m_SizeDelta: {x: 236.0422, y: 77.3151}
43+
m_Pivot: {x: 0.5, y: 0.5}
44+
--- !u!222 &2207331294330933465
45+
CanvasRenderer:
46+
m_ObjectHideFlags: 0
47+
m_CorrespondingSourceObject: {fileID: 0}
48+
m_PrefabInstance: {fileID: 0}
49+
m_PrefabAsset: {fileID: 0}
50+
m_GameObject: {fileID: 467930264780422622}
51+
m_CullTransparentMesh: 1
52+
--- !u!114 &3920805192296619425
53+
MonoBehaviour:
54+
m_ObjectHideFlags: 0
55+
m_CorrespondingSourceObject: {fileID: 0}
56+
m_PrefabInstance: {fileID: 0}
57+
m_PrefabAsset: {fileID: 0}
58+
m_GameObject: {fileID: 467930264780422622}
59+
m_Enabled: 1
60+
m_EditorHideFlags: 0
61+
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
62+
m_Name:
63+
m_EditorClassIdentifier:
64+
m_Material: {fileID: 0}
65+
m_Color: {r: 0.97931904, g: 0.9811321, b: 0.6803133, a: 1}
66+
m_RaycastTarget: 1
67+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
68+
m_Maskable: 1
69+
m_OnCullStateChanged:
70+
m_PersistentCalls:
71+
m_Calls: []
72+
m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
73+
m_Type: 1
74+
m_PreserveAspect: 0
75+
m_FillCenter: 1
76+
m_FillMethod: 4
77+
m_FillAmount: 1
78+
m_FillClockwise: 1
79+
m_FillOrigin: 0
80+
m_UseSpriteMesh: 0
81+
m_PixelsPerUnitMultiplier: 1
82+
--- !u!114 &2185575406066865739
83+
MonoBehaviour:
84+
m_ObjectHideFlags: 0
85+
m_CorrespondingSourceObject: {fileID: 0}
86+
m_PrefabInstance: {fileID: 0}
87+
m_PrefabAsset: {fileID: 0}
88+
m_GameObject: {fileID: 467930264780422622}
89+
m_Enabled: 1
90+
m_EditorHideFlags: 0
91+
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
92+
m_Name:
93+
m_EditorClassIdentifier:
94+
m_Navigation:
95+
m_Mode: 3
96+
m_WrapAround: 0
97+
m_SelectOnUp: {fileID: 0}
98+
m_SelectOnDown: {fileID: 0}
99+
m_SelectOnLeft: {fileID: 0}
100+
m_SelectOnRight: {fileID: 0}
101+
m_Transition: 1
102+
m_Colors:
103+
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
104+
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
105+
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
106+
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
107+
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
108+
m_ColorMultiplier: 1
109+
m_FadeDuration: 0.1
110+
m_SpriteState:
111+
m_HighlightedSprite: {fileID: 0}
112+
m_PressedSprite: {fileID: 0}
113+
m_SelectedSprite: {fileID: 0}
114+
m_DisabledSprite: {fileID: 0}
115+
m_AnimationTriggers:
116+
m_NormalTrigger: Normal
117+
m_HighlightedTrigger: Highlighted
118+
m_PressedTrigger: Pressed
119+
m_SelectedTrigger: Selected
120+
m_DisabledTrigger: Disabled
121+
m_Interactable: 1
122+
m_TargetGraphic: {fileID: 3920805192296619425}
123+
m_OnClick:
124+
m_PersistentCalls:
125+
m_Calls: []
126+
--- !u!114 &8186010676015788817
127+
MonoBehaviour:
128+
m_ObjectHideFlags: 0
129+
m_CorrespondingSourceObject: {fileID: 0}
130+
m_PrefabInstance: {fileID: 0}
131+
m_PrefabAsset: {fileID: 0}
132+
m_GameObject: {fileID: 467930264780422622}
133+
m_Enabled: 1
134+
m_EditorHideFlags: 0
135+
m_Script: {fileID: 11500000, guid: cfabb0440166ab443bba8876756fdfa9, type: 3}
136+
m_Name:
137+
m_EditorClassIdentifier:
138+
m_EffectColor: {r: 0, g: 0, b: 0, a: 1}
139+
m_EffectDistance: {x: 0, y: -7}
140+
m_UseGraphicAlpha: 1
141+
--- !u!114 &1198516837710371643
142+
MonoBehaviour:
143+
m_ObjectHideFlags: 0
144+
m_CorrespondingSourceObject: {fileID: 0}
145+
m_PrefabInstance: {fileID: 0}
146+
m_PrefabAsset: {fileID: 0}
147+
m_GameObject: {fileID: 467930264780422622}
148+
m_Enabled: 1
149+
m_EditorHideFlags: 0
150+
m_Script: {fileID: 11500000, guid: 886aeb64270c4a5b8ebf4aaa481640ab, type: 3}
151+
m_Name:
152+
m_EditorClassIdentifier:
153+
_buttonGenerateLevel: {fileID: 2185575406066865739}
154+
--- !u!1 &2690198130600451634
155+
GameObject:
156+
m_ObjectHideFlags: 0
157+
m_CorrespondingSourceObject: {fileID: 0}
158+
m_PrefabInstance: {fileID: 0}
159+
m_PrefabAsset: {fileID: 0}
160+
serializedVersion: 6
161+
m_Component:
162+
- component: {fileID: 3997704941678644245}
163+
- component: {fileID: 4345718852513938544}
164+
- component: {fileID: 8308099237010162340}
165+
m_Layer: 5
166+
m_Name: Text
167+
m_TagString: Untagged
168+
m_Icon: {fileID: 0}
169+
m_NavMeshLayer: 0
170+
m_StaticEditorFlags: 0
171+
m_IsActive: 1
172+
--- !u!224 &3997704941678644245
173+
RectTransform:
174+
m_ObjectHideFlags: 0
175+
m_CorrespondingSourceObject: {fileID: 0}
176+
m_PrefabInstance: {fileID: 0}
177+
m_PrefabAsset: {fileID: 0}
178+
m_GameObject: {fileID: 2690198130600451634}
179+
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
180+
m_LocalPosition: {x: 0, y: 0, z: 0}
181+
m_LocalScale: {x: 1, y: 1, z: 1}
182+
m_ConstrainProportionsScale: 0
183+
m_Children: []
184+
m_Father: {fileID: 8726126793436277715}
185+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
186+
m_AnchorMin: {x: 0, y: 0}
187+
m_AnchorMax: {x: 1, y: 1}
188+
m_AnchoredPosition: {x: 0, y: 0}
189+
m_SizeDelta: {x: 0, y: 0}
190+
m_Pivot: {x: 0.5, y: 0.5}
191+
--- !u!222 &4345718852513938544
192+
CanvasRenderer:
193+
m_ObjectHideFlags: 0
194+
m_CorrespondingSourceObject: {fileID: 0}
195+
m_PrefabInstance: {fileID: 0}
196+
m_PrefabAsset: {fileID: 0}
197+
m_GameObject: {fileID: 2690198130600451634}
198+
m_CullTransparentMesh: 1
199+
--- !u!114 &8308099237010162340
200+
MonoBehaviour:
201+
m_ObjectHideFlags: 0
202+
m_CorrespondingSourceObject: {fileID: 0}
203+
m_PrefabInstance: {fileID: 0}
204+
m_PrefabAsset: {fileID: 0}
205+
m_GameObject: {fileID: 2690198130600451634}
206+
m_Enabled: 1
207+
m_EditorHideFlags: 0
208+
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
209+
m_Name:
210+
m_EditorClassIdentifier:
211+
m_Material: {fileID: 0}
212+
m_Color: {r: 0, g: 0, b: 0, a: 1}
213+
m_RaycastTarget: 1
214+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
215+
m_Maskable: 1
216+
m_OnCullStateChanged:
217+
m_PersistentCalls:
218+
m_Calls: []
219+
m_FontData:
220+
m_Font: {fileID: 12800000, guid: 26a32e627fb084948ad18b8af0f356b7, type: 3}
221+
m_FontSize: 30
222+
m_FontStyle: 0
223+
m_BestFit: 0
224+
m_MinSize: 10
225+
m_MaxSize: 40
226+
m_Alignment: 4
227+
m_AlignByGeometry: 0
228+
m_RichText: 1
229+
m_HorizontalOverflow: 0
230+
m_VerticalOverflow: 0
231+
m_LineSpacing: 1
232+
m_Text: Auto Generate Level
3233
--- !u!1 &3372401169226733470
4234
GameObject:
5235
m_ObjectHideFlags: 0
@@ -94,7 +324,7 @@ GameObject:
94324
- component: {fileID: 3819770464396465815}
95325
- component: {fileID: 4103971396847131212}
96326
m_Layer: 5
97-
m_Name: Button
327+
m_Name: Button_Generate_Level
98328
m_TagString: Untagged
99329
m_Icon: {fileID: 0}
100330
m_NavMeshLayer: 0
@@ -262,6 +492,7 @@ RectTransform:
262492
m_ConstrainProportionsScale: 0
263493
m_Children:
264494
- {fileID: 5043256983508467260}
495+
- {fileID: 8726126793436277715}
265496
m_Father: {fileID: 0}
266497
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
267498
m_AnchorMin: {x: 0, y: 0}

0 commit comments

Comments
 (0)