コード例 #1
0
        //EvalChargeState
        private void EvalChargeState()
        {
            if (_chargeCurrent > MaximumChargeCurrent)             // chargeCurrent > 500.00 mA
            {
                _usbCharger.StopCharge();
                _chargerState = ChargerState.OverCurrentFail;                  // 3
            }
            else if (_chargeCurrent <= MaximumChargeCurrent &&
                     _chargeCurrent > MinimumChargeCurrent)               // 500 mA > chargecurrent > 5 mA
            {
                _chargerState = ChargerState.IsCharging;                  //1
            }
            else if (_chargeCurrent > ZeroChargeCurrent &&
                     _chargeCurrent <= MinimumChargeCurrent)               // Fully charged  5 mA > chargeCurrent > 0 mA
            {
                _chargerState = ChargerState.FullyCharged;                 // 2
            }
            else
            {
                if (_chargerState == ChargerState.OverCurrentFail)
                {
                    return;
                }

                _chargerState = ChargerState.Idle;                  // 0
            }

            ReadChargerState = (int)_chargerState;
        }
コード例 #2
0
        private void UpdateDisplay()
        {
            if (_latestState == _chargerState)
            {
                return;
            }
            switch (_chargerState)
            {
            case ChargerState.OverCurrentFail:                       //State charge fail
                _display.UpdateChargeMsg("Current failed");
                _latestState = ChargerState.OverCurrentFail;
                break;

            case ChargerState.FullyCharged:
                _display.UpdateChargeMsg("Fully Charged");
                _latestState = ChargerState.FullyCharged;
                break;

            case ChargerState.IsCharging:
                _display.UpdateChargeMsg("Is Charging");
                _latestState = ChargerState.IsCharging;
                break;

            case ChargerState.Idle:
                _display.UpdateChargeMsg("Idle");
                _latestState = ChargerState.Idle;
                break;

            default:
                break;
            }
        }
コード例 #3
0
        // OnChargeCurrentUpdate Helper Functions
        private void EvaluateChargerState()
        {
            if (_chargingCurrent > MaxChargingCurrent)
            {
                _usbCharger.StopCharge();
                _chargerState = ChargerState.OverCurrentFail;
            }
            else if (_chargingCurrent <= MaxChargingCurrent &&
                     _chargingCurrent > MinChargingCurrent)
            {
                _chargerState = ChargerState.IsCharging;
            }
            else if (_chargingCurrent <= MinChargingCurrent &&
                     _chargingCurrent > ZeroChargingCurrent)
            {
                _chargerState = ChargerState.TrickleChargeFullyCharged;
            }
            else
            {
                // Persist OverCurrent State Message in Display
                // until manually reset is performed by invoking StartCharge()
                if (_chargerState == ChargerState.OverCurrentFail)
                {
                    return;
                }

                _chargerState = ChargerState.Idle;
            }
            ReadChargerState = (int)_chargerState;
        }
コード例 #4
0
        protected override void OnPollDataReceived(int pollID, byte i2cAddress, byte register, int[] values, object data)
        {
            if (values == null)
            {
                return;
            }
            int value = values[0];

            switch (register)
            {
            case I2CRegisters.ChargerAState:
                ChargerState x = GetChargerStatus((byte)value);
                if (chargerAState == x)
                {
                    return;
                }
                chargerAState = x;
                OnNotifyPropertyChanged("ChargerAState");
                break;

            case I2CRegisters.ChargerBState:
                x = GetChargerStatus((byte)value);
                if (chargerBState == x)
                {
                    return;
                }
                chargerBState = x;
                OnNotifyPropertyChanged("ChargerBState");
                break;
            }
        }
コード例 #5
0
 public void ControllChager()
 {
     if (chargerState == ChargerState.isEmpty)
     {
         chargerState = ChargerState.isCharging;
         StartCoroutine(ChargeUp());
     }
     else if (chargerState == ChargerState.isCharging)
     {
         chargerState = ChargerState.isEmpty;
         RetriveBattery();
     }
 }
コード例 #6
0
    IEnumerator ChargeUp()
    {
        // find the battery with min volume
        float lastComparedVolume = 1000f;

        for (int i = 0; i < batteryManager.batteries.Length; i++)
        {
            if (batteryManager.batteries[i].state == BatteryManager.BatteryState.Equipped && batteryManager.batteries[i].currentBatteryVolume < lastComparedVolume)
            {
                batteryIndex       = i;
                lastComparedVolume = batteryManager.batteries[i].currentBatteryVolume;
            }
        }

        if (batteryManager.batteries[batteryIndex].state == BatteryManager.BatteryState.Equipped)
        {
            // set charger active and ligth intensity
            batteryGraphics.gameObject.SetActive(true);
            batteryGraphics.gameObject.GetComponent <Light>().intensity = Mathf.Lerp(minLightIntensity, maxLightIntensity, batteryManager.batteries[batteryIndex].currentBatteryVolume / 100);

            // set battery of gun inactive
            batteryManager.batteries[batteryIndex].batteryT.gameObject.SetActive(false);
            batteryManager.batteries[batteryIndex].state = BatteryManager.BatteryState.Charging;

            while (chargerState == ChargerState.isCharging)
            {
                // keep charging!
                batteryManager.batteries[batteryIndex].currentBatteryVolume += 100 * Time.deltaTime / timeToFullVolume;

                if (batteryManager.batteries[batteryIndex].currentBatteryVolume >= 100f)
                {
                    batteryManager.batteries[batteryIndex].currentBatteryVolume = 100f;

                    print("FullyCharged: " + batteryIndex);
                }
                else
                {
                    player.powerRemaining -= 100 * Time.deltaTime / timeToFullVolume;
                }
                yield return(null);
            }
        }
        else
        {
            chargerState = ChargerState.isEmpty;
        }
    }
コード例 #7
0
        public ChargerMutantEnemy(LevelState parentWorld, Vector2 position)
        {
            this.position = position;
            dimensions    = new Vector2(32f, 96.0f);
            velocity      = Vector2.Zero;

            disable_movement      = false;
            disable_movement_time = 0.0f;
            windup_timer          = 0.0f;
            knockback_magnitude   = 8.0f;
            enemy_damage          = 15;
            enemy_life            = 20;
            enemy_found           = false;
            change_direction_time = 0.0f;
            range_distance        = 300.0f;
            charge_timer          = 0.0f;
            alert_timer           = 0.0f;
            range_distance        = 600f;
            sound_timer           = 0.0f;
            play_sound            = true;

            prob_item_drop    = 0.6;
            number_drop_items = 5;

            entity_found = null;
            state        = ChargerState.search;
            enemy_type   = EnemyType.Prisoner;
            component    = new IdleSearch();

            sound_alert = false;

            direction_facing = (GlobalGameConstants.Direction)(Game1.rand.Next() % 4);

            this.parentWorld = parentWorld;

            directionAnims = new AnimationLib.SpineAnimationSet[4];
            directionAnims[(int)GlobalGameConstants.Direction.Up]   = AnimationLib.loadNewAnimationSet("chargerUp");
            directionAnims[(int)GlobalGameConstants.Direction.Down] = AnimationLib.loadNewAnimationSet("chargerDown");
            directionAnims[(int)GlobalGameConstants.Direction.Left] = AnimationLib.loadNewAnimationSet("chargerRight");
            directionAnims[(int)GlobalGameConstants.Direction.Left].Skeleton.FlipX = true;
            directionAnims[(int)GlobalGameConstants.Direction.Right] = AnimationLib.loadNewAnimationSet("chargerRight");
            for (int i = 0; i < 4; i++)
            {
                directionAnims[i].Animation = directionAnims[i].Skeleton.Data.FindAnimation("idle");
            }
        }
コード例 #8
0
        private void UpdateDisplay()
        {
            if (_lastState == _chargerState)
            {
                // If state is the same, then don't update display,
                // but update progressbar if charging device

                // Progressbar
                if (_chargerState == ChargerState.IsCharging)
                {
                    var progress = (((500 - (int)ReadChargingCurrent) * 100) / 495);
                    Console.Write("\rProgress: {0} %", progress);
                }
                return;
            }
            switch (_chargerState)
            {
            case ChargerState.OverCurrentFail:
                _display.OverCurrentFail();
                _lastState = ChargerState.OverCurrentFail;
                break;

            case ChargerState.TrickleChargeFullyCharged:
                _display.FullyCharged();
                _lastState = ChargerState.TrickleChargeFullyCharged;
                break;

            case ChargerState.IsCharging:
                _display.IsCharging();
                _lastState = ChargerState.IsCharging;
                break;

            case ChargerState.Idle:
                _display.NotCharging();
                _lastState = ChargerState.Idle;
                break;

            //DotCoverIgnore
            default:
                // Not Possible
                break;
                //EndDotCoverIgnore
            }
        }
コード例 #9
0
        protected override void OnPollDataReceived(int pollID, byte i2cAddress, byte register, int[] values, object data)
        {
            if (values == null) return;
            int value = values[0];
            switch (register)
            {
                case I2CRegisters.ChargerAState:
                    ChargerState x = GetChargerStatus((byte)value);
                    if (chargerAState == x) return;
                    chargerAState = x;
                    OnNotifyPropertyChanged("ChargerAState");
                    break;

                case I2CRegisters.ChargerBState:
                    x = GetChargerStatus((byte)value);
                    if (chargerBState == x) return;
                    chargerBState = x;
                    OnNotifyPropertyChanged("ChargerBState");
                    break;
            }
        }
コード例 #10
0
 public void StopCharge()
 {
     _chargerState = ChargerState.Idle;
     _usbCharger.StopCharge();
 }
コード例 #11
0
        public override void update(GameTime currentTime)
        {
            animation_time += currentTime.ElapsedGameTime.Milliseconds / 1000f;
            sound_timer    += currentTime.ElapsedGameTime.Milliseconds;

            if (sound_timer > 250f)
            {
                play_sound = true;
            }

            if (sound_alert && state == ChargerState.search && entity_found == null)
            {
                state       = ChargerState.alert;
                alert_timer = 0.0f;
            }

            if (state == ChargerState.dying)
            {
                velocity = Vector2.Zero;

                death = true;

                // may the programming gods have mercy on me hacking over this complicated state machine
                goto DeadSkipStates;
            }

            if (disable_movement == true)
            {
                disable_movement_time += currentTime.ElapsedGameTime.Milliseconds;

                if (disable_movement_time > 300)
                {
                    disable_movement_time = 0.0f;
                    disable_movement      = false;
                    velocity = Vector2.Zero;
                    state    = ChargerState.alert;
                }

                directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("hurt");
            }
            else
            {
                switch (state)
                {
                case ChargerState.search:
                    directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("idle");

                    change_direction_time += currentTime.ElapsedGameTime.Milliseconds;
                    //first if state is if enemy was knocked back by a enemy of a different type
                    if (enemy_found == false)
                    {
                        for (int i = 0; i < parentWorld.EntityList.Count; i++)
                        {
                            if (parentWorld.EntityList[i] == this || (GameCampaign.PlayerAllegiance < 0.3 && parentWorld.EntityList[i] is Player))
                            {
                                continue;
                            }
                            else if (parentWorld.EntityList[i].Enemy_Type != enemy_type && parentWorld.EntityList[i].Enemy_Type != EnemyType.NoType && parentWorld.EntityList[i].Death == false)
                            {
                                component.update(this, parentWorld.EntityList[i], currentTime, parentWorld);
                                if (enemy_found == true)
                                {
                                    entity_found = parentWorld.EntityList[i];
                                    break;
                                }
                            }
                        }
                    }

                    if (enemy_found)
                    {
                        state    = ChargerState.windUp;
                        velocity = Vector2.Zero;
                    }
                    else
                    {
                        if (change_direction_time > 5000)
                        {
                            switch (direction_facing)
                            {
                            case GlobalGameConstants.Direction.Right:
                                direction_facing = GlobalGameConstants.Direction.Down;
                                break;

                            case GlobalGameConstants.Direction.Left:
                                direction_facing = GlobalGameConstants.Direction.Up;
                                break;

                            case GlobalGameConstants.Direction.Up:
                                direction_facing = GlobalGameConstants.Direction.Right;
                                break;

                            default:
                                direction_facing = GlobalGameConstants.Direction.Left;
                                break;
                            }
                            change_direction_time = 0.0f;
                        }
                        entity_found = null;
                        sound_alert  = false;
                    }
                    break;

                case ChargerState.alert:
                    directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("idle");

                    if (sound_alert && entity_found == null)
                    {
                        //if false then sound didn't hit a wall
                        if (!parentWorld.Map.soundInSight(this, sound_position))
                        {
                            directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("run");
                            alert_timer += currentTime.ElapsedGameTime.Milliseconds;
                            for (int i = 0; i < parentWorld.EntityList.Count; i++)
                            {
                                if (parentWorld.EntityList[i].Enemy_Type != enemy_type && parentWorld.EntityList[i].Enemy_Type != EnemyType.NoType && parentWorld.EntityList[i].Death == false)
                                {
                                    float distance = Vector2.Distance(CenterPoint, parentWorld.EntityList[i].CenterPoint);
                                    if (distance <= range_distance)
                                    {
                                        enemy_found    = true;
                                        entity_found   = parentWorld.EntityList[i];
                                        state          = ChargerState.windUp;
                                        animation_time = 0.0f;
                                        sound_alert    = false;
                                        alert_timer    = 0.0f;
                                        windup_timer   = 0.0f;
                                        animation_time = 0.0f;
                                        velocity       = Vector2.Zero;
                                        charge_timer   = 0.0f;
                                        break;
                                    }
                                }
                            }

                            if (alert_timer > 3000 || ((int)CenterPoint.X == (int)sound_position.X && (int)CenterPoint.Y == (int)sound_position.Y))
                            {
                                entity_found   = null;
                                enemy_found    = false;
                                sound_alert    = false;
                                state          = ChargerState.search;
                                velocity       = Vector2.Zero;
                                animation_time = 0.0f;
                                charge_timer   = 0.0f;
                                windup_timer   = 0.0f;
                                animation_time = 0.0f;
                            }
                        }
                        else
                        {
                            entity_found   = null;
                            enemy_found    = false;
                            sound_alert    = false;
                            state          = ChargerState.search;
                            velocity       = Vector2.Zero;
                            animation_time = 0.0f;
                            charge_timer   = 0.0f;
                            windup_timer   = 0.0f;
                            animation_time = 0.0f;
                        }
                    }
                    else if (entity_found != null)
                    {
                        sound_alert = false;
                        float distance = Vector2.Distance(CenterPoint, entity_found.CenterPoint);
                        if (parentWorld.Map.enemyWithinRange(entity_found, this, range_distance) && distance < range_distance && entity_found.Death == false)
                        {
                            state          = ChargerState.windUp;
                            animation_time = 0.0f;
                        }
                        else
                        {
                            entity_found   = null;
                            enemy_found    = false;
                            state          = ChargerState.search;
                            velocity       = Vector2.Zero;
                            animation_time = 0.0f;
                            charge_timer   = 0.0f;
                            windup_timer   = 0.0f;
                            animation_time = 0.0f;
                        }
                    }
                    break;

                case ChargerState.windUp:
                    directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("windUp");
                    windup_timer += currentTime.ElapsedGameTime.Milliseconds;
                    angle         = (float)Math.Atan2(entity_found.CenterPoint.Y - CenterPoint.Y, entity_found.CenterPoint.X - CenterPoint.X);

                    if (windup_timer > 300)
                    {
                        animation_time = 0.0f;
                        state          = ChargerState.charge;
                        velocity       = new Vector2(8.0f * (float)(Math.Cos(angle)), 8.0f * (float)(Math.Sin(angle)));

                        charge_timer = 0.0f;
                    }
                    break;

                case ChargerState.charge:
                    directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation("charge");
                    charge_timer += currentTime.ElapsedGameTime.Milliseconds;
                    for (int i = 0; i < parentWorld.EntityList.Count; i++)
                    {
                        if (parentWorld.EntityList[i] == this)
                        {
                            continue;
                        }
                        if (hitTest(parentWorld.EntityList[i]))
                        {
                            if (play_sound)
                            {
                                AudioLib.playSoundEffect("chargerImpact");
                                sound_timer = 0.0f;
                                play_sound  = false;
                            }

                            Vector2 direction = parentWorld.EntityList[i].CenterPoint - CenterPoint;
                            parentWorld.EntityList[i].knockBack(direction, knockback_magnitude, enemy_damage);
                        }
                    }

                    if (charge_timer > 800)
                    {
                        if (entity_found.Death == true)
                        {
                            entity_found = null;
                        }
                        sound_alert    = false;
                        state          = ChargerState.alert;
                        velocity       = Vector2.Zero;
                        animation_time = 0.0f;
                        charge_timer   = 0.0f;
                        windup_timer   = 0.0f;
                        animation_time = 0.0f;
                        enemy_found    = false;
                    }
                    break;

                default:
                    break;
                }
            }

DeadSkipStates:
            Vector2 pos = new Vector2(position.X, position.Y);
            Vector2 nextStep = new Vector2(position.X + velocity.X, position.Y + velocity.Y);
            Vector2 finalPos = parentWorld.Map.reloactePosition(pos, nextStep, dimensions);

            position.X = finalPos.X;
            position.Y = finalPos.Y;

            directionAnims[(int)direction_facing].Animation.Apply(directionAnims[(int)direction_facing].Skeleton, animation_time, state == ChargerState.dying ? false : true);

            if (enemy_life <= 0 && state != ChargerState.dying && death == false)
            {
                directionAnims[(int)direction_facing].Animation = directionAnims[(int)direction_facing].Skeleton.Data.FindAnimation(Game1.rand.Next() % 3 == 0 ? "die" : Game1.rand.Next() % 2 == 0 ? "die2" : "die3");
                death          = true;
                state          = ChargerState.dying;
                animation_time = 0;
                parentWorld.pushCoin(this);
            }
        }