Skip to content

Commit 73c73a9

Browse files
committed
feat(core): add tutorial 26 code
1 parent 331a1f2 commit 73c73a9

8 files changed

Lines changed: 379 additions & 17 deletions

File tree

Assets/Scenes/SampleScene.unity

Lines changed: 189 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2304,6 +2304,7 @@ Transform:
23042304
- {fileID: 1293093816}
23052305
- {fileID: 1488952917}
23062306
- {fileID: 1672000475}
2307+
- {fileID: 531939947}
23072308
m_Father: {fileID: 0}
23082309
m_RootOrder: 3
23092310
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2894,6 +2895,12 @@ MonoBehaviour:
28942895
m_StringArgument:
28952896
m_BoolArgument: 0
28962897
m_CallState: 2
2898+
--- !u!4 &531939947 stripped
2899+
Transform:
2900+
m_CorrespondingSourceObject: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
2901+
type: 3}
2902+
m_PrefabInstance: {fileID: 2013914124}
2903+
m_PrefabAsset: {fileID: 0}
28972904
--- !u!1 &545667759
28982905
GameObject:
28992906
m_ObjectHideFlags: 0
@@ -3042,6 +3049,62 @@ CanvasRenderer:
30423049
m_PrefabAsset: {fileID: 0}
30433050
m_GameObject: {fileID: 557548946}
30443051
m_CullTransparentMesh: 0
3052+
--- !u!1 &560630152
3053+
GameObject:
3054+
m_ObjectHideFlags: 0
3055+
m_CorrespondingSourceObject: {fileID: 0}
3056+
m_PrefabInstance: {fileID: 0}
3057+
m_PrefabAsset: {fileID: 0}
3058+
serializedVersion: 6
3059+
m_Component:
3060+
- component: {fileID: 560630154}
3061+
- component: {fileID: 560630155}
3062+
- component: {fileID: 560630153}
3063+
m_Layer: 0
3064+
m_Name: DEBUG
3065+
m_TagString: Untagged
3066+
m_Icon: {fileID: 0}
3067+
m_NavMeshLayer: 0
3068+
m_StaticEditorFlags: 0
3069+
m_IsActive: 1
3070+
--- !u!114 &560630153
3071+
MonoBehaviour:
3072+
m_ObjectHideFlags: 0
3073+
m_CorrespondingSourceObject: {fileID: 0}
3074+
m_PrefabInstance: {fileID: 0}
3075+
m_PrefabAsset: {fileID: 0}
3076+
m_GameObject: {fileID: 560630152}
3077+
m_Enabled: 1
3078+
m_EditorHideFlags: 0
3079+
m_Script: {fileID: 11500000, guid: 4e2525d4f746d47e3bc2ac7f884d059d, type: 3}
3080+
m_Name:
3081+
m_EditorClassIdentifier:
3082+
--- !u!4 &560630154
3083+
Transform:
3084+
m_ObjectHideFlags: 0
3085+
m_CorrespondingSourceObject: {fileID: 0}
3086+
m_PrefabInstance: {fileID: 0}
3087+
m_PrefabAsset: {fileID: 0}
3088+
m_GameObject: {fileID: 560630152}
3089+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
3090+
m_LocalPosition: {x: 0, y: 0, z: 0}
3091+
m_LocalScale: {x: 1, y: 1, z: 1}
3092+
m_Children: []
3093+
m_Father: {fileID: 0}
3094+
m_RootOrder: 7
3095+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
3096+
--- !u!114 &560630155
3097+
MonoBehaviour:
3098+
m_ObjectHideFlags: 0
3099+
m_CorrespondingSourceObject: {fileID: 0}
3100+
m_PrefabInstance: {fileID: 0}
3101+
m_PrefabAsset: {fileID: 0}
3102+
m_GameObject: {fileID: 560630152}
3103+
m_Enabled: 1
3104+
m_EditorHideFlags: 0
3105+
m_Script: {fileID: 11500000, guid: 434f5c00dcb2846a2812af5ce87f0f28, type: 3}
3106+
m_Name:
3107+
m_EditorClassIdentifier:
30453108
--- !u!1 &581793296
30463109
GameObject:
30473110
m_ObjectHideFlags: 0
@@ -8499,6 +8562,7 @@ GameObject:
84998562
- component: {fileID: 1626893585}
85008563
- component: {fileID: 1626893584}
85018564
- component: {fileID: 1626893583}
8565+
- component: {fileID: 1626893586}
85028566
m_Layer: 5
85038567
m_Name: Upgrade
85048568
m_TagString: Untagged
@@ -8568,7 +8632,18 @@ MonoBehaviour:
85688632
m_TargetGraphic: {fileID: 1626893584}
85698633
m_OnClick:
85708634
m_PersistentCalls:
8571-
m_Calls: []
8635+
m_Calls:
8636+
- m_Target: {fileID: 1464451462}
8637+
m_MethodName: ClickLevelUpButton
8638+
m_Mode: 1
8639+
m_Arguments:
8640+
m_ObjectArgument: {fileID: 0}
8641+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
8642+
m_IntArgument: 0
8643+
m_FloatArgument: 0
8644+
m_StringArgument:
8645+
m_BoolArgument: 0
8646+
m_CallState: 2
85728647
--- !u!114 &1626893584
85738648
MonoBehaviour:
85748649
m_ObjectHideFlags: 0
@@ -8606,6 +8681,49 @@ CanvasRenderer:
86068681
m_PrefabAsset: {fileID: 0}
86078682
m_GameObject: {fileID: 1626893581}
86088683
m_CullTransparentMesh: 0
8684+
--- !u!114 &1626893586
8685+
MonoBehaviour:
8686+
m_ObjectHideFlags: 0
8687+
m_CorrespondingSourceObject: {fileID: 0}
8688+
m_PrefabInstance: {fileID: 0}
8689+
m_PrefabAsset: {fileID: 0}
8690+
m_GameObject: {fileID: 1626893581}
8691+
m_Enabled: 1
8692+
m_EditorHideFlags: 0
8693+
m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
8694+
m_Name:
8695+
m_EditorClassIdentifier:
8696+
m_Delegates:
8697+
- eventID: 0
8698+
callback:
8699+
m_PersistentCalls:
8700+
m_Calls:
8701+
- m_Target: {fileID: 1464451462}
8702+
m_MethodName: HoverLevelUpButton
8703+
m_Mode: 1
8704+
m_Arguments:
8705+
m_ObjectArgument: {fileID: 0}
8706+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
8707+
m_IntArgument: 0
8708+
m_FloatArgument: 0
8709+
m_StringArgument:
8710+
m_BoolArgument: 0
8711+
m_CallState: 2
8712+
- eventID: 1
8713+
callback:
8714+
m_PersistentCalls:
8715+
m_Calls:
8716+
- m_Target: {fileID: 1464451462}
8717+
m_MethodName: UnhoverLevelUpButton
8718+
m_Mode: 1
8719+
m_Arguments:
8720+
m_ObjectArgument: {fileID: 0}
8721+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
8722+
m_IntArgument: 0
8723+
m_FloatArgument: 0
8724+
m_StringArgument:
8725+
m_BoolArgument: 0
8726+
m_CallState: 2
86098727
--- !u!1 &1656966157
86108728
GameObject:
86118729
m_ObjectHideFlags: 0
@@ -11444,6 +11562,75 @@ MonoBehaviour:
1144411562
m_VoxelSize: 0.16666667
1144511563
m_BuildHeightMesh: 0
1144611564
m_NavMeshData: {fileID: 23800000, guid: 1cf056d45cd4b4cbc8079179b8278f52, type: 2}
11565+
--- !u!1001 &2013914124
11566+
PrefabInstance:
11567+
m_ObjectHideFlags: 0
11568+
serializedVersion: 2
11569+
m_Modification:
11570+
m_TransformParent: {fileID: 435078462}
11571+
m_Modifications:
11572+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11573+
type: 3}
11574+
propertyPath: m_LocalPosition.x
11575+
value: 0
11576+
objectReference: {fileID: 0}
11577+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11578+
type: 3}
11579+
propertyPath: m_LocalPosition.y
11580+
value: 1.677
11581+
objectReference: {fileID: 0}
11582+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11583+
type: 3}
11584+
propertyPath: m_LocalPosition.z
11585+
value: -2.725
11586+
objectReference: {fileID: 0}
11587+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11588+
type: 3}
11589+
propertyPath: m_LocalRotation.x
11590+
value: -0
11591+
objectReference: {fileID: 0}
11592+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11593+
type: 3}
11594+
propertyPath: m_LocalRotation.y
11595+
value: -0
11596+
objectReference: {fileID: 0}
11597+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11598+
type: 3}
11599+
propertyPath: m_LocalRotation.z
11600+
value: -0
11601+
objectReference: {fileID: 0}
11602+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11603+
type: 3}
11604+
propertyPath: m_LocalRotation.w
11605+
value: 1
11606+
objectReference: {fileID: 0}
11607+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11608+
type: 3}
11609+
propertyPath: m_RootOrder
11610+
value: 33
11611+
objectReference: {fileID: 0}
11612+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11613+
type: 3}
11614+
propertyPath: m_LocalEulerAnglesHint.x
11615+
value: 0
11616+
objectReference: {fileID: 0}
11617+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11618+
type: 3}
11619+
propertyPath: m_LocalEulerAnglesHint.y
11620+
value: 0
11621+
objectReference: {fileID: 0}
11622+
- target: {fileID: 3974308329725597486, guid: 65495319fe85a47d0bb50779e1515148,
11623+
type: 3}
11624+
propertyPath: m_LocalEulerAnglesHint.z
11625+
value: 0
11626+
objectReference: {fileID: 0}
11627+
- target: {fileID: 7425975466048765977, guid: 65495319fe85a47d0bb50779e1515148,
11628+
type: 3}
11629+
propertyPath: m_Name
11630+
value: LevelUpVFX
11631+
objectReference: {fileID: 0}
11632+
m_RemovedComponents: []
11633+
m_SourcePrefab: {fileID: 100100000, guid: 65495319fe85a47d0bb50779e1515148, type: 3}
1144711634
--- !u!1001 &2016020217
1144811635
PrefabInstance:
1144911636
m_ObjectHideFlags: 0
@@ -11692,7 +11879,7 @@ GameObject:
1169211879
m_Icon: {fileID: 0}
1169311880
m_NavMeshLayer: 0
1169411881
m_StaticEditorFlags: 0
11695-
m_IsActive: 1
11882+
m_IsActive: 0
1169611883
--- !u!4 &2088108721
1169711884
Transform:
1169811885
m_ObjectHideFlags: 0

Assets/Scripts/ScriptableObjects/Parameters/GameGlobalParameters.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using UnityEngine;
1+
using UnityEngine;
22

33
[CreateAssetMenu(fileName = "Global Parameters", menuName = "Scriptable Objects/Game Global Parameters", order = 10)]
44
public class GameGlobalParameters : GameParameters
@@ -34,4 +34,9 @@ public class GameGlobalParameters : GameParameters
3434

3535
[Header("FOV")]
3636
public bool enableFOV;
37+
38+
public int UnitMaxLevel()
39+
{
40+
return 4;
41+
}
3742
}

Assets/Scripts/ScriptableObjects/Units/UnitData.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ public class UnitData : ScriptableObject
2626

2727
public bool CanBuy()
2828
{
29-
foreach (ResourceValue resource in cost)
30-
if (Globals.GAME_RESOURCES[resource.code].Amount < resource.amount)
31-
return false;
32-
return true;
29+
return Globals.CanBuy(cost);
3330
}
3431
}

Assets/Scripts/Tools/Globals.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEngine.AI;
34

45
public enum InGameResource
@@ -23,6 +24,13 @@ public static class Globals
2324
{ InGameResource.Stone, new GameResource("Stone", 1000) }
2425
};
2526

27+
public static Dictionary<InGameResource, int> XP_CONVERSION_TO_RESOURCE = new Dictionary<InGameResource, int>()
28+
{
29+
{ InGameResource.Gold, 100 },
30+
{ InGameResource.Wood, 80 },
31+
{ InGameResource.Stone, 40 }
32+
};
33+
2634
public static BuildingData[] BUILDING_DATA;
2735
public static Dictionary<string, SkillData> SKILL_DATA = new Dictionary<string, SkillData>();
2836
public static List<UnitManager> SELECTED_UNITS = new List<UnitManager>();
@@ -33,4 +41,46 @@ public static void UpdateNavMeshSurface()
3341
{
3442
NAV_MESH_SURFACE.UpdateNavMesh(NAV_MESH_SURFACE.navMeshData);
3543
}
44+
45+
public static bool CanBuy(List<ResourceValue> cost)
46+
{
47+
foreach (ResourceValue resource in cost)
48+
if (GAME_RESOURCES[resource.code].Amount < resource.amount)
49+
return false;
50+
return true;
51+
}
52+
53+
public static List<ResourceValue> ConvertXPCostToGameResources(int xpCost, IEnumerable<InGameResource> allowedResources)
54+
{
55+
// distribute the xp cost between all possible resources, always
56+
// starting with 1 unit of every allowed resource type and then
57+
// picking the rest from allowed resource types
58+
59+
// sort resources by xp cost
60+
List<InGameResource> sortedResources = allowedResources
61+
.OrderBy(r => XP_CONVERSION_TO_RESOURCE[r])
62+
.ToList();
63+
int n = sortedResources.Count();
64+
65+
66+
Dictionary<InGameResource, int> xpCostToResources = new Dictionary<InGameResource, int>();
67+
foreach (InGameResource r in sortedResources)
68+
{
69+
if (xpCost == 0) break;
70+
xpCostToResources[r] = 1;
71+
xpCost--;
72+
}
73+
74+
int i = 0;
75+
while (xpCost > 0)
76+
{
77+
xpCostToResources[sortedResources[i]]++;
78+
xpCost--;
79+
i = (i + 1) % n;
80+
}
81+
82+
return xpCostToResources
83+
.Select(pair => new ResourceValue(pair.Key, pair.Value * XP_CONVERSION_TO_RESOURCE[pair.Key]))
84+
.ToList();
85+
}
3686
}

0 commit comments

Comments
 (0)