public RandomAccWeap(int damageLevel) : base(0x1ECD)
        {
            switch (damageLevel)
            {
            case 1:
                DamageLevel = WeaponDamageLevel.Ruin;
                break;

            case 2:
                DamageLevel = WeaponDamageLevel.Might;
                break;

            case 3:
                DamageLevel = WeaponDamageLevel.Force;
                break;

            case 4:
                DamageLevel = WeaponDamageLevel.Power;
                break;

            case 5:
                DamageLevel = WeaponDamageLevel.Vanq;
                break;

            default:
                DamageLevel = WeaponDamageLevel.Ruin;
                break;
            }

            Weight = 1.0;
            Name   = "Random accurate weapon of " + DamageLevel.ToString().ToLower();
            Hue    = 1960;
        }
Example #2
0
        public override void clearState()
        {
            engineDamage              = DamageLevel.NONE;
            trannyDamage              = DamageLevel.NONE;
            aeroDamage                = DamageLevel.NONE;
            maxSuspensionDamage       = DamageLevel.NONE;
            maxBrakeDamage            = DamageLevel.NONE;
            timeWhenDamageLastChanged = DateTime.MinValue;
            isMissingWheel            = false;
            damageToReportNext        = null;
            reportedDamagesLevels.Clear();
            minDamageToReport  = DamageLevel.TRIVIAL;
            nextPunctureCheck  = DateTime.UtcNow + timeToWaitForDamageToSettle;
            componentDestroyed = Component.NONE;
            orientationSamples.Clear();
            nextOrientationCheckDue = DateTime.MinValue;
            isRolling = false;
            timeOfDangerousAcceleration = DateTime.MinValue;

            timeToRecheckAfterPotentiallyDangerousAcceleration = DateTime.MaxValue;
            cancelWaitingForDriverIsOK(DriverOKResponseType.NONE);
            playedAreYouOKInThisSession                  = false;
            triggerCheckDriverIsOKForIRacingAfter        = DateTime.MaxValue;
            waitingAfterPotentiallyDangerousAcceleration = false;
            speedAfterPotentiallyDangerousAcceleration   = float.MaxValue;
        }
Example #3
0
 // used when damage level decreases
 private void resetReportedDamage(Component component, DamageLevel newDamageLevel)
 {
     if (reportedDamagesLevels.ContainsKey(component))
     {
         reportedDamagesLevels[component] = newDamageLevel;
     }
 }
Example #4
0
    // Update is called once per frame
    void Update()
    {
        float currentHP = health.currentHP;
        float maxHP     = health.maxHP;

        if (currentHP / maxHP <= 0.25f)
        {
            if (level != DamageLevel.Quarter)
            {
                level = DamageLevel.Quarter;
                SpawnFires(QuarterDamage);
            }
        }
        else if (currentHP / maxHP <= 0.5f)
        {
            if (level != DamageLevel.Half)
            {
                level = DamageLevel.Half;
                SpawnFires(HalfDamage);
            }
        }
        else if (currentHP / maxHP <= 0.755f)
        {
            if (level != DamageLevel.ThreeQuarter)
            {
                level = DamageLevel.ThreeQuarter;
                SpawnFires(ThreeQuarterDamage);
            }
        }
    }
Example #5
0
 private void addReportedDamage(Component component, DamageLevel damageLevel)
 {
     if (reportedDamagesLevels.ContainsKey(component))
     {
         reportedDamagesLevels[component] = damageLevel;
     }
     else
     {
         reportedDamagesLevels.Add(component, damageLevel);
     }
 }
Example #6
0
 private Boolean hasBeenReported(Component component, DamageLevel damageLevel)
 {
     foreach (KeyValuePair <Component, DamageLevel> componentAndDamageAlreadyReported in reportedDamagesLevels)
     {
         if (component == componentAndDamageAlreadyReported.Key && componentAndDamageAlreadyReported.Value == damageLevel)
         {
             return(true);
         }
     }
     return(false);
 }
Example #7
0
        private DamageLevel getLastReportedDamageLevel(Component component)
        {
            DamageLevel level = DamageLevel.NONE;

            if (reportedDamagesLevels.TryGetValue(component, out level))
            {
                return(level);
            }

            return(DamageLevel.NONE);
        }
        public RandomAccWeap() : base(0x1ECD)
        {
            if (DamageLevel == WeaponDamageLevel.Regular)
            {
                DamageLevel = WeaponDamageLevel.Ruin;
            }

            Weight = 1.0;
            Name   = "Random accurate weapon of " + DamageLevel.ToString().ToLower();
            Hue    = 1960;
        }
 public override void clearState()
 {
     engineDamage = DamageLevel.NONE;
     trannyDamage = DamageLevel.NONE;
     aeroDamage = DamageLevel.NONE;
     maxSuspensionDamage = DamageLevel.NONE;
     maxBrakeDamage = DamageLevel.NONE;
     timeWhenDamageLastChanged = DateTime.MinValue;
     isMissingWheel = false;
     damageToReportNext = null;
     reportedDamagesLevels.Clear();
     minDamageToReport = DamageLevel.TRIVIAL;
 }
Example #10
0
 public override void clearState()
 {
     engineDamage              = DamageLevel.NONE;
     trannyDamage              = DamageLevel.NONE;
     aeroDamage                = DamageLevel.NONE;
     maxSuspensionDamage       = DamageLevel.NONE;
     maxBrakeDamage            = DamageLevel.NONE;
     timeWhenDamageLastChanged = DateTime.MinValue;
     isMissingWheel            = false;
     damageToReportNext        = null;
     reportedDamagesLevels.Clear();
     minDamageToReport = DamageLevel.TRIVIAL;
     nextPunctureCheck = DateTime.Now + timeToWaitForDamageToSettle;
 }
    public DamageLevel AddDamageLevel(Sprite sprite = null, float damageRequired = 0.0f)
    {
        if (DamageLevels == null)
        {
            DamageLevels = new List <DamageLevel>();
        }

        var newDamageLevel = new DamageLevel(); DamageLevels.Add(newDamageLevel);

        newDamageLevel.Sprite         = sprite;
        newDamageLevel.DamageRequired = damageRequired;

        return(newDamageLevel);
    }
	public DamageLevel AddDamageLevel(Sprite sprite = null, float damageRequired = 0.0f)
	{
		if (DamageLevels == null)
		{
			DamageLevels = new List<DamageLevel>();
		}
		
		var newDamageLevel = new DamageLevel(); DamageLevels.Add(newDamageLevel);
		
		newDamageLevel.Sprite         = sprite;
		newDamageLevel.DamageRequired = damageRequired;
		
		return newDamageLevel;
	}
Example #13
0
        private bool chooseDamageLevel()
        {
            Console.WriteLine("Choose damage level ( 0 - No damage, 1 - small, 2 - medium, 3 - heavy, 4 - ship is completely destroyed)");
            var input = Console.ReadLine();
            int damageLvl;

            Int32.TryParse(input, out damageLvl);
            if (damageLvl <= (int)DamageLevel.Destroyed && damageLvl >= (int)DamageLevel.Undamaged)
            {
                damageLevel = new DamageLevel();
                damageLevel = (DamageLevel)damageLvl;
            }
            else
            {
                Console.WriteLine("Wrong input. Try Again");
                return(false);
            }
            return(true);
        }
Example #14
0
    private void healthChanged()
    {
        if (DamageAble.HP <= 2)
        {
            DamageLevel = DamageLevel.BROKEN;
        }
        else if (DamageAble.HP <= 6)
        {
            DamageLevel = DamageLevel.DAMAGED;
        }
        else
        {
            DamageLevel = DamageLevel.OK;
        }

        if (DamageLevel != DamageLevel.OK)
        {
            UnMountModule();
        }
    }
    private void UpdateDamageLevels()
    {
        if (DamageLevels == null)
        {
            DamageLevels = new List <DamageLevel>();
        }

        // Copy default damage level from SpriteRenderer?
        if (DamageLevels.Count == 0)
        {
            if (spriteRenderer == null)
            {
                spriteRenderer = GetComponent <SpriteRenderer>();
            }

            if (spriteRenderer.sprite != null)
            {
                var newDamageLevel = new DamageLevel(); DamageLevels.Add(newDamageLevel);

                newDamageLevel.Sprite = spriteRenderer.sprite;
            }
        }
    }
 private Boolean hasBeenReported(Component component, DamageLevel damageLevel)
 {
     foreach (KeyValuePair<Component, DamageLevel> componentAndDamageAlreadyReported in reportedDamagesLevels)
     {
         if (component == componentAndDamageAlreadyReported.Key && componentAndDamageAlreadyReported.Value == damageLevel)
         {
             return true;
         }
     }
     return false;
 }
        protected override void triggerInternal(GameStateData previousGameState, GameStateData currentGameState)
        {
            if (currentGameState.CarDamageData.DamageEnabled)
            {
                aeroDamage = currentGameState.CarDamageData.OverallAeroDamage;
                trannyDamage = currentGameState.CarDamageData.OverallTransmissionDamage;
                engineDamage = currentGameState.CarDamageData.OverallEngineDamage;
                if (enableBrakeDamageMessages)
                {
                    if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                    {
                        maxBrakeDamage = DamageLevel.DESTROYED;
                    }
                    else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                    {
                        maxBrakeDamage = DamageLevel.MAJOR;
                    }
                    else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                    {
                        maxBrakeDamage = DamageLevel.MINOR;
                    }
                    else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                    {
                        maxBrakeDamage = DamageLevel.TRIVIAL;
                    }
                }

                if (enableSuspensionDamageMessages)
                {
                    if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                    {
                        maxSuspensionDamage = DamageLevel.DESTROYED;
                    }
                    else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                    {
                        maxSuspensionDamage = DamageLevel.MAJOR;
                    }
                    else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                    {
                        maxSuspensionDamage = DamageLevel.MINOR;
                    }
                    else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                    {
                        maxSuspensionDamage = DamageLevel.TRIVIAL;
                    }
                    isMissingWheel = !currentGameState.PitData.InPitlane && (!currentGameState.TyreData.LeftFrontAttached || !currentGameState.TyreData.RightFrontAttached ||
                            !currentGameState.TyreData.LeftRearAttached || !currentGameState.TyreData.RightRearAttached);
                }

                if (engineDamage < getLastReportedDamageLevel(Component.ENGINE))
                {
                    resetReportedDamage(Component.ENGINE, engineDamage);
                }
                if (trannyDamage < getLastReportedDamageLevel(Component.TRANNY))
                {
                    resetReportedDamage(Component.TRANNY, trannyDamage);
                }
                if (maxSuspensionDamage < getLastReportedDamageLevel(Component.SUSPENSION))
                {
                    resetReportedDamage(Component.SUSPENSION, maxSuspensionDamage);
                }
                if (maxBrakeDamage < getLastReportedDamageLevel(Component.BRAKES))
                {
                    resetReportedDamage(Component.BRAKES, maxBrakeDamage);
                }
                if (aeroDamage < getLastReportedDamageLevel(Component.AERO))
                {
                    resetReportedDamage(Component.AERO, aeroDamage);
                }

                minDamageToReport = (DamageLevel)Math.Max((int)engineDamage, Math.Max((int)trannyDamage, Math.Max((int)maxSuspensionDamage, Math.Max((int)maxBrakeDamage, (int) aeroDamage))));

                Tuple<Component, DamageLevel> worstUnreportedDamage = getWorstUnreportedDamage();
                if (worstUnreportedDamage != null && worstUnreportedDamage.Item2 >= minDamageToReport)
                {
                    if (damageToReportNext == null || worstUnreportedDamage.Item1 != damageToReportNext.Item1 || worstUnreportedDamage.Item2 != damageToReportNext.Item2)
                    {
                        timeWhenDamageLastChanged = currentGameState.Now;
                        damageToReportNext = worstUnreportedDamage;
                    }
                    else if (timeWhenDamageLastChanged.Add(timeToWaitForDamageToSettle) < currentGameState.Now)
                    {
                        Console.WriteLine("reporting ...");
                        Console.WriteLine(damageToReportNext.Item1 + ", " + damageToReportNext.Item2);
                        if (reportedDamagesLevels.ContainsKey(damageToReportNext.Item1))
                        {
                            reportedDamagesLevels[damageToReportNext.Item1] = damageToReportNext.Item2;
                        }
                        else
                        {
                            reportedDamagesLevels.Add(damageToReportNext.Item1, damageToReportNext.Item2);
                        }
                        if (enableDamageMessages)
                        {
                            playDamageToReport();
                        }
                    }
                }
            }
        }
Example #18
0
 /// <summary>
 /// Set the damage status of a particular vehicle panel
 /// </summary>
 public bool SetPanelDamage(Panel panel, DamageLevel damage)
 {
     return(MtaShared.SetVehiclePanelState(element, (int)panel, (int)damage));
 }
Example #19
0
 public override MaterialsSet CountRepairMaterials(DamageLevel damageLevel)
 {
     return(repair.FerryRepairMaterials(damageLevel));
 }
Example #20
0
        public void InvalidateDamageState(Mobile from)
        {
            if (Durability >= 100)
                m_DamageState = DamageLevel.Pristine;
            else if (Durability >= 75.0)
                m_DamageState = DamageLevel.Slightly;
            else if (Durability >= 50.0)
                m_DamageState = DamageLevel.Moderately;
            else if (Durability >= 25.0)
                m_DamageState = DamageLevel.Heavily;
            else
                m_DamageState = DamageLevel.Severely;

            if (Durability <= 0)
            {
                DoAreaMessage(1116297, 5, null); //The ship cannon has been destroyed!
                Delete();

                if (from != null && from.InRange(this.Location, 5))
                    from.SendLocalizedMessage(1116297); //The ship cannon has been destroyed!
            }

            InvalidateProperties();
        }
Example #21
0
 public BaseCannon(BaseGalleon galleon)
 {
     Movable = false;
     m_Cleaned = true;
     m_Charged = false;
     m_Primed = false;
     m_Galleon = galleon;
     m_AmmoType = AmmoType.Empty;
     m_Hits = MaxHits;
     m_DamageState = DamageLevel.Pristine;
 }
Example #22
0
        //INotificationStrategy notificationStrategy;
        //IRepairStrategy repairStrategy;


        //public RepairDock(INotificationStrategy notifStr, IRepairStrategy repStr)
        //{
        //    notificationStrategy = notifStr;
        //    repairStrategy = repStr;
        //}

        public abstract int CountRepairTime(DamageLevel damageLevel);
Example #23
0
        override protected void triggerInternal(GameStateData previousGameState, GameStateData currentGameState)
        {
            // if we've crashed hard and are waiting for the player to say they're OK, don't process anything else in this event:
            if (waitingForDriverIsOKResponse)
            {
                if (timeWhenAskedIfDriverIsOK.Add(TimeSpan.FromSeconds(8)) < currentGameState.Now)
                {
                    timeWhenAskedIfDriverIsOK = currentGameState.Now;
                    if (driverIsOKRequestCount == 1)
                    {
                        audioPlayer.playMessageImmediately(new QueuedMessage(folderAreYouOKSecondTry, 0, type: SoundType.CRITICAL_MESSAGE, priority: 15));
                        driverIsOKRequestCount = 2;
                    }
                    else if (driverIsOKRequestCount == 2)
                    {
                        // no response after 3 requests, he's dead, jim.
                        audioPlayer.playMessageImmediately(new QueuedMessage(folderAreYouOKThirdTry, 0, type: SoundType.CRITICAL_MESSAGE, priority: 15));
                        cancelWaitingForDriverIsOK(DriverOKResponseType.NONE);
                    }
                }
                return;
            }

            if (waitingAfterPotentiallyDangerousAcceleration)
            {
                if (currentGameState.PositionAndMotionData.CarSpeed > speedAfterPotentiallyDangerousAcceleration + 5)
                {
                    Console.WriteLine("Car has accelerated, cancelling wait for crash message");
                    waitingAfterPotentiallyDangerousAcceleration       = false;
                    timeToRecheckAfterPotentiallyDangerousAcceleration = DateTime.MaxValue;
                }
                else if (timeToRecheckAfterPotentiallyDangerousAcceleration > currentGameState.Now)
                {
                    waitingAfterPotentiallyDangerousAcceleration       = false;
                    timeToRecheckAfterPotentiallyDangerousAcceleration = DateTime.MaxValue;
                    timeOfDangerousAcceleration = currentGameState.Now;
                    // special case for iRacing: no damage data so we can't hang this off 'destroyed' components
                    triggerCheckDriverIsOKForIRacingAfter = currentGameState.Now.Add(TimeSpan.FromSeconds(2));
                }
                else
                {
                    // suspend the rest of this event
                    return;
                }
            }

            // need to be careful with interval here.
            // Disable these for iRacing, which has some spikes in car speed data that trigger false positives
            if (CrewChief.gameDefinition.gameEnum != GameEnum.IRACING &&
                enableCrashMessages && !playedAreYouOKInThisSession && !currentGameState.PitData.InPitlane &&
                currentGameState.PositionAndMotionData.CarSpeed > 0.001)
            {
                if (previousGameState != null)
                {
                    double interval = (currentGameState.Now - previousGameState.Now).TotalSeconds;
                    if (interval > 0.01)
                    {
                        double calculatedAcceleration = Math.Abs(currentGameState.PositionAndMotionData.CarSpeed - previousGameState.PositionAndMotionData.CarSpeed) / interval;

                        /*Console.WriteLine("Interval = " + interval +
                         *  " Current speed = " + currentGameState.PositionAndMotionData.CarSpeed +
                         *      " previous speed = " + previousGameState.PositionAndMotionData.CarSpeed + " acceleration = " + calculatedAcceleration / 9.8f + "g");*/

                        // if we're subject to > 40G (400m/s2), this is considered dangerous. If we've stopped (or nearly stopped) immediately
                        // after the impact, assume it's a bad 'un. If we're still moving after the impact, track the speed for 3 seconds and
                        // if it doesn't increase in that time, we can assume it's a bad 'un
                        if (calculatedAcceleration > 400)
                        {
                            Console.WriteLine("Massive impact. Current speed = " + currentGameState.PositionAndMotionData.CarSpeed.ToString("0.000") +
                                              " previous speed = " + previousGameState.PositionAndMotionData.CarSpeed.ToString("0.000") + " acceleration = " + (calculatedAcceleration / 9.8f).ToString("0.0000") + "g");
                            if (currentGameState.PositionAndMotionData.CarSpeed < 3)
                            {
                                timeOfDangerousAcceleration = currentGameState.Now;
                                // special case for iRacing: no damage data so we can't hang this off 'destroyed' components
                                triggerCheckDriverIsOKForIRacingAfter = currentGameState.Now.Add(TimeSpan.FromSeconds(4));
                            }
                            else
                            {
                                // massive acceleration but we're still moving
                                timeToRecheckAfterPotentiallyDangerousAcceleration = currentGameState.Now.Add(TimeSpan.FromSeconds(3));
                                waitingAfterPotentiallyDangerousAcceleration       = true;
                                speedAfterPotentiallyDangerousAcceleration         = currentGameState.PositionAndMotionData.CarSpeed;
                            }
                        }
                    }
                }
            }

            Boolean orientationSamplesFull = orientationSamples.Count > orientationSamplesCount;

            if (orientationSamplesFull)
            {
                orientationSamples.RemoveFirst();
            }
            orientationSamples.AddLast(currentGameState.PositionAndMotionData.Orientation);

            // don't check for rolling if we've just had a dangerous acceleration as we don't want both messages to trigger
            if (enableCrashMessages && currentGameState.Now > nextOrientationCheckDue && orientationSamplesFull &&
                currentGameState.Now.Subtract(timeOfDangerousAcceleration) > TimeSpan.FromSeconds(10))
            {
                nextOrientationCheckDue = currentGameState.Now.Add(orientationCheckEvery);
                checkOrientation(currentGameState.PositionAndMotionData.CarSpeed);
            }

            if (currentGameState.CarDamageData.DamageEnabled && currentGameState.SessionData.SessionRunningTime > 10 && currentGameState.Now > nextPunctureCheck)
            {
                nextPunctureCheck = currentGameState.Now + timeToWaitForDamageToSettle;
                CornerData.Corners puncture = getPuncture(currentGameState.TyreData);
                if (puncture != lastReportedPunctureCorner)
                {
                    lastReportedPunctureCorner = puncture;
                    switch (puncture)
                    {
                    case CornerData.Corners.FRONT_LEFT:
                        audioPlayer.playMessage(new QueuedMessage(folderLeftFrontPuncture, 0, abstractEvent: this, priority: 10));
                        break;

                    case CornerData.Corners.FRONT_RIGHT:
                        audioPlayer.playMessage(new QueuedMessage(folderRightFrontPuncture, 0, abstractEvent: this, priority: 10));
                        break;

                    case CornerData.Corners.REAR_LEFT:
                        audioPlayer.playMessage(new QueuedMessage(folderLeftRearPuncture, 0, abstractEvent: this, priority: 10));
                        break;

                    case CornerData.Corners.REAR_RIGHT:
                        audioPlayer.playMessage(new QueuedMessage(folderRightRearPuncture, 0, abstractEvent: this, priority: 10));
                        break;
                    }
                }
            }
            if (currentGameState.CarDamageData.DamageEnabled)
            {
                aeroDamage   = currentGameState.CarDamageData.OverallAeroDamage;
                trannyDamage = currentGameState.CarDamageData.OverallTransmissionDamage;
                engineDamage = currentGameState.CarDamageData.OverallEngineDamage;
                if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                {
                    maxBrakeDamage     = DamageLevel.DESTROYED;
                    componentDestroyed = Component.BRAKES;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                {
                    maxBrakeDamage = DamageLevel.MAJOR;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                {
                    maxBrakeDamage = DamageLevel.MINOR;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                {
                    maxBrakeDamage = DamageLevel.TRIVIAL;
                }
                else
                {
                    maxBrakeDamage = DamageLevel.NONE;
                }

                if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                {
                    maxSuspensionDamage = DamageLevel.DESTROYED;
                    componentDestroyed  = Component.SUSPENSION;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                {
                    maxSuspensionDamage = DamageLevel.MAJOR;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                {
                    maxSuspensionDamage = DamageLevel.MINOR;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                {
                    maxSuspensionDamage = DamageLevel.TRIVIAL;
                }
                else
                {
                    maxSuspensionDamage = DamageLevel.NONE;
                }
                isMissingWheel = !currentGameState.PitData.InPitlane && (!currentGameState.TyreData.LeftFrontAttached || !currentGameState.TyreData.RightFrontAttached ||
                                                                         !currentGameState.TyreData.LeftRearAttached || !currentGameState.TyreData.RightRearAttached);

                if (engineDamage < getLastReportedDamageLevel(Component.ENGINE))
                {
                    resetReportedDamage(Component.ENGINE, engineDamage);
                }
                if (trannyDamage < getLastReportedDamageLevel(Component.TRANNY))
                {
                    resetReportedDamage(Component.TRANNY, trannyDamage);
                }
                if (maxSuspensionDamage < getLastReportedDamageLevel(Component.SUSPENSION))
                {
                    resetReportedDamage(Component.SUSPENSION, maxSuspensionDamage);
                }
                if (maxBrakeDamage < getLastReportedDamageLevel(Component.BRAKES))
                {
                    resetReportedDamage(Component.BRAKES, maxBrakeDamage);
                }
                if (aeroDamage < getLastReportedDamageLevel(Component.AERO))
                {
                    resetReportedDamage(Component.AERO, aeroDamage);
                }

                minDamageToReport = (DamageLevel)Math.Max((int)engineDamage, Math.Max((int)trannyDamage, Math.Max((int)maxSuspensionDamage, Math.Max((int)maxBrakeDamage, (int)aeroDamage))));

                Tuple <Component, DamageLevel> worstUnreportedDamage = getWorstUnreportedDamage();
                if (worstUnreportedDamage != null && worstUnreportedDamage.Item2 >= minDamageToReport)
                {
                    if (damageToReportNext == null || worstUnreportedDamage.Item1 != damageToReportNext.Item1 || worstUnreportedDamage.Item2 != damageToReportNext.Item2)
                    {
                        timeWhenDamageLastChanged = currentGameState.Now;
                        damageToReportNext        = worstUnreportedDamage;
                    }
                    else if (timeWhenDamageLastChanged.Add(timeToWaitForDamageToSettle) < currentGameState.Now)
                    {
                        Console.WriteLine("Reporting ...");
                        Console.WriteLine(damageToReportNext.Item1 + ", " + damageToReportNext.Item2);

                        // put *all* the damage levels in the 'reported' set, even though we haven't actually reported them.
                        // This ensure we only ever play the worst damage on the car when damage has just increased
                        // Only do this if the component damage is *less* than the one we just reported
                        if (Component.AERO == damageToReportNext.Item1 || aeroDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.AERO, aeroDamage);
                        }
                        if (Component.BRAKES == damageToReportNext.Item1 || maxBrakeDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.BRAKES, maxBrakeDamage);
                        }
                        if (Component.ENGINE == damageToReportNext.Item1 || engineDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.ENGINE, engineDamage);
                        }
                        if (Component.SUSPENSION == damageToReportNext.Item1 || maxSuspensionDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.SUSPENSION, maxSuspensionDamage);
                        }
                        if (Component.TRANNY == damageToReportNext.Item1 || trannyDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.TRANNY, trannyDamage);
                        }
                        if (enableDamageMessages)
                        {
                            playDamageToReport(currentGameState.SessionData.SessionType == SessionType.Race && currentGameState.SessionData.NumCarsOverall > 2, currentGameState.Now);
                        }
                    }
                }
            }
            else if (CrewChief.gameDefinition.gameEnum == GameEnum.IRACING && currentGameState.Now > triggerCheckDriverIsOKForIRacingAfter)
            {
                triggerCheckDriverIsOKForIRacingAfter = DateTime.MaxValue;
                checkIfDriverIsOK(currentGameState.Now);
            }
        }
Example #24
0
        public BaseGalleon(Direction direction) : base(direction, false)
        {
            m_Hits = MaxHits;
            m_DamageTaken = DamageLevel.Pristine;
            m_BaseBoatHue = 0;

            AddMooringLines(direction);
            AddCannonTiles(direction);
            AddHoldTiles(direction);

            AddGalleonPilotAndWheel(direction);
            Timer.DelayCall(TimeSpan.FromSeconds(2), new TimerCallback(MarkRunes));
        }
Example #25
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            switch (version)
            {
                case 3:
                case 2:
                    m_Pole = reader.ReadItem() as BindingPole;
                    m_CapturedCaptain = reader.ReadMobile();
                    goto case 1;
                case 1:
                    m_BaseBoatHue = reader.ReadInt();
                    goto case 0;
                case 0:
                    m_GalleonPilot = reader.ReadMobile();
                    m_Hits = reader.ReadInt();
                    m_Wheel = reader.ReadItem() as ShipWheel;
                    m_GalleonHold = reader.ReadItem() as GalleonHold;

                    if (version < 3)
                    {
                        reader.ReadItem();
                        reader.ReadItem();
                    }

                    m_DamageTaken = (DamageLevel)reader.ReadInt();

                    m_BasePaintHue = reader.ReadInt();
                    m_PaintCoats = reader.ReadInt();
                    m_NextPaintDecay = reader.ReadDateTime();

                    m_SecurityEntry = new SecurityEntry(this, reader);

                    int count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        Static tile = reader.ReadItem() as Static;
                        if (tile != null && !tile.Deleted)
                            AddCannonTile(tile);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        Item cannon = reader.ReadItem();
                        if (cannon != null && !cannon.Deleted)
                            m_Cannons.Add(cannon);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        Static filler = reader.ReadItem() as Static;
                        if (filler != null && !filler.Deleted)
                            AddFillerTile(filler);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        MooringLine line = reader.ReadItem() as MooringLine;
                        if (line != null && !line.Deleted)
                            AddMooringLine(line);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        HoldItem hItem = reader.ReadItem() as HoldItem;
                        if (hItem != null && !hItem.Deleted)
                            AddHoldTile(hItem);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        Item addon = reader.ReadItem();
                        if (addon != null && !addon.Deleted)
                            AddAddon(addon);
                    }

                    count = reader.ReadInt();
                    for (int i = 0; i < count; i++)
                    {
                        Static atile = reader.ReadItem() as Static;
                        if (atile != null && !atile.Deleted)
                            AddAddonTile(atile);
                    }

                    break;
            }

            if (m_Pole != null)
                m_Pole.Galleon = this;
        }
 // used when damage level decreases
 private void resetReportedDamage(Component component, DamageLevel newDamageLevel)
 {
     if (reportedDamagesLevels.ContainsKey(component))
     {
         reportedDamagesLevels[component] = newDamageLevel;
     }
 }
Example #27
0
 public abstract MaterialsSet CountRepairMaterials(DamageLevel damageLevel);
Example #28
0
 public Spell(string name, string championName, SpellSlot spellslot, float range, float width,
     double speed, double delay, Spelltype spelltype, DamageLevel damagelvl, CCtype cctype, bool collision)
 {
     ChampionName = championName;
     Spellslot = spellslot;
     Name = name;
     Range = range;
     Width = width;
     Speed = speed;
     Delay = delay;
     SpellType = spelltype;
     Damagelvl = damagelvl;
     CcType = cctype;
     Collision = collision;
 }
Example #29
0
 public override int CountRepairTime(DamageLevel damageLevel)
 {
     return(repair.FerryRepairTime(damageLevel));
 }
	private void UpdateDamageLevels()
	{
		if (DamageLevels == null)
		{
			DamageLevels = new List<DamageLevel>();
		}
		
		// Copy default damage level from SpriteRenderer?
		if (DamageLevels.Count == 0)
		{
			if (spriteRenderer == null) spriteRenderer = GetComponent<SpriteRenderer>();
			
			if (spriteRenderer.sprite != null)
			{
				var newDamageLevel = new DamageLevel(); DamageLevels.Add(newDamageLevel);
				
				newDamageLevel.Sprite = spriteRenderer.sprite;
			}
		}
	}
Example #31
0
 private void addReportedDamage(Component component, DamageLevel damageLevel)
 {
     reportedDamagesLevels[component] = damageLevel;
 }
Example #32
0
        override protected void triggerInternal(GameStateData previousGameState, GameStateData currentGameState)
        {
            if (currentGameState.CarDamageData.DamageEnabled && currentGameState.SessionData.SessionRunningTime > 10 && currentGameState.Now > nextPunctureCheck)
            {
                nextPunctureCheck = currentGameState.Now + timeToWaitForDamageToSettle;
                CornerData.Corners puncture = getPuncture(currentGameState.TyreData);
                if (puncture != lastReportedPunctureCorner)
                {
                    lastReportedPunctureCorner = puncture;
                    switch (puncture)
                    {
                    case CornerData.Corners.FRONT_LEFT:
                        audioPlayer.playMessage(new QueuedMessage(folderLeftFrontPuncture, 0, this));
                        break;

                    case CornerData.Corners.FRONT_RIGHT:
                        audioPlayer.playMessage(new QueuedMessage(folderRightFrontPuncture, 0, this));
                        break;

                    case CornerData.Corners.REAR_LEFT:
                        audioPlayer.playMessage(new QueuedMessage(folderLeftRearPuncture, 0, this));
                        break;

                    case CornerData.Corners.REAR_RIGHT:
                        audioPlayer.playMessage(new QueuedMessage(folderRightRearPuncture, 0, this));
                        break;
                    }
                }
            }
            if (currentGameState.CarDamageData.DamageEnabled)
            {
                aeroDamage   = currentGameState.CarDamageData.OverallAeroDamage;
                trannyDamage = currentGameState.CarDamageData.OverallTransmissionDamage;
                engineDamage = currentGameState.CarDamageData.OverallEngineDamage;
                if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                {
                    maxBrakeDamage = DamageLevel.DESTROYED;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                {
                    maxBrakeDamage = DamageLevel.MAJOR;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                {
                    maxBrakeDamage = DamageLevel.MINOR;
                }
                else if (currentGameState.CarDamageData.BrakeDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                {
                    maxBrakeDamage = DamageLevel.TRIVIAL;
                }

                if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.DESTROYED))
                {
                    maxSuspensionDamage = DamageLevel.DESTROYED;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MAJOR))
                {
                    maxSuspensionDamage = DamageLevel.MAJOR;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.MINOR))
                {
                    maxSuspensionDamage = DamageLevel.MINOR;
                }
                else if (currentGameState.CarDamageData.SuspensionDamageStatus.hasValueAtLevel(DamageLevel.TRIVIAL))
                {
                    maxSuspensionDamage = DamageLevel.TRIVIAL;
                }
                isMissingWheel = !currentGameState.PitData.InPitlane && (!currentGameState.TyreData.LeftFrontAttached || !currentGameState.TyreData.RightFrontAttached ||
                                                                         !currentGameState.TyreData.LeftRearAttached || !currentGameState.TyreData.RightRearAttached);

                if (engineDamage < getLastReportedDamageLevel(Component.ENGINE))
                {
                    resetReportedDamage(Component.ENGINE, engineDamage);
                }
                if (trannyDamage < getLastReportedDamageLevel(Component.TRANNY))
                {
                    resetReportedDamage(Component.TRANNY, trannyDamage);
                }
                if (maxSuspensionDamage < getLastReportedDamageLevel(Component.SUSPENSION))
                {
                    resetReportedDamage(Component.SUSPENSION, maxSuspensionDamage);
                }
                if (maxBrakeDamage < getLastReportedDamageLevel(Component.BRAKES))
                {
                    resetReportedDamage(Component.BRAKES, maxBrakeDamage);
                }
                if (aeroDamage < getLastReportedDamageLevel(Component.AERO))
                {
                    resetReportedDamage(Component.AERO, aeroDamage);
                }

                minDamageToReport = (DamageLevel)Math.Max((int)engineDamage, Math.Max((int)trannyDamage, Math.Max((int)maxSuspensionDamage, Math.Max((int)maxBrakeDamage, (int)aeroDamage))));

                Tuple <Component, DamageLevel> worstUnreportedDamage = getWorstUnreportedDamage();
                if (worstUnreportedDamage != null && worstUnreportedDamage.Item2 >= minDamageToReport)
                {
                    if (damageToReportNext == null || worstUnreportedDamage.Item1 != damageToReportNext.Item1 || worstUnreportedDamage.Item2 != damageToReportNext.Item2)
                    {
                        timeWhenDamageLastChanged = currentGameState.Now;
                        damageToReportNext        = worstUnreportedDamage;
                    }
                    else if (timeWhenDamageLastChanged.Add(timeToWaitForDamageToSettle) < currentGameState.Now)
                    {
                        Console.WriteLine("reporting ...");
                        Console.WriteLine(damageToReportNext.Item1 + ", " + damageToReportNext.Item2);

                        // put *all* the damage levels in the 'reported' set, even though we haven't actually reported them.
                        // This ensure we only ever play the worst damage on the car when damage has just increased
                        // Only do this if the component damage is *less* than the one we just reported
                        if (Component.AERO == damageToReportNext.Item1 || aeroDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.AERO, aeroDamage);
                        }
                        if (Component.BRAKES == damageToReportNext.Item1 || maxBrakeDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.BRAKES, maxBrakeDamage);
                        }
                        if (Component.ENGINE == damageToReportNext.Item1 || engineDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.ENGINE, engineDamage);
                        }
                        if (Component.SUSPENSION == damageToReportNext.Item1 || maxSuspensionDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.SUSPENSION, maxSuspensionDamage);
                        }
                        if (Component.TRANNY == damageToReportNext.Item1 || trannyDamage < damageToReportNext.Item2)
                        {
                            addReportedDamage(Component.TRANNY, trannyDamage);
                        }
                        if (enableDamageMessages)
                        {
                            playDamageToReport();
                        }
                    }
                }
            }
        }