Ejemplo n.º 1
0
 static void Prefix(PilotableActorRepresentation __instance, ref VisibilityLevel newLevel)
 {
     if (!FogOfWarManager.GetInstance().IsFogOfWarOn)
     {
         newLevel = VisibilityLevel.LOSFull;
     }
 }
Ejemplo n.º 2
0
        public static VisibilityLevel Calculate(Vector3 position, List <LightSource> lightSources)
        {
            VisibilityLevel visibility = VisibilityLevel.Hidden;

            for (int i = 0; i < lightSources.Count; i++)
            {
                LightSource light         = lightSources[i];
                float       distanceSq    = Vector3.SqrMagnitude(light.gameObject.transform.position - position);
                float       partialRadius = light.lightRadius + 0.8f;

                if (distanceSq < partialRadius * partialRadius)
                {
                    Vector3 raycastDir = position - light.transform.position;
                    if (Physics.Raycast(light.transform.position, raycastDir, raycastDir.magnitude, LayerMask.NameToLayer("Player"), QueryTriggerInteraction.Ignore))
                    {
                        // Something is blocking the light ray
                        return(VisibilityLevel.Hidden);
                    }

                    visibility = VisibilityLevel.Partial;

                    if (distanceSq < light.lightRadius * light.lightRadius)
                    {
                        visibility = VisibilityLevel.Visible;
                    }
                }
            }

            return(visibility);
        }
/*      public static void ToggleCallout () { try {
 *       if ( IsCallout != IsCalloutPressed ) {
 *          IsCallout = IsCalloutPressed;
 *          foreach ( Action<bool> listener in CalloutListener )
 *             listener( IsCallout );
 *       }
 *    }                 catch ( Exception ex ) { Error( ex ); } }*/

        // ============ Floating Nameplate ============

        public static void ShowPilotWounds(CombatHUDActorNameDisplay __instance, VisibilityLevel visLevel)
        {
            try {
                AbstractActor         actor   = __instance.DisplayedCombatant as AbstractActor;
                Pilot                 pilot   = actor?.GetPilot();
                Team                  team    = actor?.team;
                TMPro.TextMeshProUGUI textbox = __instance.PilotNameText;
                if (AnyNull <object>(pilot, team, textbox, Combat) || pilot.Injuries <= 0)
                {
                    return;
                }
                string   format = null;
                object[] args   = new object[] { null, pilot.Injuries, pilot.Health - pilot.Injuries, pilot.Health };
                if (team == Combat.LocalPlayerTeam)
                {
                    format = Settings.ShowPlayerHealth;
                }
                else if (team.IsFriendly(Combat.LocalPlayerTeam))
                {
                    format = Settings.ShowAllyHealth;
                }
                else if (visLevel == VisibilityLevel.LOSFull)
                {
                    format  = Settings.ShowEnemyWounds;
                    args[2] = args[3] = "?";
                }
                if (format != null)
                {
                    textbox.text = textbox.text + "</uppercase><size=80%>" + Translate(format, args);
                }
            }                 catch (Exception ex) { Error(ex); }
        }
Ejemplo n.º 4
0
 public static void Postfix(PilotableActorRepresentation __instance, VisibilityLevel newLevel)
 {
     try {
         Log.LogWrite("PilotableActorRepresentation.OnPlayerVisibilityChanged " + __instance.parentCombatant.DisplayName + " " + newLevel + "\n");
         if (__instance.parentActor == null)
         {
             Log.LogWrite(" are you f*****g seriously?? parentActor is null\n", true);
             return;
         }
         foreach (MechComponent component in __instance.parentActor.allComponents)
         {
             try {
                 ActivatableComponent activatable = component.componentDef.GetComponent <ActivatableComponent>();
                 if (activatable == null)
                 {
                     continue;
                 }
                 ;
                 if ((activatable.activateVFXOutOfLOSHide == false) && (activatable.presistantVFXOutOfLOSHide == false))
                 {
                     continue;
                 }
                 if (activatable.activateVFXOutOfLOSHide == true)
                 {
                     ObjectSpawnDataSelf activeVFX = component.ActivateVFX();
                     if (activeVFX != null)
                     {
                         if (newLevel != VisibilityLevel.LOSFull)
                         {
                             activeVFX.Hide();
                         }
                         else
                         {
                             activeVFX.Show();
                         }
                     }
                 }
                 if (activatable.presistantVFXOutOfLOSHide == true)
                 {
                     ObjectSpawnDataSelf presistantVFX = component.PresitantVFX();
                     if (presistantVFX != null)
                     {
                         if (newLevel != VisibilityLevel.LOSFull)
                         {
                             presistantVFX.Hide();
                         }
                         else
                         {
                             presistantVFX.Show();
                         }
                     }
                 }
             } catch (Exception e) {
                 Log.LogWrite(e.ToString() + "\n", true);
             }
         }
     }catch (Exception e) {
         Log.LogWrite(e.ToString() + "\n", true);
     }
 }
Ejemplo n.º 5
0
        public static void Postfix(Turret __instance, ref Text __result, VisibilityLevel visLevel)
        {
            if (__instance == null)
            {
                return;
            }

            /*
             *  Turret.UnitName = return (this.TurretDef == null) ? "UNDEFINED" : this.TurretDef.Chassis.Description.Name ->
             *  Turret.NickName = (this.TurretDef == null) ? "UNDEFINED" : this.TurretDef.Description.Name ->
             */
            if (__instance.Combat.HostilityMatrix.IsLocalPlayerEnemy(__instance.team.GUID))
            {
                string chassisName = __instance.UnitName;
                string fullName    = __instance.Nickname;

                SensorScanType scanType = SensorLockHelper.CalculateSharedLock(__instance, null);
                if (scanType < SensorScanType.ArmorAndWeaponType)
                {
                    bool hasVisualScan = VisualLockHelper.CanSpotTargetUsingCurrentPositions(ModState.LastPlayerActorActivated, __instance);
                    if (hasVisualScan)
                    {
                        scanType = SensorScanType.ArmorAndWeaponType;
                    }
                }

                Text response = CombatNameHelper.GetTurretOrVehicleDetectionLabel(visLevel, scanType, fullName, chassisName, false);
                __result = response;
            }
        }
Ejemplo n.º 6
0
        public static void Postfix(Vehicle __instance, ref Text __result, VisibilityLevel visLevel)
        {
            if (__instance == null)
            {
                return;
            }
            ;

            /*
             *  Vehicle.UnitName = VehicleDef.Chassis.Description.Name ->
             *      Alacorn Mk.VI-P / vehicledef_ARES_CLAN / Demolisher II / Galleon GAL-102
             *  Vehicle.NickName = VehicleDef.Description.Name ->
             *      Pirate Alacorn Gauss Carrier / Ares / Demolisher II`
             *      VehicleDef.Description.Id ->
             *          / / vehicledef_DEMOLISHER-II / vehicledef_GALLEON_GAL102
             */
            if (__instance.Combat.HostilityMatrix.IsLocalPlayerEnemy(__instance.team.GUID))
            {
                string chassisName = __instance.UnitName;
                string fullName    = __instance.Nickname;

                SensorScanType scanType = SensorLockHelper.CalculateSharedLock(__instance, null);
                if (scanType < SensorScanType.ArmorAndWeaponType)
                {
                    bool hasVisualScan = VisualLockHelper.CanSpotTargetUsingCurrentPositions(ModState.LastPlayerActorActivated, __instance);
                    if (hasVisualScan)
                    {
                        scanType = SensorScanType.ArmorAndWeaponType;
                    }
                }

                Text response = CombatNameHelper.GetTurretOrVehicleDetectionLabel(visLevel, scanType, fullName, chassisName, true);
                __result = response;
            }
        }
Ejemplo n.º 7
0
        /*
         * Helper method used to find the label text for any enemy vehicles and turrets based on the visiblity and senors levels.
         *
         *  chassisName -> ICombatant.UnitName = (Vehicle/Turret)Def.Chassis.Description.Name -> Carrier / Vargr APC / ArrowIV Chassis
         *  fullname -> ICombatant.NickName = (Vehicle/Turret)Def.Description.Name -> AC/2 Carrier / Vargr APC / Arrow IV Turret
         */
        public static Text GetTurretOrVehicleDetectionLabel(VisibilityLevel visLevel, SensorScanType sensorScanType,
                                                            string fullName, string chassisName, bool isVehicle = true)
        {
            Text label = new Text("?");

            if (visLevel >= VisibilityLevel.Blip0Minimum)
            {
                string labelKey = isVehicle ? ModConfig.LT_UNIT_TYPE_VEHICLE : ModConfig.LT_UNIT_TYPE_TURRET;
                string typeS    = new Text(Mod.Config.LocalizedText[labelKey]).ToString();

                if (sensorScanType == SensorScanType.NoInfo)
                {
                    label = new Text("?");
                }
                else if (sensorScanType == SensorScanType.LocationAndType)
                {
                    label = new Text(typeS);
                }
                else if (sensorScanType == SensorScanType.ArmorAndWeaponType)
                {
                    label = new Text($"{chassisName}");
                }
                else if (sensorScanType == SensorScanType.StructAndWeaponID)
                {
                    label = new Text($"{fullName}");
                }
                else if (sensorScanType == SensorScanType.AllInformation)
                {
                    label = new Text($"{fullName}");
                }
            }

            return(label);
        }
        public static void Postfix(ref CalledShotAttackOrderInfo __result, AbstractActor attackingUnit, int enemyUnitIndex)
        {
            Mod.Log.Trace?.Write("AE:CCSLTC entered");

            ICombatant combatant = attackingUnit.BehaviorTree.enemyUnits[enemyUnitIndex];

            if (combatant is AbstractActor targetActor)
            {
                // Prevents blips from being the targets of called shots
                VisibilityLevel targetVisibility = attackingUnit.VisibilityToTargetUnit(targetActor);
                if (targetVisibility < VisibilityLevel.LOSFull)
                {
                    Mod.Log.Info?.Write($"Target {CombatantUtils.Label(combatant)} is a blip, cannot be targeted by AI called shot");
                    __result = null;
                    return;
                }

                float          distance      = Vector3.Distance(attackingUnit.CurrentPosition, targetActor.CurrentPosition);
                bool           hasVisualScan = VisualLockHelper.GetVisualScanRange(attackingUnit) >= distance;
                SensorScanType sensorScan    = SensorLockHelper.CalculateSharedLock(targetActor, attackingUnit);
                if (sensorScan < SensorScanType.ArmorAndWeaponType && !hasVisualScan)
                {
                    Mod.Log.Info?.Write($"Target {CombatantUtils.Label(targetActor)} sensor info {sensorScan} is less than SurfaceScan and outside visualID, cannot be targeted by AI called shot");
                    __result = null;
                    return;
                }
            }
        }
Ejemplo n.º 9
0
        public static bool Prefix(LineOfSight __instance, ref VisibilityLevel __result,
                                  AbstractActor source, Vector3 sourcePosition, ICombatant target, Vector3 targetPosition, Quaternion targetRotation)
        {
            Mod.Log.Trace?.Write($"LOS:GVTTWPAR: source:{CombatantUtils.Label(source)} ==> target:{CombatantUtils.Label(target)}");

            // Skip if we aren't ready to process
            // TODO: Is this necessary anymore?
            //if (State.TurnDirectorStarted == false || (target as AbstractActor) == null) { return true;  }

            AbstractActor sourceActor = source as AbstractActor;

            // TODO: Handle buildings here
            bool sourceHasLineOfSight = VisualLockHelper.CanSpotTarget(sourceActor, sourcePosition, target, targetPosition, targetRotation, __instance);

            if (sourceHasLineOfSight)
            {
                __result = VisibilityLevel.LOSFull;
            }
            else
            {
                VisibilityLevel sensorsVisibility = VisibilityLevel.None;
                if (ModState.TurnDirectorStarted)
                {
                    SensorScanType sensorLock = SensorLockHelper.CalculateSensorLock(sourceActor, sourcePosition, target, targetPosition);
                    sensorsVisibility = sensorLock.Visibility();
                }
                __result = sensorsVisibility;
            }

            //Mod.Log.Trace?.Write($"LOS:GVTTWPAR - [{__result}] visibility for source:{CombatantUtils.Label(source)} ==> target:{CombatantUtils.Label(target)}");
            return(false);
        }
Ejemplo n.º 10
0
        public static void Postfix(AIUtil __instance, ref bool __result, AbstractActor attacker, ICombatant target, Vector3 position, List <AbstractActor> allies)
        {
            //LowVisibility.Logger.Debug("AIUtil:UnitHasVisibilityToTargetFromPosition:post - entered.");
            bool alliesHaveVis = false;

            for (int i = 0; i < allies.Count; i++)
            {
                //if (allies[i].VisibilityCache.VisibilityToTarget(target).VisibilityLevel == VisibilityLevel.LOSFull) {
                if (allies[i].VisibilityCache.VisibilityToTarget(target).VisibilityLevel == VisibilityLevel.Blip0Minimum)
                {
                    alliesHaveVis = true;
                }
            }
            if (alliesHaveVis)
            {
                VisibilityLevel visibilityToTargetWithPositionsAndRotations =
                    attacker.Combat.LOS.GetVisibilityToTargetWithPositionsAndRotations(attacker, position, target);
                //__result = visibilityToTargetWithPositionsAndRotations >= VisibilityLevel.LOSFull;
                __result = visibilityToTargetWithPositionsAndRotations >= VisibilityLevel.Blip0Minimum;
            }
            else
            {
                __result = true;
            }
            //LowVisibility.Logger.Debug($"AIUtil:UnitHasVisibilityToTargetFromPosition:post - result is:{__result}");
        }
Ejemplo n.º 11
0
        /*
         * Helper method used to find the label text for any enemy mechs based on the visiblity and senors levels.
         *
         * Parameters:
         *  chassisName -> Mech.UnitName = MechDef.Chassis.Description.Name -> Shadow Hawk / Atlas / Marauder
         *          (The name of the base chassis, even if customized chassis (such as RogueOmnis))
         *
         *  partialName -> Mech.NickName = MechDef.Description.Name -> Shadow Hawk SHD-2D / Atlas AS7-D / Marauder ANU-O
         *          (Partial name, most cases chassis and variant name combined, but for some elite mechs can be "less precise" to trick the player which mech it is)
         *
         *  fullname -> Mech.NickName = MechDef.Description.UIName -> Shadow Hawk SHD-2D / Atlas AS7-D Danielle / Anand ANU-O
         *          (Full name, will almost always display the full actual name, and if a hero/elite mech the chassis name is replaced by its custom name. ONly exception is LA's hidden nasty surprises, such as Nuke mechs)
         */
        public static Text GetEnemyMechDetectionLabel(VisibilityLevel visLevel, SensorScanType sensorScanType,
                                                      string fullName, string partialName, string chassisName)
        {
            Text label = new Text("?");

            if (visLevel >= VisibilityLevel.Blip0Minimum)
            {
                string typeS = new Text(Mod.Config.LocalizedText[ModConfig.LT_UNIT_TYPE_MECH]).ToString();

                if (sensorScanType == SensorScanType.NoInfo)
                {
                    label = new Text("?");
                }
                else if (sensorScanType == SensorScanType.LocationAndType)
                {
                    label = new Text(typeS);
                }
                else if (sensorScanType == SensorScanType.ArmorAndWeaponType)
                {
                    label = new Text($"{chassisName}");
                }
                else if (sensorScanType == SensorScanType.StructAndWeaponID)
                {
                    label = new Text($"{partialName}");
                }
                else if (sensorScanType == SensorScanType.AllInformation)
                {
                    label = new Text($"{fullName}");
                }
            }

            return(label);
        }
Ejemplo n.º 12
0
        /// <summary> Creates a new project snippet associated with the provided project ID. </summary>
        /// <param name="projectId"> The ID of the project to create this snippet for. </param>
        /// <param name="title"> The snippet's title. </param>
        /// <param name="fileName"> The snippet's file name. </param>
        /// <param name="code"> The code for this snippet. </param>
        /// <param name="visibilityLevel"> The visibility level for this snippet. </param>
        /// <returns> A <see cref="RequestResult{ProjectSnippet}" /> representing the results of the request. </returns>
        public async Task <RequestResult <ProjectSnippet> > Create(uint projectId, string title, string fileName,
                                                                   string code, VisibilityLevel visibilityLevel)
        {
            if (title == null)
            {
                throw new ArgumentNullException(nameof(title));
            }

            if (fileName == null)
            {
                throw new ArgumentNullException(nameof(fileName));
            }

            if (code == null)
            {
                throw new ArgumentNullException(nameof(code));
            }

            var request = RequestFactory.Create("projects/{projectId}/snippets", Method.Post);

            request.AddUrlSegment("projectId", projectId);
            request.AddParameter("title", title);
            request.AddParameter("file_name", fileName);
            request.AddParameter("code", code);
            request.AddParameter("visibility_level", visibilityLevel);

            return(await request.Execute <ProjectSnippet>());
        }
Ejemplo n.º 13
0
        private static bool ComputePropertyVisibility(PropertyInfo propertyInfo, bool bypassParam, VisibilityLevel visibilityLevel)
        {
            bool isVisible = false;
            var hiddenAttribute = propertyInfo.GetCustomAttribute(typeof(HiddenWhenAttribute));
            var visibilityByPassAttribute = propertyInfo.GetCustomAttribute(typeof(VisibilityByPassAttribute));

            if (visibilityByPassAttribute == null && hiddenAttribute == null) // no attribute = keep in any case
            {
                isVisible = true;
            }
            else if (visibilityByPassAttribute != null && bypassParam)  // bypass attribute + bypassParam = keep
            {
                isVisible = true;
            }
            else if (hiddenAttribute != null)
            {
                HiddenWhenAttribute hiddenLevels = hiddenAttribute as HiddenWhenAttribute;
                if (hiddenLevels != null)
                {
                    if (!hiddenLevels.Levels.Contains(visibilityLevel))
                        isVisible = true;
                }
            }
            else
            {
                isVisible = false;
            }
            return isVisible;
        }
 static void Prefix(PilotableActorRepresentation __instance, ref VisibilityLevel newLevel)
 {
     if (!FogOfWarManager.GetInstance().IsFogOfWarOn)
     {
         Main.Logger.LogDebug($"[BTDebug] Running PilotableActorRepresentation Prefix for Fog of War");
         newLevel = VisibilityLevel.LOSFull;
     }
 }
Ejemplo n.º 15
0
 public static Color GetGemColor(VisibilityLevel level)
 {
     if (visibilityColors.ContainsKey(level))
     {
         return(visibilityColors[level]);
     }
     Debug.LogError("Missing visibility color!");
     return(Color.magenta);
 }
Ejemplo n.º 16
0
        public async Task Create_ValidParameters_AddsVisibilityLevelParameter()
        {
            const VisibilityLevel expected = VisibilityLevel.Public;
            var sut = new ProjectSnippetRepository(_requestFactory);

            await sut.Create(0, "title", "fileName", "code", expected);

            _request.Received().AddParameter("visibility_level", expected);
        }
Ejemplo n.º 17
0
        public async Task Update_VisibilityLevelIsSet_AddsVisibilityLevelParameter()
        {
            const VisibilityLevel expected = VisibilityLevel.Public;
            var sut = new ProjectSnippetRepository(_requestFactory);

            await sut.Update(0, 0, visibilityLevel : expected);

            _request.Received().AddParameterIfNotNull("visibility_level", expected);
        }
Ejemplo n.º 18
0
        public static void Postfix(CombatHUDActorNameDisplay __instance, VisibilityLevel visLevel, AbstractActor ___displayedActor)
        {
            if (___displayedActor != null && ModState.LastPlayerActorActivated != null && ModState.TurnDirectorStarted &&
                !___displayedActor.Combat.HostilityMatrix.IsLocalPlayerFriendly(___displayedActor.TeamId))
            {
                SensorScanType scanType = SensorLockHelper.CalculateSharedLock(___displayedActor, ModState.LastPlayerActorActivated);

                // TODO: Needs to be hidden or localized
                string nameText = scanType >= SensorScanType.AllInformation ? ___displayedActor.GetPilot().Name : "";
                __instance.PilotNameText.SetText(nameText);
            }
        }
Ejemplo n.º 19
0
        public static bool Prefix(SelectionStateFire __instance, ref bool __result, ICombatant combatant)
        {
            Mod.Log.Trace?.Write("SSF:PCC:PRE entered");

            if (__instance != null && combatant != null && combatant is AbstractActor targetActor && __instance.SelectedActor != null)
            {
                CombatGameState Combat           = __instance.SelectedActor.Combat;
                bool            targetIsFriendly = Combat.HostilityMatrix.IsFriendly(combatant.team.GUID, Combat.LocalPlayerTeamGuid);
                if (targetIsFriendly)
                {
                    Mod.Log.Trace?.Write("Friendly target, skipping check");
                    return(true);
                }

                EWState targetState   = new EWState(targetActor);
                EWState attackerState = new EWState(__instance.SelectedActor);

                if (__instance.SelectionType == SelectionType.FireMorale)
                {
                    // Prevents blips from being the targets of called shots
                    VisibilityLevel targetVisibility = __instance.SelectedActor.VisibilityToTargetUnit(targetActor);
                    if (targetVisibility < VisibilityLevel.LOSFull)
                    {
                        Mod.Log.Info?.Write($"Target {CombatantUtils.Label(combatant)} is a blip, cannot be targeted by called shot");
                        __result = false;
                        return(false);
                    }

                    float          distance      = Vector3.Distance(__instance.SelectedActor.CurrentPosition, targetActor.CurrentPosition);
                    bool           hasVisualScan = VisualLockHelper.GetVisualScanRange(__instance.SelectedActor) >= distance;
                    SensorScanType sensorScan    = SensorLockHelper.CalculateSharedLock(targetActor, __instance.SelectedActor);
                    if (sensorScan < SensorScanType.ArmorAndWeaponType && !hasVisualScan)
                    {
                        Mod.Log.Info?.Write($"Target {CombatantUtils.Label(targetActor)} sensor info {sensorScan} is less than SurfaceScan and range:{distance} outside visualScan range, cannot be targeted by called shot");
                        __result = false;
                        return(false);
                    }
                }
                else if (__instance.SelectionType == SelectionType.FireMulti)
                {
                    if (targetState.HasStealth() || targetState.HasMimetic())
                    {
                        Mod.Log.Info?.Write($"Target {CombatantUtils.Label(targetActor)} has stealth, cannot be multi-targeted!");
                        __result = false;
                        return(false);
                    }
                }
            }

            __result = false;
            return(true);
        }
Ejemplo n.º 20
0
 public static bool Prefix(TurnDirector __instance, VisibilityLevel contactLevel)
 {
     Mod.Log.Trace?.Write($"TD:NC - entered.");
     if (__instance.IsInterleaved && contactLevel == VisibilityLevel.None && !__instance.DoAnyUnitsHaveContactWithEnemy)
     {
         Mod.Log.Info?.Write("Intercepting lostContact state, allowing remainder of actors to move.");
         return(false);
     }
     else
     {
         return(true);
     }
 }
Ejemplo n.º 21
0
        private void SetVisibility(VisibilityLevel visibility)
        {
            CurrentVisibility = visibility;

            Renderer[] renderers = this.GetComponentsInChildren <Renderer>();

            for (int index = 0; index < renderers.Length; index++)
            {
                Color color = renderers[index].material.color;
                color.a = (float)visibility / 100;
                renderers[index].material.color = color;
            }
        }
Ejemplo n.º 22
0
        // Token: 0x06000D92 RID: 3474 RVA: 0x0003CE40 File Offset: 0x0003B040
        public void SetVisibilityLevel(VisibilityLevel newVisibilityLevel)
        {
            if (this.visibilityLevel != newVisibilityLevel)
            {
                this.visibilityLevel = newVisibilityLevel;
                switch (this.visibilityLevel)
                {
                case VisibilityLevel.Invisible:
                    for (int i = 0; i < this.rendererInfos.Length; i++)
                    {
                        CharacterModel.RendererInfo rendererInfo = this.rendererInfos[i];
                        rendererInfo.renderer.enabled           = false;
                        rendererInfo.renderer.shadowCastingMode = ShadowCastingMode.Off;
                    }
                    return;

                case VisibilityLevel.Cloaked:
                    for (int j = 0; j < this.rendererInfos.Length; j++)
                    {
                        CharacterModel.RendererInfo rendererInfo2 = this.rendererInfos[j];
                        rendererInfo2.renderer.enabled           = true;
                        rendererInfo2.renderer.shadowCastingMode = ShadowCastingMode.Off;
                        rendererInfo2.renderer.material          = CharacterModel.cloakedMaterial;
                    }
                    return;

                case VisibilityLevel.Revealed:
                    for (int k = 0; k < this.rendererInfos.Length; k++)
                    {
                        CharacterModel.RendererInfo rendererInfo3 = this.rendererInfos[k];
                        rendererInfo3.renderer.enabled           = true;
                        rendererInfo3.renderer.shadowCastingMode = ShadowCastingMode.Off;
                        rendererInfo3.renderer.material          = CharacterModel.revealedMaterial;
                    }
                    return;

                case VisibilityLevel.Visible:
                    for (int l = 0; l < this.rendererInfos.Length; l++)
                    {
                        CharacterModel.RendererInfo rendererInfo4 = this.rendererInfos[l];
                        rendererInfo4.renderer.enabled           = true;
                        rendererInfo4.renderer.shadowCastingMode = ShadowCastingMode.On;
                        rendererInfo4.renderer.material          = rendererInfo4.defaultMaterial;
                    }
                    break;

                default:
                    return;
                }
            }
        }
Ejemplo n.º 23
0
        private IEnumerator DoSetDeviceIndex(int index)
        {
            yield return(new WaitForSeconds(1f));

            yield return(null); //wait for children to be initialized

            Rigidbody = this.GetComponent <Rigidbody>();
            if (Rigidbody == null)
            {
                Rigidbody = this.gameObject.AddComponent <Rigidbody>();
            }
            Rigidbody.isKinematic = true;

            Transform trackhat = this.transform.FindChild("trackhat");

            Collider trackhatCollider = trackhat.GetComponent <Collider>();

            if (trackhatCollider == null)
            {
                trackhatCollider = trackhat.gameObject.AddComponent <SphereCollider>();
            }
            trackhatCollider.isTrigger = true;

            NVRPlayer.Instance.RegisterHand(this);

            if (NVRPlayer.Instance.PhysicalHands == true)
            {
                if (PhysicalController != null)
                {
                    PhysicalController.Kill();
                }

                PhysicalController = this.gameObject.AddComponent <NVRPhysicalController>();
                PhysicalController.Initialize(this, false);

                Color transparentcolor = Color.white;
                transparentcolor.a = (float)VisibilityLevel.Ghost / 100f;

                GhostRenderers = this.GetComponentsInChildren <Renderer>();
                for (int rendererIndex = 0; rendererIndex < GhostRenderers.Length; rendererIndex++)
                {
                    NVRHelpers.SetTransparent(GhostRenderers[rendererIndex].material, transparentcolor);
                }

                GhostColliders    = new Collider[] { trackhatCollider };
                CurrentVisibility = VisibilityLevel.Ghost;
            }

            CurrentHandState = HandState.Idle;
        }
Ejemplo n.º 24
0
        public void UpdatePlayerVisibility()
        {
            List <LightSource> lights = CurrentFloorObject.GetComponent <DungeonLevel>().LightSources.Items;

            Vector3         playerWorldPos = Utils.ConvertToWorldCoord(playerCreature.Position) + new Vector3(0f, 0.5f, 0f);
            VisibilityLevel level          = Visibility.Calculate(playerWorldPos, lights);

            // Equipped lightsources always cause player to be visible
            if (CreatureHasLightsource(playerCreature, EquipSlot.LeftHand) || CreatureHasLightsource(playerCreature, EquipSlot.RightHand))
            {
                level = VisibilityLevel.Visible;
            }

            playerObject.GetComponent <Player>().CurrentVisibility = level;
            visibilityDiamondObject.GetComponent <MeshRenderer>().material.SetColor("_Color", Visibility.GetGemColor(level));
        }
        static void Postfix(PilotableActorRepresentation __instance, VisibilityLevel newLevel)
        {
            Mod.Log.Trace?.Write("PAR:OPVC entered.");

            Traverse      parentT     = Traverse.Create(__instance).Property("parentActor");
            AbstractActor parentActor = parentT.GetValue <AbstractActor>();

            if (ModState.AmbushTurretGUIDtoBuilding.Keys.Contains(parentActor.GUID))
            {
                Turret turret = parentActor as Turret;
                if (newLevel == VisibilityLevel.LOSFull)
                {
                    __instance.VisibleObject.SetActive(false);
                }
            }
        }
Ejemplo n.º 26
0
        private bool?ShouldTraceBasedOnClassLevelInfo(MethodDefinition definition)
        {
            TraceAttributeInfo attributeInfo = GetTraceAttributeInfoForType(definition.DeclaringType);

            if (attributeInfo != null)
            {
                if (attributeInfo.IsNoTrace)
                {
                    return(false);
                }

                TraceTargetVisibility targetVisibility = attributeInfo.TargetVisibility;
                VisibilityLevel       methodVisibility = VisibilityHelper.GetMethodVisibilityLevel(definition);
                return((int)targetVisibility >= (int)methodVisibility);
            }

            return(null);
        }
        internal override bool IsMatching(MethodDefinition methodDefinition)
        {
            if (base.IsMatching(methodDefinition))
            {
                TypeDefinition  declaringType         = methodDefinition.DeclaringType;
                VisibilityLevel typeVisibility        = VisibilityHelper.GetTypeVisibilityLevel(declaringType);
                VisibilityLevel methodVisibilityLevel = VisibilityHelper.GetMethodVisibilityLevel(methodDefinition);

                //check type visibility
                if ((int)typeVisibility > (int)_targetClass)
                {
                    return(false);
                }

                //then method visibility will decide
                return((int)methodVisibilityLevel <= (int)_targetMethod);
            }
            return(false);
        }
Ejemplo n.º 28
0
 public static void Postfix(ref VisibilityLevel __result, AbstractActor source, Vector3 sourcePosition, Vector3 targetPosition)
 {
     try
     {
         if (__result == VisibilityLevel.None)
         {
             float maxDistance = source.team.TeamController == TeamController.Computer
                 ? AlwaysDetect.HarmonyManager.Settings.MaxAIDetectionDistance
                 : AlwaysDetect.HarmonyManager.Settings.MaxHumanDetectionDistance;
             if (Vector3.Distance(sourcePosition, targetPosition) < maxDistance)
             {
                 __result = VisibilityLevel.Blip0Minimum;
             }
         }
     }
     catch (Exception e)
     {
         AlwaysDetect.HarmonyManager.Log(e.ToString());
         throw;
     }
 }
Ejemplo n.º 29
0
        public static void Postfix(Mech __instance, ref Text __result, VisibilityLevel visLevel)
        {
            if (__instance == null)
            {
                return;
            }

            /*
             *  Mech.UnitName = MechDef.Chassis.Description.Name -> Shadow Hawk / Atlas / Marauder
             *  Mech.Nickname = Mech.Description.Name -> Shadow Hawk SHD-2D / Atlas AS7-D / Marauder ANU-O
             *  Mech.Description.UIName -> Shadow Hawk SHD-2D / Atlas AS7-D Danielle / Anand ANU-O
             */
            string fullName = __instance.Description.UIName;

            if (__instance.Combat.HostilityMatrix.IsLocalPlayerEnemy(__instance.team.GUID))
            {
                string chassisName = __instance.UnitName;
                string partialName = __instance.Nickname;

                SensorScanType scanType = SensorLockHelper.CalculateSharedLock(__instance, null);
                if (scanType < SensorScanType.ArmorAndWeaponType)
                {
                    bool hasVisualScan = VisualLockHelper.CanSpotTargetUsingCurrentPositions(ModState.LastPlayerActorActivated, __instance);
                    if (hasVisualScan)
                    {
                        scanType = SensorScanType.ArmorAndWeaponType;
                    }
                }

                __result = CombatNameHelper.GetEnemyMechDetectionLabel(visLevel, scanType, fullName, partialName, chassisName);
            }
            else
            {
                string displayName = __instance.DisplayName;

                __result = CombatNameHelper.GetNonHostileMechDetectionLabel(__instance, fullName, displayName);
            }
        }
Ejemplo n.º 30
0
        private void SetVisibility(VisibilityLevel visibility)
        {
            if (CurrentVisibility != visibility)
            {
                if (visibility == VisibilityLevel.Ghost)
                {
                    PhysicalController.Off();

                    for (int index = 0; index < GhostRenderers.Length; index++)
                    {
                        GhostRenderers[index].enabled = true;
                    }

                    for (int index = 0; index < GhostColliders.Length; index++)
                    {
                        GhostColliders[index].enabled = true;
                    }
                }

                if (visibility == VisibilityLevel.Visible)
                {
                    PhysicalController.On();

                    for (int index = 0; index < GhostRenderers.Length; index++)
                    {
                        GhostRenderers[index].enabled = false;
                    }

                    for (int index = 0; index < GhostColliders.Length; index++)
                    {
                        GhostColliders[index].enabled = false;
                    }
                }
            }

            CurrentVisibility = visibility;
        }
Ejemplo n.º 31
0
        public static void Postfix(FiringPreviewManager __instance, ref bool __result, CombatGameState ___combat,
                                   AbstractActor attacker, ICombatant target, Vector3 position, List <AbstractActor> allies)
        {
            //LowVisibility.Logger.Debug("FiringPreviewManager:HasLOS:post - entered.");
            for (int i = 0; i < allies.Count; i++)
            {
                //if (allies[i].VisibilityCache.VisibilityToTarget(target).VisibilityLevel == VisibilityLevel.LOSFull) {
                if (allies[i].VisibilityCache.VisibilityToTarget(target).VisibilityLevel >= VisibilityLevel.Blip0Minimum)
                {
                    __result = true;
                    Mod.Log.Trace?.Write($"Allied actor{CombatantUtils.Label(allies[i])} has LOS " +
                                         $"to target:{CombatantUtils.Label(target as AbstractActor)}, returning true.");
                    return;
                }
            }

            VisibilityLevel visibilityToTargetWithPositionsAndRotations =
                ___combat.LOS.GetVisibilityToTargetWithPositionsAndRotations(attacker, position, target);

            //__result = visibilityToTargetWithPositionsAndRotations == VisibilityLevel.LOSFull;
            __result = visibilityToTargetWithPositionsAndRotations >= VisibilityLevel.Blip0Minimum;
            Mod.Log.Trace?.Write($"Actor{CombatantUtils.Label(attacker)} has LOS? {__result} " +
                                 $"to target:{CombatantUtils.Label(target as AbstractActor)}");
        }
Ejemplo n.º 32
0
        private void SetVisibility(VisibilityLevel visibility)
        {
            CurrentVisibility = visibility;

            Renderer[] renderers = this.GetComponentsInChildren<Renderer>();

            for (int index = 0; index < renderers.Length; index++)
            {
                Color color = renderers[index].material.color;
                color.a = (float)visibility / 100;
                renderers[index].material.color = color;
            }
        }
Ejemplo n.º 33
0
        private IEnumerator DoInitialize()
        {
            do
            {
                yield return null; //wait for render model to be initialized
            } while (RenderModelInitialized == false && CustomModel == null);

            Rigidbody = this.GetComponent<Rigidbody>();
            if (Rigidbody == null)
                Rigidbody = this.gameObject.AddComponent<Rigidbody>();
            Rigidbody.isKinematic = true;
            Rigidbody.maxAngularVelocity = float.MaxValue;
            Rigidbody.useGravity = false;

            Collider[] Colliders = null;

            if (CustomModel == null)
            {
                string controllerModel = GetDeviceName();
                SteamVR_RenderModel renderModel = this.GetComponentInChildren<SteamVR_RenderModel>();

                switch (controllerModel)
                {
                    case "vr_controller_05_wireless_b":
                        Transform dk1Trackhat = renderModel.transform.Find("trackhat");
                        if (dk1Trackhat == null)
                        {
                            // Dk1 controller model has trackhat
                        }
                        else
                        {
                            dk1Trackhat.gameObject.SetActive(true);
                        }

                        SphereCollider dk1TrackhatCollider = dk1Trackhat.gameObject.GetComponent<SphereCollider>();
                        if (dk1TrackhatCollider == null)
                        {
                            dk1TrackhatCollider = dk1Trackhat.gameObject.AddComponent<SphereCollider>();
                            dk1TrackhatCollider.isTrigger = true;
                        }

                        Colliders = new Collider[] { dk1TrackhatCollider };
                        break;

                    case "vr_controller_vive_1_5":
                        Transform dk2Trackhat = renderModel.transform.FindChild("trackhat");
                        if (dk2Trackhat == null)
                        {
                            dk2Trackhat = new GameObject("trackhat").transform;
                            dk2Trackhat.gameObject.layer = this.gameObject.layer;
                            dk2Trackhat.parent = renderModel.transform;
                            dk2Trackhat.localPosition = new Vector3(0, -0.033f, 0.014f);
                            dk2Trackhat.localScale = Vector3.one * 0.1f;
                            dk2Trackhat.localEulerAngles = new Vector3(325, 0, 0);
                            dk2Trackhat.gameObject.SetActive(true);
                        }
                        else
                        {
                            dk2Trackhat.gameObject.SetActive(true);
                        }

                        Collider dk2TrackhatCollider = dk2Trackhat.gameObject.GetComponent<SphereCollider>();
                        if (dk2TrackhatCollider == null)
                        {
                            dk2TrackhatCollider = dk2Trackhat.gameObject.AddComponent<SphereCollider>();
                            dk2TrackhatCollider.isTrigger = true;
                        }

                        Colliders = new Collider[] { dk2TrackhatCollider };
                        break;

                    default:
                        Debug.LogError("Error. Unsupported device type: " + controllerModel);
                        break;
                }
            }
            else if (RenderModelInitialized == false)
            {
                RenderModelInitialized = true;
                GameObject CustomModelObject = GameObject.Instantiate(CustomModel);
                Colliders = CustomModelObject.GetComponentsInChildren<Collider>(); //note: these should be trigger colliders

                CustomModelObject.transform.parent = this.transform;
                CustomModelObject.transform.localScale = Vector3.one;
                CustomModelObject.transform.localPosition = Vector3.zero;
                CustomModelObject.transform.localRotation = Quaternion.identity;
            }

            NVRPlayer.Instance.RegisterHand(this);

            if (NVRPlayer.Instance.PhysicalHands == true)
            {
                if (PhysicalController != null)
                {
                    PhysicalController.Kill();
                }

                PhysicalController = this.gameObject.AddComponent<NVRPhysicalController>();
                PhysicalController.Initialize(this, false);

                Color transparentcolor = Color.white;
                transparentcolor.a = (float)VisibilityLevel.Ghost / 100f;

                GhostRenderers = this.GetComponentsInChildren<Renderer>();
                for (int rendererIndex = 0; rendererIndex < GhostRenderers.Length; rendererIndex++)
                {
                    NVRHelpers.SetTransparent(GhostRenderers[rendererIndex].material, transparentcolor);
                }

                if (Colliders != null)
                {
                    GhostColliders = Colliders;
                }

                CurrentVisibility = VisibilityLevel.Ghost;
            }
            else
            {
                Color transparentcolor = Color.white;
                transparentcolor.a = (float)VisibilityLevel.Ghost / 100f;

                GhostRenderers = this.GetComponentsInChildren<Renderer>();
                for (int rendererIndex = 0; rendererIndex < GhostRenderers.Length; rendererIndex++)
                {
                    NVRHelpers.SetTransparent(GhostRenderers[rendererIndex].material, transparentcolor);
                }

                if (Colliders != null)
                {
                    GhostColliders = Colliders;
                }

                CurrentVisibility = VisibilityLevel.Ghost;
            }

            CurrentHandState = HandState.Idle;
        }
Ejemplo n.º 34
0
        private IEnumerator DoInitialize()
        {
            yield return null; //wait for children to be initialized

            Rigidbody = this.GetComponent<Rigidbody>();
            if (Rigidbody == null)
                Rigidbody = this.gameObject.AddComponent<Rigidbody>();
            Rigidbody.isKinematic = true;
            
            Transform trackhat = this.transform.FindChild("trackhat");

            Collider trackhatCollider = trackhat.GetComponent<Collider>();
            if (trackhatCollider == null)
                trackhatCollider = trackhat.gameObject.AddComponent<SphereCollider>();
            trackhatCollider.isTrigger = true;

            NVRPlayer.Instance.RegisterHand(this);

            if (NVRPlayer.Instance.PhysicalHands == true)
            {
                if (PhysicalController != null)
                {
                    PhysicalController.Kill();
                }

                PhysicalController = this.gameObject.AddComponent<NVRPhysicalController>();
                PhysicalController.Initialize(this, false);

                Color transparentcolor = Color.white;
                transparentcolor.a = (float)VisibilityLevel.Ghost / 100f;

                GhostRenderers = this.GetComponentsInChildren<Renderer>();
                for (int rendererIndex = 0; rendererIndex < GhostRenderers.Length; rendererIndex++)
                {
                    NVRHelpers.SetTransparent(GhostRenderers[rendererIndex].material, transparentcolor);
                }

                GhostColliders = new Collider[] { trackhatCollider };
                CurrentVisibility = VisibilityLevel.Ghost;
            }

            CurrentHandState = HandState.Idle;
        }
Ejemplo n.º 35
0
        private void SetVisibility(VisibilityLevel visibility)
        {
            if (CurrentVisibility != visibility)
            {
                if (visibility == VisibilityLevel.Ghost)
                {
                    PhysicalController.Off();

                    for (int index = 0; index < GhostRenderers.Length; index++)
                    {
                        GhostRenderers[index].enabled = true;
                    }
                    
                    for (int index = 0; index < GhostColliders.Length; index++)
                    {
                        GhostColliders[index].enabled = true;
                    }
                }

                if (visibility == VisibilityLevel.Visible)
                {
                    PhysicalController.On();

                    for (int index = 0; index < GhostRenderers.Length; index++)
                    {
                        GhostRenderers[index].enabled = false;
                    }

                    for (int index = 0; index < GhostColliders.Length; index++)
                    {
                        GhostColliders[index].enabled = false;
                    }
                }
            }

            CurrentVisibility = visibility;
        }