using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Entities;
using Unity.Transforms;
using Unity.Mathematics;
using Unity.Collections;
using Unity.Rendering;
using Unity.Burst;
using Unity.Jobs;
public struct QuadrantData {
public Entity entity;
public Soldier soldier;
}
public class QuadrantSystem : SystemBase {
EntityQuery entityQuery;
public static NativeMultiHashMap<int, QuadrantData> quadrantMultiHashMap;
public const int quadrantYMultiplier = 1000;
private const int quadrantCellSize = 3;
public static int GetPositionHashMapKey(int2 position) {
return ((position.x / quadrantCellSize) + (quadrantYMultiplier * (position.y / quadrantCellSize)));
}
private static void DebugDrawQuadrant(float3 position) {
Vector3 lowerLeft = new Vector3(math.floor(position.x / quadrantCellSize) * quadrantCellSize,0, math.floor(position.z / quadrantCellSize) * quadrantCellSize);
Debug.DrawLine(lowerLeft, lowerLeft + new Vector3(+1,0, +0) * quadrantCellSize);
Debug.DrawLine(lowerLeft, lowerLeft + new Vector3(+0,0, +1) * quadrantCellSize);
Debug.DrawLine(lowerLeft + new Vector3(+1,0, +0) * quadrantCellSize, lowerLeft + new Vector3(+1,0, +1) * quadrantCellSize);
Debug.DrawLine(lowerLeft + new Vector3(+0,0, +1) * quadrantCellSize, lowerLeft + new Vector3(+1,0, +1) * quadrantCellSize);
//Debug.Log(GetPositionHashMapKey(position) + " " + position);
}
private static int GetEntityCountInHashMap(NativeMultiHashMap<int, QuadrantData> quadrantMultiHashMap, int hashMapKey) {
QuadrantData quadrantData;
NativeMultiHashMapIterator<int> nativeMultiHashMapIterator;
int count = 0;
if (quadrantMultiHashMap.TryGetFirstValue(hashMapKey, out quadrantData, out nativeMultiHashMapIterator)) {
do {
count++;
} while (quadrantMultiHashMap.TryGetNextValue(out quadrantData, ref nativeMultiHashMapIterator));
}
return count;
}
protected override void OnCreate()
{
quadrantMultiHashMap = new NativeMultiHashMap<int, QuadrantData>(0, Allocator.Persistent);
base.OnCreate();
}
protected override void OnDestroy() {
quadrantMultiHashMap.Dispose();
base.OnDestroy();
}
protected override void OnUpdate() {
entityQuery = GetEntityQuery(typeof(Translation), typeof(Soldier));
quadrantMultiHashMap.Clear();
if (entityQuery.CalculateEntityCount() > quadrantMultiHashMap.Capacity) {
quadrantMultiHashMap.Capacity = entityQuery.CalculateEntityCount();
}
Entities.ForEach((Entity entity,in Soldier soldier) =>
{
int hashMapKey = GetPositionHashMapKey(soldier.Index);
quadrantMultiHashMap.Add(hashMapKey, new QuadrantData
{
entity = entity,
soldier = soldier,
});
}).WithStoreEntityQueryInField(ref entityQuery)
.ScheduleParallel();
this.CompleteDependency();
}
}
I recieve this error?
C:\Dev\ECS Massive Battle\Assets\Scripts\QuadrantSystem.cs(74,13): Burst error BC1042: The managed class type Unity.Collections.NativeMultiHashMap2*is not supported. Loading from a non-readonly static fieldQuadrantSystem.quadrantMultiHashMap` is not supported