コード例 #1
0
        public void Execute([ReadOnly] ref Translation translation, [ReadOnly] ref MeleeFindTargetSettingsComponentData findingSettings, ref MeleeTargetComponentData meleeData)
        {
            var faction = new FactionComponentData()
            {
                value = FactionComponentData.Faction.NEUTRAL
            };

            FindTarget(ref translation, ref findingSettings, ref meleeData, ref faction, quadrantMap);
        }
コード例 #2
0
    private static MeleeTargetComponentData FindClosest(MeleeFindTargetSettingsComponentData findingSettings, FactionComponentData faction, NativeMultiHashMap <int, QuadrantSystem.QuadrandEntityData> quadrantMap, float3 pos, int key, MeleeTargetComponentData closest)
    {
        NativeMultiHashMapIterator <int> iterator;

        QuadrantSystem.QuadrandEntityData qdata;

        if (quadrantMap.TryGetFirstValue(key, out qdata, out iterator))
        {
            do
            {
                if (qdata.faction != faction.value &&
                    qdata.corps == QuadrantSystem.QuadrandEntityData.Corps.SWORDSMAN &&
                    qdata.position.EqualsEpsilon(pos, findingSettings.findingRadius) &&
                    (closest.target == Entity.Null || pos.CompareToAnother(qdata.position, closest.targetPosition) < 0)
                    )
                {
                    closest.targetPosition = qdata.position;
                    closest.target         = qdata.entity;
                }
            }while (quadrantMap.TryGetNextValue(out qdata, ref iterator));
        }
        return(closest);
    }
コード例 #3
0
    private static void FindTarget(ref Translation translation, ref MeleeFindTargetSettingsComponentData findingSettings, ref MeleeTargetComponentData meleeData, ref FactionComponentData faction, NativeMultiHashMap <int, QuadrantSystem.QuadrandEntityData> quadrantMap)
    {
        var pos      = translation.Value;
        var quadrant = QuadrantSystem.GetQuadrant(pos);

        var closest = new MeleeTargetComponentData()
        {
            target = Entity.Null, targetPosition = translation.Value
        };

        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.CURRENT), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.DOWN), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.LEFT), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.LEFT_DOWN), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.LEFT_UP), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.RIGHT), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.RIGHT_DOWN), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.RIGHT_UP), closest);
        closest = FindClosest(findingSettings, faction, quadrantMap, pos, QuadrantSystem.GetNearestQuadrantKey(quadrant, QuadrantSystem.NearestQuadrant.UP), closest);

        meleeData.target         = closest.target;
        meleeData.targetPosition = closest.targetPosition;
    }