protected override JobHandle OnUpdate(JobHandle inputDeps) { UnitMovementJob moveJob = new UnitMovementJob { deltaTime = Time.deltaTime }; JobHandle MoveHandle = moveJob.Schedule(this, inputDeps); return(MoveHandle); }
private void FixedUpdate() { int unitCount = 0; positionsArray.Clear(); directionArray.Clear(); float3 direction = float3.zero; Vector2 unitSize = Vector2.zero, offset = Vector2.zero; for (int i = 0; i < GameData.Instance.kingdoms.Count; ++i) { Kingdom kingdom = GameData.Instance.kingdoms [i]; for (int a = 0; a < kingdom.units.Count; ++a) { Unit unit = kingdom.units [a]; if (unit.health <= 0) { continue; } unitSize = unit.unitMB.size; offset = unit.unitMB.offset; direction.x = unit.unitMB.movingTo.x; direction.y = unit.unitMB.movingTo.y; direction.z = unit.unitMB.moving ? unit.unitMB.speed : 0; positionsArray.Add(unit.position); directionArray.Add(direction); unitCount++; } for (int a = 0; a < kingdom.peasants.Count; ++a) { Unit unit = kingdom.peasants [a]; if (unit.health <= 0) { continue; } unitSize = unit.unitMB.size; offset = unit.unitMB.offset; direction.x = unit.unitMB.movingTo.x; direction.y = unit.unitMB.movingTo.y; direction.z = unit.unitMB.moving ? unit.unitMB.speed : 0; positionsArray.Add(unit.position); directionArray.Add(direction); unitCount++; } } if (newPositionsArray.Length < unitCount) { newPositionsArray.Dispose(); newPositionsArray = new NativeArray <float2> (unitCount * 2, Allocator.Persistent); } UnitMovementJob unitMovementJob = new UnitMovementJob { units = positionsArray, positions = newPositionsArray, directions = directionArray, unitSize = unitSize, offset = offset, gameSpeed = GameData.Instance.gameSpeed, random = new Unity.Mathematics.Random((uint)UnityEngine.Random.Range(0, 10000000)) }; JobHandle jobHandle = unitMovementJob.Schedule(unitCount, 100); jobHandle.Complete(); unitCount = 0; Vector3 position = Vector3.zero; for (int i = 0; i < GameData.Instance.kingdoms.Count; ++i) { Kingdom kingdom = GameData.Instance.kingdoms [i]; for (int a = 0; a < kingdom.units.Count; ++a) { Unit unit = kingdom.units [a]; if (unit.health <= 0) { continue; } unit.position += unit.unitMB.CheckPosition(newPositionsArray [unitCount]); position.x = unit.position.x + unit.unitMB.jumpVector.x + unit.unitMB.attackVector.x; position.y = unit.position.y + unit.unitMB.jumpVector.y + unit.unitMB.attackVector.y; unit.unitMB.body.position = position; unitCount++; } for (int a = 0; a < kingdom.peasants.Count; ++a) { Unit unit = kingdom.peasants [a]; if (unit.health <= 0) { continue; } unit.position += unit.unitMB.CheckPosition(newPositionsArray [unitCount]); position.x = unit.position.x + unit.unitMB.jumpVector.x + unit.unitMB.attackVector.x; position.y = unit.position.y + unit.unitMB.jumpVector.y + unit.unitMB.attackVector.y; unit.unitMB.body.position = position; unitCount++; } } }
protected override JobHandle OnUpdate(JobHandle inputDeps) { var job = new UnitMovementJob(); return(job.Schedule(this, inputDeps)); }