private void SetNPCCharacter(Entity entity, int id, int metaID, float3 position) // Entity world, { if (meta.ContainsKey(metaID)) { CharacterDatam characterDatam = meta[metaID]; BehaviourData beh = characterDatam.behaviour.Value; SetNPC(entity, beh, id, characterDatam.movementSpeed, characterDatam.turnSpeed); } }
private void SetNPC(Entity entity, BehaviourData beh, int id, float movementSpeed, float turnSpeed) { //Debug.LogError("Spawning NPC: " + id); if (World.EntityManager.HasComponent <AIState>(entity) == false) { Debug.LogError("NPC does not have AI State."); return; } World.EntityManager.SetComponentData(entity, new AIState { state = AIStates.Idle, idleTime = beh.idleTime, isAggressive = beh.isAggressive }); World.EntityManager.SetComponentData(entity, new Mover { moveSpeed = movementSpeed, turnSpeed = turnSpeed }); if (beh.wander.waitCooldownMin == 0 && beh.wander.wanderCooldownMax == 0) { // Debug.LogError("Removed wander."); World.EntityManager.RemoveComponent <Wander>(entity); } else { Unity.Mathematics.Random rand = new Unity.Mathematics.Random(); rand.InitState((uint)id); World.EntityManager.SetComponentData(entity, new Wander { uniqueness = id, Value = beh.wander, random = rand, //targetRotation = quaternion.identity,//quaternion.EulerXYZ(new float3(0, rand.NextFloat(0, 360), 0)), lastWandered = UnityEngine.Time.time + rand.NextFloat(4), wanderCooldown = rand.NextFloat(beh.wander.wanderCooldownMin, beh.wander.wanderCooldownMax), waitCooldown = rand.NextFloat(beh.wander.waitCooldownMin, beh.wander.waitCooldownMax) }); } }