Skip to content

Commit 4fb8a40

Browse files
committed
feat(core): add tutorial 45 code
1 parent f13511c commit 4fb8a40

9 files changed

Lines changed: 57 additions & 34 deletions

File tree

Assets/Scripts/Units/BehaviorTree/Nodes/Check/CheckEnemyInFOVRange.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public override NodeState Evaluate()
3939
.First()
4040
.transform
4141
);
42+
Parent.SetData("currentTargetOffset", Vector2.zero);
4243
_state = NodeState.SUCCESS;
4344
return _state;
4445
}

Assets/Scripts/Units/BehaviorTree/Nodes/Check/CheckUnitInRange.cs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
public class CheckUnitInRange : Node
66
{
77
UnitManager _manager;
8+
bool _checkAttack;
89
float _range;
910

1011
Transform _lastTarget;
@@ -13,6 +14,7 @@ public class CheckUnitInRange : Node
1314
public CheckUnitInRange(UnitManager manager, bool checkAttack) : base()
1415
{
1516
_manager = manager;
17+
_checkAttack = checkAttack;
1618
_range = checkAttack
1719
? _manager.Unit.AttackRange
1820
: ((CharacterData)_manager.Unit.Data).buildRange;
@@ -31,10 +33,7 @@ public override NodeState Evaluate()
3133
Transform target = (Transform)currentTarget;
3234
if (target != _lastTarget)
3335
{
34-
Vector3 s = target
35-
.Find("Mesh")
36-
.GetComponent<MeshFilter>()
37-
.sharedMesh.bounds.size / 2;
36+
Vector3 s = target.GetComponent<UnitManager>().MeshSize;
3837
_targetSize = Mathf.Max(s.x, s.z);
3938
_lastTarget = target;
4039
}
@@ -45,6 +44,8 @@ public override NodeState Evaluate()
4544
{
4645
Parent.ClearData("currentTarget");
4746
Parent.ClearData("currentTargetOffset");
47+
_manager.SetAnimatorBoolVariable("Running", false);
48+
_manager.SetAnimatorBoolVariable("Attacking", false);
4849
_state = NodeState.FAILURE;
4950
return _state;
5051
}
@@ -57,22 +58,27 @@ public override NodeState Evaluate()
5758
{
5859
Unit u = ((Transform)currentTarget).GetComponent<UnitManager>().Unit;
5960
int targetOwner = u.Owner;
60-
if (
61-
targetOwner == GameManager.instance.gamePlayersParameters.myPlayerId &&
62-
u is Building b
63-
)
61+
62+
if (targetOwner == GameManager.instance.gamePlayersParameters.myPlayerId)
6463
{
65-
CharacterManager cm = (CharacterManager)_manager;
66-
if (!cm.IsConstructor)
64+
if (u is Building b && !b.IsAlive)
6765
{
68-
b.AddConstructor(cm);
69-
cm.SetIsConstructor(true);
70-
cm.SetRendererVisibility(false);
71-
cm.agent.Warp(
72-
target.position +
73-
Quaternion.Euler(0f, Random.Range(0f, 360f), 0f) * Vector3.right * _targetSize * 0.8f);
66+
CharacterManager cm = (CharacterManager)_manager;
67+
if (!cm.IsConstructor)
68+
{
69+
b.AddConstructor(cm);
70+
cm.SetIsConstructor(true);
71+
cm.SetRendererVisibility(false);
72+
cm.agent.Warp(
73+
target.position +
74+
Quaternion.Euler(0f, Random.Range(0f, 360f), 0f) * Vector3.right * _targetSize * 0.8f);
75+
}
7476
}
7577
}
78+
else if (_checkAttack)
79+
{
80+
_manager.SetAnimatorBoolVariable("Attacking", true);
81+
}
7682
}
7783

7884
return _state;

Assets/Scripts/Units/BehaviorTree/Nodes/Task/TaskAttack.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public TaskAttack(UnitManager manager) : base()
1414
public override NodeState Evaluate()
1515
{
1616
object currentTarget = GetData("currentTarget");
17+
_manager.SetAnimatorTriggerVariable("Hit");
1718
_manager.Attack((Transform) currentTarget);
1819
_state = NodeState.SUCCESS;
1920
return _state;

Assets/Scripts/Units/BehaviorTree/Nodes/Task/TaskFollow.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ public override NodeState Evaluate()
2626

2727
if (target != _lastTarget)
2828
{
29-
Vector3 s = target
30-
.Find("Mesh")
31-
.GetComponent<MeshFilter>()
32-
.sharedMesh.bounds.size / 2;
29+
Vector3 s = target.GetComponent<UnitManager>().MeshSize;
3330
_targetSize = Mathf.Max(s.x, s.z);
3431

3532
int targetOwner = target.GetComponent<UnitManager>().Unit.Owner;

Assets/Scripts/Units/BehaviorTree/Nodes/Task/TaskMoveToDestination.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public override NodeState Evaluate()
2929
if (d <= _manager.agent.stoppingDistance)
3030
{
3131
ClearData("destinationPoint");
32+
_manager.SetAnimatorBoolVariable("Running", false);
3233
_state = NodeState.SUCCESS;
3334
return _state;
3435
}

Assets/Scripts/Units/BehaviorTree/Nodes/Task/TaskTrySetDestinationOrTarget.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public void SetFormationTargetOffset(List<Vector2> targetOffsets, Transform targ
132132
Parent.Parent.SetData("currentTargetOffset", targetOffsets[i]);
133133
if (targetTransform != null)
134134
Parent.Parent.SetData("currentTarget", targetTransform);
135+
_manager.SetAnimatorBoolVariable("Running", true);
135136
}
136137

137138
public void SetFormationTargetPosition(List<Vector3> targetPositions)
@@ -141,5 +142,6 @@ public void SetFormationTargetPosition(List<Vector3> targetPositions)
141142
ClearData("currentTarget");
142143
ClearData("currentTargetOffset");
143144
Parent.Parent.SetData("destinationPoint", targetPositions[i]);
145+
_manager.SetAnimatorBoolVariable("Running", true);
144146
}
145147
}

Assets/Scripts/Units/Buildings/Building.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,13 @@ public Building(BuildingData data, int owner, List<ResourceValue> production) :
3939
_smokeVfx = new List<Transform>();
4040
_isAlive = false;
4141

42-
Transform mesh = _transform.Find("Mesh");
43-
4442
_materials = new List<Material>();
45-
foreach (Material material in mesh.GetComponent<Renderer>().materials)
43+
foreach (Material material in _buildingManager.meshRenderer.materials)
4644
_materials.Add(new Material(material));
4745
SetMaterials();
4846
_placement = BuildingPlacement.VALID;
4947

50-
_rendererMesh = mesh.GetComponent<MeshFilter>();
48+
_rendererMesh = _buildingManager.meshRenderer.GetComponent<MeshFilter>();
5149
_constructionMeshes = data.constructionMeshes;
5250

5351
if (_buildingManager.ambientSource != null)
@@ -89,7 +87,7 @@ public void SetMaterials(BuildingPlacement placement)
8987
materials = _materials;
9088
else
9189
return;
92-
_transform.Find("Mesh").GetComponent<Renderer>().materials = materials.ToArray();
90+
_buildingManager.meshRenderer.materials = materials.ToArray();
9391
}
9492

9593
public override void Place()

Assets/Scripts/Units/Characters/CharacterManager.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public override Unit Unit
1414
set { _character = value is Character ? (Character)value : null; }
1515
}
1616

17-
public Renderer characterRenderer;
1817
public BoxCollider characterCollider;
1918

2019
private bool _isConstructor = false;
@@ -44,14 +43,14 @@ public bool MoveTo(Vector3 targetPosition, bool playSound = true)
4443

4544
public void SetRendererVisibility(bool on)
4645
{
47-
if (on && !characterRenderer.enabled)
46+
if (on && !meshRenderer.enabled)
4847
{
49-
characterRenderer.enabled = true;
48+
meshRenderer.enabled = true;
5049
characterCollider.enabled = true;
5150
}
52-
else if (!on && characterRenderer.enabled)
51+
else if (!on && meshRenderer.enabled)
5352
{
54-
characterRenderer.enabled = false;
53+
meshRenderer.enabled = false;
5554
characterCollider.enabled = false;
5655
}
5756
}

Assets/Scripts/Units/UnitManager.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ public class UnitManager : MonoBehaviour
77
{
88
public GameObject selectionCircle;
99
public GameObject fov;
10+
public Renderer meshRenderer;
1011
public AudioSource contextualSource;
12+
public Animator animator;
1113

1214
public int ownerMaterialSlotIndex = 0;
1315

@@ -26,9 +28,13 @@ public class UnitManager : MonoBehaviour
2628
private Material _levelUpVFXMaterial;
2729
private Coroutine _levelUpVFXCoroutine = null;
2830

31+
private Vector3 _meshSize;
32+
public Vector3 MeshSize => _meshSize;
33+
2934
private void Awake()
3035
{
3136
_canvas = GameObject.Find("Canvas").transform;
37+
_meshSize = meshRenderer.GetComponent<Renderer>().bounds.size / 2;
3238
}
3339

3440
private void OnMouseEnter()
@@ -68,9 +74,9 @@ public void EnableFOV(float size)
6874
public void SetOwnerMaterial(int owner)
6975
{
7076
Color playerColor = GameManager.instance.gamePlayersParameters.players[owner].color;
71-
Material[] materials = transform.Find("Mesh").GetComponent<Renderer>().materials;
77+
Material[] materials = meshRenderer.materials;
7278
materials[ownerMaterialSlotIndex].color = playerColor;
73-
transform.Find("Mesh").GetComponent<Renderer>().materials = materials;
79+
meshRenderer.materials = materials;
7480
}
7581

7682
public void Attack(Transform target)
@@ -170,7 +176,7 @@ private void _SelectUtil()
170176
UpdateHealthbar();
171177
Healthbar h = healthbar.GetComponent<Healthbar>();
172178
Rect boundingBox = Utils.GetBoundingBoxOnScreen(
173-
transform.Find("Mesh").GetComponent<Renderer>().bounds,
179+
meshRenderer.bounds,
174180
Camera.main
175181
);
176182
h.Initialize(transform, IsMovable(), boundingBox.height * 0.5f);
@@ -215,7 +221,7 @@ public void LevelUp()
215221

216222
// create visual effect (+ discard it after a few seconds)
217223
GameObject vfx = Instantiate(Resources.Load("Prefabs/Units/LevelUpVFX")) as GameObject;
218-
Vector3 meshScale = transform.Find("Mesh").localScale;
224+
Vector3 meshScale = meshRenderer.transform.localScale;
219225
float s = Mathf.Max(meshScale.x, meshScale.z);
220226
Transform t = vfx.transform;
221227
t.localScale = new Vector3(s, meshScale.y, s);
@@ -236,4 +242,16 @@ private IEnumerator _UpdatingLevelUpVFX()
236242
}
237243
Destroy(_levelUpVFX);
238244
}
245+
246+
public void SetAnimatorBoolVariable(string name, bool boolValue)
247+
{
248+
if (animator == null) return;
249+
animator.SetBool(name, boolValue);
250+
}
251+
252+
public void SetAnimatorTriggerVariable(string name)
253+
{
254+
if (animator == null) return;
255+
animator.SetTrigger(name);
256+
}
239257
}

0 commit comments

Comments
 (0)