示例#1
0
        // TODO: Need to actually do Loading for cache "miss"
        public MCgData LoadData(FECgAssetType assetType, string shortCode)
        {
            if (Map[assetType].ContainsKey(shortCode))
            {
                return(Map[assetType][shortCode]);
            }

            FCgDebug.LogWarning("MCgDataMapping.LoadData: No " + assetType.Name + " with ShortCode: " + shortCode);
            return(null);
        }
示例#2
0
        private bool ProcessRequest(FCgTraceRequest request)
        {
            /*
             * if (CsCVarDrawManagerTraceRequests->GetInt() == CS_CVAR_DRAW)
             * {
             *  // Sphere around Start
             *  DrawDebugSphere(GetWorld(), Request->Start, 16.0f, 16, FColor::Green, false, 0.1f, 0, 1.0f);
             *  // Line from Start to End
             *  DrawDebugLine(GetWorld(), Request->Start, Request->End, FColor::Red, false, 0.1f, 0, 1.0f);
             * }
             */
            request.bProcessing = true;

            // Test (Check)
            if (request.Method == ECgTraceMethod.Test)
            {
                FCgDebug.LogWarning("FCsManager_Trace.ProcessRequest: There is NO Async Trace " + request.Method.ToString() + " Method. Use TraceMethod: Single or Multi.");
                request.Reset();
                return(false);
            }

            // Line
            if (request.Type == ECgTraceType.Line)
            {
                request.ScheduleCommand();
                return(true);
            }
            // Sweep (Cast)
            else
            if (request.Type == ECgTraceType.Sweep)
            {
                FCgDebug.LogWarning("FCsManager_Trace.ProcessRequest: There is NO Async Sweep (Cast) Trace Method. Use TraceType: Line.");
                request.Reset();
                return(false);
            }
            // Overlap
            else
            if (request.Type == ECgTraceType.Overlap)
            {
                FCgDebug.LogWarning("FCsManager_Trace.ProcessRequest: There is NO Async Overlap (Cast) Trace Method. Use TraceType: Overlap.");
                request.Reset();
                return(false);
            }
            return(true);
        }
示例#3
0
        public virtual void PlaySound(FECgWeaponFireMode fireMode, FECgWeaponSound soundType, MonoBehaviour owner, Vector3 location)
        {
            FCgSoundElement soundElement = GetSound(fireMode, soundType);

            if (soundElement.Get() == null)
            {
                FCgDebug.LogWarning("MCsData_ProjectileWeapon.PlaySound: Attempting to Play a NULL Sound.");
                return;
            }

            //ICgManager_Sound manager_sound = ICgManager_Sound.Get();

            /*
             * FCsSoundPayload* Payload = Manager_Sound->AllocatePayload();
             * Payload->Set(SoundElement);
             * Payload->Owner = InOwner;
             *  Payload->Location = Location;
             *
             *  Manager_Sound->Play(Payload);
             */
        }
示例#4
0
        public bool HasCompleted()
        {
            // Frame
            // Time
            if (bWaitForTime)
            {
                if (WaitForTimeType != null)
                {
                    WaitForTime = WaitForTimeType.Get();

                    if (WaitForTime < 0.0f)
                    {
                        WaitForTime     = 0.0f;
                        WaitForTimeType = null;

                        FCgDebug.LogWarning("FCgGizmoDrawRequest.HasCompleted: WaitForTimeType of type 'FCgGizmoDrawRequest.FTimeType' is used for WaitForTime. WaitForTimeType value must be >= 0.0f.");
                    }
                }
                return(WaitForTimeTimer >= WaitForTime);
            }
            // Flag
            return(true);
        }
示例#5
0
        public FCgTraceResponse Trace(FCgTraceRequest request)
        {
            request.StartTime = FCgManager_Time.Get().GetTimeSinceStart(TimeType);

            bool addPending = !request.bForce && TraceCountThisFrame >= RequestsProcessedPerTick;

            // TODO: Print warning for a normal trace moved to Async
            if (addPending && !request.bAsync)
            {
                request.Reset();
                FCgDebug.LogWarning("FCsManager_Trace.Trace: Reached maximum RequestsProcessedPerTick: " + RequestsProcessedPerTick + " and Request is NOT Async. Abandoning Request.");
                return(null);
            }

            // Async
            if (request.bAsync ||
                addPending)
            {
                // if NOT Pending, Start Async
                if (!addPending)
                {
                    // if Successful in processing Request, EXIT
                    if (ProcessRequest(request))
                    {
                        AddPendingRequest(request);
                        IncrementTraceCount(request);
                        return(null);
                    }
                }

                // ADD Pending Request
                AddPendingRequest(request);
                return(null);
            }
            // Normal
            else
            {
#if UNITY_EDITOR
                if (DrawRequests.Draw())
                {
                    // Sphere around Start
                    FCgManager_GizmoDraw.Get().DrawSphere(request.Start, 0.16f, Color.green, 0.1f);
                    // Line from Start to End
                    FCgManager_GizmoDraw.Get().DrawLine(request.Start, request.End, Color.red, 0.1f);
                }
#endif // #if UNITY_EDITOR

                FCgTraceResponse response = AllocateResponse();

                response.ElapsedTime = 0.0f;

                // Line
                if (request.Type == ECgTraceType.Line)
                {
                    // Test
                    if (request.Method == ECgTraceMethod.Test)
                    {
                        // Linecast
                        response.bResult = Physics.Linecast(request.Start, request.End, request.LayerMask);
                    }
                    // Single
                    else
                    if (request.Method == ECgTraceMethod.Single)
                    {
                        FCgDebug.LogWarning("FCsManager_Trace.Trace: Line Trace Single is NOT supported. Use TraceMethod: Test or Multi. Abandoning Request.");
                    }
                    // Multi
                    else
                    if (request.Method == ECgTraceMethod.Multi)
                    {
                        // RaycastNonAlloc
                        Vector3 v        = request.End - request.Start;
                        float   distance = v.magnitude;
                        Vector3 dir      = distance > 0.0f ? v / distance : Vector3.zero;

                        float EXTEND = 0.1f;

                        response.OutHitCount = Physics.RaycastNonAlloc(request.Start, dir, response.OutHitBuffer, distance + EXTEND, request.LayerMask);
                        response.ResolveHitBuffers(request.StartTime, request.Start, request.End);
                    }
                }
                // Sweep
                else
                if (request.Type == ECgTraceType.Sweep)
                {
                    // Test
                    if (request.Method == ECgTraceMethod.Test)
                    {
                        // Box
                        if (request.Shape == ECgCollisionShape.Box)
                        {
                            // CheckBox
                            response.bResult = Physics.CheckBox(request.BoxParams.Center, request.BoxParams.HalfExtents, request.BoxParams.Orientation, request.LayerMask);
                        }
                        // Sphere
                        else
                        if (request.Shape == ECgCollisionShape.Sphere)
                        {
                            // CheckSphere
                            response.bResult = Physics.CheckSphere(request.SphereParams.Position, request.SphereParams.Radius, request.LayerMask);
                        }
                        // Capsule
                        else
                        if (request.Shape == ECgCollisionShape.Capsule)
                        {
                            // CheckCapsule
                            response.bResult = Physics.CheckCapsule(request.CapsuleParams.Start, request.CapsuleParams.End, request.CapsuleParams.Radius, request.LayerMask);
                        }
                    }
                    // Single
                    else
                    if (request.Method == ECgTraceMethod.Single)
                    {
                        FCgDebug.LogWarning("FCsManager_Trace.Trace: Sweep Trace Single is NOT supported. Use TraceMethod: Test or Multi. Abandoning Request.");
                    }
                    // Multi
                    else
                    if (request.Method == ECgTraceMethod.Multi)
                    {
                        // Box
                        if (request.Shape == ECgCollisionShape.Box)
                        {
                            // BoxCastNonAlloc
                            Vector3 v        = request.End - request.Start;
                            float   distance = v.magnitude;
                            Vector3 dir      = distance > 0.0f ? v / distance : Vector3.zero;

                            float EXTEND = 0.1f;

                            response.OutHitCount = Physics.BoxCastNonAlloc(request.BoxParams.Center, request.BoxParams.HalfExtents, dir, response.OutHitBuffer, request.BoxParams.Orientation, distance + EXTEND, request.LayerMask);
                            response.ResolveHitBuffers(request.StartTime, request.Start, request.End);
                        }
                        // Sphere
                        else
                        if (request.Shape == ECgCollisionShape.Sphere)
                        {
                            // SphereCastNonAlloc
                            Vector3 v        = request.End - request.Start;
                            float   distance = v.magnitude;
                            Vector3 dir      = distance > 0.0f ? v / distance : Vector3.zero;

                            float EXTEND = 0.1f;

                            response.OutHitCount = Physics.SphereCastNonAlloc(request.Start, request.SphereParams.Radius, dir, response.OutHitBuffer, distance + EXTEND, request.LayerMask);
                            response.ResolveHitBuffers(request.StartTime, request.Start, request.End);
                        }
                        // Capsule
                        else
                        if (request.Shape == ECgCollisionShape.Capsule)
                        {
                            // CapsuleCastNonAlloc
                            Vector3 v        = request.End - request.Start;
                            float   distance = v.magnitude;
                            Vector3 dir      = distance > 0.0f ? v / distance : Vector3.zero;

                            float EXTEND = 0.1f;

                            response.OutHitCount = Physics.CapsuleCastNonAlloc(request.CapsuleParams.Start, request.CapsuleParams.End, request.CapsuleParams.Radius, dir, response.OutHitBuffer, distance + EXTEND, request.LayerMask);
                            response.ResolveHitBuffers(request.StartTime, request.Start, request.End);
                        }
                    }
                }
                // Overlap
                else
                if (request.Type == ECgTraceType.Overlap)
                {
                    // Test
                    if (request.Method == ECgTraceMethod.Test)
                    {
                        FCgDebug.LogWarning("FCsManager_Trace.Trace: Overlap Trace Test is NOT supported. Use TraceMethod: Multi. Abandoning Request.");
                    }
                    // Single
                    else
                    if (request.Method == ECgTraceMethod.Single)
                    {
                        FCgDebug.LogWarning("FCsManager_Trace.Trace: Overlap Trace Single is NOT supported. Use TraceMethod: Multi. Abandoning Request.");
                    }
                    // Multi
                    else
                    if (request.Method == ECgTraceMethod.Multi)
                    {
                        // Box
                        if (request.Shape == ECgCollisionShape.Box)
                        {
                            // OverlapBoxNonAlloc
                            response.OutOverlapCount = Physics.OverlapBoxNonAlloc(request.BoxParams.Center, request.BoxParams.HalfExtents, response.OutOverlapBuffer, request.BoxParams.Orientation, request.LayerMask);
                            response.ResolveOverlapBuffers(request.StartTime);
                        }
                        // Sphere
                        else
                        if (request.Shape == ECgCollisionShape.Sphere)
                        {
                            // OverlapSphereNonAlloc
                            response.OutOverlapCount = Physics.OverlapSphereNonAlloc(request.SphereParams.Position, request.SphereParams.Radius, response.OutOverlapBuffer, request.LayerMask);
                            response.ResolveOverlapBuffers(request.StartTime);
                        }
                        // Capsule
                        else
                        if (request.Shape == ECgCollisionShape.Capsule)
                        {
                            // CapsuleCastNonAlloc
                            response.OutOverlapCount = Physics.OverlapCapsuleNonAlloc(request.CapsuleParams.Start, request.CapsuleParams.End, request.CapsuleParams.Radius, response.OutOverlapBuffer, request.LayerMask);
                            response.ResolveOverlapBuffers(request.StartTime);
                        }
                    }
                }
                IncrementTraceCount(request);
                request.Reset();
#if UNITY_EDITOR
                if (DrawResponses.Draw())
                {
                    if (response.bResult)
                    {
                        // Sphere around Start
                        FCgManager_GizmoDraw.Get().DrawSphere(response.OutHits[FIRST].TraceStart, 0.16f, Color.green, 0.1f);
                        // Line from Start to End
                        FCgManager_GizmoDraw.Get().DrawLine(response.OutHits[FIRST].TraceStart, response.OutHits[FIRST].Location, Color.red, 0.1f);
                    }
                }
#endif // #if UNITY_EDITOR
                return(response);
            }
        }
示例#6
0
        private void OnBeginPlay_Handle_Pawns()
        {
            MCgPawn[] pawns = FindObjectsOfType <MCgPawn>();

            foreach (MCgPawn p in pawns)
            {
                // Auto Possess
                if (p.bAutoPossess)
                {
                    bool possessed = false;

                    // Players

                    // Auto Assign Controller
                    if (p.ControllerIndex <= AUTO_ASSIGN_CONTROLLER)
                    {
                        foreach (MCgPlayerController pc in PlayerControllers)
                        {
                            if (pc.Pawn != null)
                            {
                                pc.Possess(p);

                                possessed = true;
                                break;
                            }
                        }

                        if (!possessed)
                        {
                            FCgDebug.LogWarning("MCgGameInstance.OnBeginPlay_Handle_Pawns: Failed to AutoPossess Pawn: " + p.name + " of type: " + p.GetType().ToString());
                        }
                    }
                    // Search for controller with matching index
                    else
                    {
                        if (p.ControllerIndex >= PlayerControllers.Count)
                        {
                            FCgDebug.LogWarning("MGgGameInstance.OnBeginPlay_Handle_Pawns: Failed to AutoPossess Pawn: " + p.name + " of type: " + p.GetType().ToString() + ". No PlayerController found with index: " + p.ControllerIndex);
                        }
                        else
                        {
                            int index = p.ControllerIndex;

                            if (PlayerControllers[index].Pawn != null)
                            {
                                FCgDebug.LogWarning("MGgGameInstance.OnBeginPlay_Handle_Pawns: Failed to AutoPossess Pawn: " + p.name + " of type: " + p.GetType().ToString());
                                FCgDebug.LogWarning("MGgGameInstance.OnBeginPlay_Handle_Pawns: PlayerController with index: " + index + " is already possessing Pawn: " + PlayerControllers[index].Pawn.name);
                            }
                            else
                            {
                                PlayerControllers[index].Possess(p);
                            }
                        }
                    }

                    // TODO: AI
                }

                p.bPlacedInWorld = true;

                p.Init();
            }
        }