コード例 #1
0
ファイル: CheshireCat.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    switch (currentSubState)
                    {
                        case subState.Invisible:
                            if (Invisible == false)
                            {
                                currentSubState = subState.FadeIn;
                            }
                            break;
                        case subState.Talking:
                            if (Talking == false)
                            {
                                currentSubState = subState.FadeOut;
                            }
                            break;
                        case subState.FadeIn:
                            if (FadeIn == false)
                            {
                                currentSubState = subState.Talking;
                            }
                            break;
                        case subState.FadeOut:
                            if (FadeOut == false)
                            {
                                currentSubState = subState.Invisible;
                            }
                            break;

                    }
                    #endregion
                    break;

            }
            if (currentSubState == subState.Invisible)
                Invisible = true;
            else
                Invisible = false;
            if (currentSubState == subState.FadeIn)
                FadeIn = true;
            else
                FadeIn = false;
            if (currentSubState == subState.Talking)
                Talking = true;
            else
                Talking = false;
            if (currentSubState == subState.FadeOut)
                FadeOut = true;
            else
                FadeOut = false;
        }
コード例 #2
0
ファイル: CheshireCat.cs プロジェクト: apolaskey/Inkwell
 public override void Initialize(Vector3 enemyPosition)
 {
     currentSubState = subState.Invisible;
     base.Initialize(enemyPosition);
     NPC = true;
     enemyType = EnemyType.CheshireCat;
     enemyModel = new BasicModel(Engine.GameContainer, ModelProperties.Alpha, Assets.PLANE6, enemyPosition);
     Speed = 1.0f;
     PerceptionDistance = 60f;
     enemyModel.Link.Texture = Engine.GameContainer.Load<Texture2D>("Textures\\Animations\\Cat\\catFadeIn0");
 }
コード例 #3
0
ファイル: Hedgehog.cs プロジェクト: apolaskey/Inkwell
 public void ThrownInitialize(Vector3 enemyPosition)
 {
     base.Initialize(enemyPosition);
     NPC = true;
     enemyType = EnemyType.Hedgehog;
     enemyModel = new BasicModel(Engine.GameContainer, ModelProperties.Alpha, Assets.PLANE4, enemyPosition);
     enemyModel.Link.Texture = Engine.GameContainer.Load<Texture2D>("Textures\\Enemies\\Hedgehog");
     currentState = State.Moving;
     currentSubState = subState.ThrownByQueen;
     thrownSpeed = Engine.Randomize(1.0f, 1.5f);
     DetermineVector();
 }
コード例 #4
0
    public void changeSub(subState newSub)
    {
        currentSub = newSub;
        switch (currentSub)
        {
        case subState.Idle:
            IdleState.enabled = true;
            break;

        case subState.Moving:
            MovingState.enabled = true;
            break;

        case subState.Aerial:
            AerialState.enabled = true;
            break;
        }
    }
コード例 #5
0
ファイル: MarchHare.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            #region Determine currentState
            if (currentState == State.Moving &&
                currentSubState == subState.MoveRight ||
                currentSubState == subState.MoveLeft)
            {
                nextThrowTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                if (nextThrowTime < 0)
                {
                    ThrowTeaCup();
                    ResetThrowTime();
                }
            }
            if (PlayerCollide)
            {
                //stop throwing teacups?
            }
            else if (currentState != State.Idle)
            {
                currentState = State.Moving;
            }
            #endregion

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    if (DistanceFromPlayer <= PerceptionDistance)
                    {
                        //talk and then ->
                        currentSubState = subState.MoveLeft;
                        currentState = State.Moving;
                    }
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.MoveRight:
                            enemyPosition.X += Speed;
                            SetNewPosition(enemyPosition);
                            if (enemyPosition.X >= distMoveRight)
                            {
                                currentSubState = subState.MoveLeft;
                            }
                            break;
                        case subState.MoveLeft:
                            enemyPosition.X -= Speed;
                            SetNewPosition(enemyPosition);
                            if (enemyPosition.X <= distMoveLeft)
                            {
                                currentSubState = subState.MoveRight;
                            }
                            break;
                    }
                    #endregion
                    break;
            }
        }
コード例 #6
0
ファイル: JackCard.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            #region Determine currentState
            if (PlayerCollide &&
                currentState != State.KnockBack &&
                !mAvatar.Peek.Defending)
                currentState = State.Attacking;
            else if (currentState != State.Idle &&
                currentState != State.KnockBack)
            {
                currentState = State.Moving;
            }
            #endregion

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    if (DistanceFromPlayer <= PerceptionDistance)
                    {
                        currentSubState = subState.FindPlayer;
                        currentState = State.Moving;
                    }
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.FindPlayer:
                            //(determine vector)
                            enemyVector = Engine.TempVector3(mAvatar.Peek.PlayerModel.Link.Position.X, mAvatar.Peek.PlayerModel.Link.Position.Y + 5, mAvatar.Peek.PlayerModel.Link.Position.Z) - Engine.TempVector3(enemyModel.Link.Position.X, enemyModel.Link.Position.Y, enemyModel.Link.Position.Z);
                            enemyVector.Normalize();
                            enemyVector *= Speed;
                            currentSubState = subState.Chase;
                            break;
                        case subState.Chase:
                            enemyPosition.X += enemyVector.X;
                            enemyPosition.Z += enemyVector.Z;
                            SetNewPosition(enemyPosition);
                            if (DistanceFromPlayer >= 90 ||
                                enemyPosition.X <= boundNegX ||
                                enemyPosition.X >= boundPosX ||
                                enemyPosition.Z <= boundNegZ ||
                                enemyPosition.Z >= boundPosZ)
                            {
                                currentSubState = subState.FindPlayer;
                            }
                            break;
                    }
                    #endregion
                    break;
                case State.Attacking:
                    #region Attacking
                    mAvatar.Peek.HitPlayer(enemyPosition.X, AttackDamage);
                    #endregion
                    break;
                case State.KnockBack:
                    #region KnockBack
                    //Mathew Kane***************************************************************************************************************************
                    if (!check)
                    {
                        Distance = mAvatar.Peek.PlayerModel.Link.Position.X - enemyModel.Link.Position.X;//Get the distance between the character and enemy
                        if (Distance > 0)//Finds what side the enemy is to the player
                        {
                            Neg = false;
                        }
                        else
                        {
                            Neg = true;
                            Distance *= -1;// makes sure the distance is postive
                        }

                        Distance /= 2;//cut it to reduse how far the enemy gose when hit
                        while (AY >= 0)//finds X when Y is 0
                        {
                            AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math will be replaced with something better don't worry
                            AX--;
                        }
                        AY = 0;//reset Y
                        AX += 2;//Set the x two steps back
                        X = -1 * AX;// Used for distance
                        check = true;//makes sure this if statement is only looked at once till everything is done
                    }
                    else
                    {
                        DelayTime += mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (DelayTime > 30)
                        {
                            Delay = true;
                            DelayTime = 0;
                        }
                        else
                        {
                            Delay = false;
                        }
                    }
                    if (Delay)
                    {
                        AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math
                        if (Neg)//Finds what direction should the enemy go when hit
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X += AX + X;
                        }
                        else
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X -= AX + X;
                        }
                        AX++;
                    }
                    if (enemyModel.Link.Position.Y < 0.0f)//Once the enemy hits the ground (y=0 for now ), resets everything
                    {
                        Health -= 15;
                        enemyModel.Link.Position.Y = 0;
                        currentState = State.Moving;
                        currentSubState = subState.FindPlayer;
                        AX = 0;
                        AY = 0;
                        check = false;
                    }
                    //************************************************************************************************************************************
                    #endregion
                    break;
            }
        }
コード例 #7
0
ファイル: Hedgehog.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.Moving2Target:
                            if (Vector3.Distance(targetPosition, enemyPosition) <= 1.0)
                            {
                                enemyPosition = targetPosition;
                                currentState = State.Idle;
                            }
                            if (targetPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            break;
                        case subState.ThrownByQueen:

                            break;
                    }
                    #endregion
                    break;
                case State.KnockBack:
                    #region KnockBack
                    //MATHEW KANE***************************************************************************************************************************
                    if (!check)
                    {
                        Distance = mAvatar.Peek.PlayerModel.Link.Position.X - enemyModel.Link.Position.X;//Get the distance between the character and enemy
                        if (Distance > 0)//Finds what side the enemy is to the player
                        {
                            Neg = false;
                        }
                        else
                        {
                            Neg = true;
                            Distance *= -1;// makes sure the distance is postive
                        }

                        Distance /= 2;//cut it to reduse how far the enemy gose when hit
                        while (AY >= 0)//finds X when Y is 0
                        {
                            AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math will be replaced with something better don't worry
                            AX--;
                        }
                        AY = 0;//reset Y
                        AX += 2;//Set the x two steps back
                        X = -1 * AX;// Used for distance
                        check = true;//makes sure this if statement is only looked at once till everything is done
                    }
                    else
                    {
                        DelayTime += mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (DelayTime > 30)
                        {
                            Delay = true;
                            DelayTime = 0;
                        }
                        else
                        {
                            Delay = false;
                        }
                    }
                    if (Delay)
                    {
                        AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math
                        if (Neg)//Finds what direction should the enemy go when hit
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X += AX + X;
                        }
                        else
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X -= AX + X;
                        }
                        AX++;
                    }
                    if (enemyModel.Link.Position.Y < 0.0f)//Once the enemy hits the ground (y=0 for now ), resets everything
                    {
                        Health -= 50;
                        enemyModel.Link.Position.Y = 0;
                        currentState = State.Moving;
                        currentSubState = subState.Moving2Target;
                        AX = 0;
                        AY = 0;
                        check = false;
                    }
                    //************************************************************************************************************************************
                    #endregion
                    break;
            }
        }
コード例 #8
0
ファイル: QueenHearts.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            //Animation Fixes!!***********************************************
            if (currentSubState == subState.MoveUp)
                MoveUp = true;
            else
                MoveUp = false;
            if (currentSubState == subState.MoveDown)
                MoveDown = true;
            else
                MoveDown = false;
            if (currentSubState == subState.SpawnCards)
                SpawnCards = true;
            else
                SpawnCards = false;
            if (currentSubState == subState.ThrowHedgeHogs)
                ThrowHedgeHogs = true;
            else
                ThrowHedgeHogs = false;
            if (currentSubState == subState.Chasing)
                Chasing = true;
            else
                Chasing = false;
            if (currentSubState == subState.Return2Throne)
                Return2Throne = true;
            else
                Return2Throne = false;
            if (currentSubState == subState.Stunned)
                Stunned = true;
            else
                Stunned = false;
            //***************************************************************

            //debugState.Text = "QueenState: " + Convert.ToString(currentState);
            //debugSubState.Text = "QueenSubState: " + Convert.ToString(currentSubState);
            //debugWake.Text = "WakeTime: " + Convert.ToString(currentWakeUpTime);

            #region Determine currentState
            for (int i = 0; i < mAI.Peek.enemyList.Count; i++)
            {
                if (currentSubState != subState.Stunned &&
                    mAI.Peek.enemyList[i].currentState == State.KnockBack &&
                    mAI.Peek.enemyList[i].enemyType == EnemyType.Hedgehog &&
                    Vector3.Distance(mAI.Peek.enemyList[i].enemyModel.Link.Position, enemyPosition) <= 20.0)
                {
                    currentSubState = subState.Stunned;
                    currentState = State.Idle;
                    ResetWakeUpTime();
                }
            }
            if (DistanceFromPlayer <= 21.0 &&
                currentSubState != subState.Stunned)
            {
                currentState = State.Attacking;
            }
            else if (currentState != State.Idle)
            {
                currentState = State.Moving;

                if (countHedgeHogs >= numHedgeHogs)
                {
                    countHedgeHogs = 0;
                    ResetSwitch2SpawnTime();
                    currentSubState = subState.SpawnCards;
                }

                if (currentSubState == subState.MoveUp ||
                    currentSubState == subState.MoveDown &&
                    currentSubState != subState.ThrowHedgeHogs)
                {
                    nextThrowTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                    if (nextThrowTime <= 0)
                    {
                        if (currentSubState == subState.MoveUp)
                            previousSubState = subState.MoveUp;
                        if (currentSubState == subState.MoveDown)
                            previousSubState = subState.MoveDown;
                        if (countHedgeHogs < numHedgeHogs)
                        {
                            currentSubState = subState.ThrowHedgeHogs;
                        }
                    }
                }
            }
            #endregion

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    if (currentSubState != subState.Stunned)
                    {
                        if (DistanceFromPlayer <= PerceptionDistance)
                        {
                            //talk and then ->
                            currentSubState = subState.MoveUp;
                            currentState = State.Moving;
                        }
                    }
                    else
                    {
                        currentWakeUpTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (currentWakeUpTime <= 0)
                        {
                            currentSubState = subState.Chasing;
                            currentState = State.Moving;
                            ResetChaseTime();
                        }
                    }
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.Chasing:
                            #region Chasing
                            currentChaseTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                            if (currentChaseTime <= 0)
                            {
                                currentSubState = subState.Return2Throne;
                            }
                            if (playerPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            #endregion
                            break;
                        case subState.MoveDown:
                            #region MoveDown
                            currentSwitch2ThrowTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                            if (currentSwitch2ThrowTime <= 0)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                                if (playerPosition.X < enemyPosition.X)
                                    FacingRight = false;
                                else
                                    FacingRight = true;
                                if (enemyPosition.Z >= distMoveUp)
                                {
                                    currentSubState = subState.MoveUp;
                                }
                            }
                            #endregion
                            break;
                        case subState.MoveUp:
                            #region MoveUp
                            currentSwitch2ThrowTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                            if (currentSwitch2ThrowTime <= 0)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                                if (playerPosition.X < enemyPosition.X)
                                    FacingRight = false;
                                else
                                    FacingRight = true;
                                if (enemyPosition.Z <= distMoveDown)
                                {
                                    currentSubState = subState.MoveDown;
                                }
                            }
                            #endregion
                            break;
                        case subState.SpawnCards:
                            #region SpawnCards
                            currentSwitch2SpawnTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                            if (currentSwitch2SpawnTime <= 0)
                            {
                                spawnPosition = Engine.TempVector3(enemyPosition.X, enemyPosition.Y, -enemyPosition.Z);
                                if (countCards < numCards)
                                {
                                    nextThrowTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                                    if (nextThrowTime <= 0)
                                    {
                                        mAI.Peek.SpawnRandomCard(spawnPosition);
                                        countCards++;
                                        ResetThrowTime();
                                    }
                                }
                                else
                                {
                                    if (mAI.Peek.enemyList.Count == 1)
                                    {
                                        countCards = 0;
                                        ResetSwitch2ThrowTime();
                                        currentState = State.Moving;
                                        currentSubState = subState.MoveUp;
                                    }
                                }
                            }
                            #endregion
                            break;
                        case subState.ThrowHedgeHogs:
                            #region ThrowHedgehogs
                            spawnPosition = Engine.TempVector3(enemyModel.Link.Position.X, enemyModel.Link.Position.Y + 7, -enemyModel.Link.Position.Z);
                            mAI.Peek.ThrowHedgehog(spawnPosition);
                            ResetThrowTime();
                            countHedgeHogs++;
                            currentSubState = previousSubState;
                            #endregion
                            break;
                        case subState.Return2Throne:
                            #region Return2Throne
                            if (Vector3.Distance(enemyPosition, targetPosition) <= 1.0)
                            {
                                currentSubState = subState.MoveUp;
                            }
                            if (targetPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            #endregion
                            break;
                    }
                    #endregion
                    break;
                case State.Attacking:
                    #region Attacking
                    mAvatar.Peek.HitPlayer(enemyPosition.X, AttackDamage);
                    //mAudio.Peek.PlaySound("PlayerHit");
                    #endregion
                    break;
            }
        }
コード例 #9
0
ファイル: AceCard.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            #region Determine currentState
            if (PlayerCollide &&
                currentSubState != subState.Recovering &&
                currentState != State.KnockBack)
                currentState = State.Attacking;
            else if (currentState != State.Idle &&
                currentState != State.KnockBack)
            {
                currentState = State.Moving;
            }
            #endregion

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    if (currentSubState != subState.Recovering)
                    {
                        if (DistanceFromPlayer <= PerceptionDistance)
                        {
                            currentSubState = subState.ChaseZ;
                            currentState = State.Moving;
                        }
                    }
                    else
                    {
                        currentRecoverTime -= mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (currentRecoverTime <= 0)
                        {
                            currentSubState = subState.ChaseZ;
                            currentState = State.Moving;
                        }
                    }
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.ChaseZ:
                            #region ChaseZ
                            if (playerPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z > enemyPosition.Z - 1.5f && playerPosition.Z < enemyPosition.Z + 1.5f)
                            {
                                if (playerPosition.X < enemyPosition.X)
                                {
                                    currentSubState = subState.ChaseXLeft;
                                }
                                if (playerPosition.X > enemyPosition.X)
                                {
                                    currentSubState = subState.ChaseXRight;
                                }
                            }
                            #endregion
                            break;
                        case subState.ChaseXLeft:
                            #region ChaseXLeft
                            enemyPosition.X -= Speed * 9;
                            SetNewPosition(enemyPosition);
                            if (enemyPosition.X <= playerPosition.X - 90 ||
                                enemyPosition.X <= boundNegX)
                            {
                                FacingRight = true;
                                ResetRecoverTime();
                                currentSubState = subState.Recovering;
                                currentState = State.Idle;
                            }
                            #endregion
                            break;
                        case subState.ChaseXRight:
                            #region ChaseXRight
                            enemyPosition.X += Speed * 9;
                            SetNewPosition(enemyPosition);
                            if (enemyPosition.X >= playerPosition.X + 90 ||
                                enemyPosition.X >= boundPosX)
                            {
                                FacingRight = false;
                                ResetRecoverTime();
                                currentSubState = subState.Recovering;
                                currentState = State.Idle;
                            }
                            #endregion
                            break;
                    }
                    #endregion
                    break;
                case State.Attacking:
                    #region Attacking
                    mAvatar.Peek.HitPlayer(enemyPosition.X, AttackDamage);
                    ResetRecoverTime();
                    currentSubState = subState.Recovering;
                    currentState = State.Idle;
                    #endregion
                    break;
                case State.KnockBack:
                    #region KnockBack
                    //MATHEW KANE***************************************************************************************************************************
                    if (!check)
                    {
                        Distance = mAvatar.Peek.PlayerModel.Link.Position.X - enemyModel.Link.Position.X;//Get the distance between the character and enemy
                        if (Distance > 0)//Finds what side the enemy is to the player
                        {
                            Neg = false;
                        }
                        else
                        {
                            Neg = true;
                            Distance *= -1;// makes sure the distance is postive
                        }

                        Distance /= 2;//cut it to reduse how far the enemy gose when hit
                        while (AY >= 0)//finds X when Y is 0
                        {
                            AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math will be replaced with something better don't worry
                            AX--;
                        }
                        AY = 0;//reset Y
                        AX += 2;//Set the x two steps back
                        X = -1 * AX;// Used for distance
                        check = true;//makes sure this if statement is only looked at once till everything is done
                    }
                    else
                    {
                        DelayTime += mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (DelayTime > 30)
                        {
                            Delay = true;
                            DelayTime = 0;
                        }
                        else
                        {
                            Delay = false;
                        }
                    }
                    if (Delay)
                    {
                        AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math
                        if (Neg)//Finds what direction should the enemy go when hit
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X += AX + X;
                        }
                        else
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X -= AX + X;
                        }
                        AX++;
                    }
                    if (enemyModel.Link.Position.Y < 0.0f)//Once the enemy hits the ground (y=0 for now ), resets everything
                    {
                        Health -= 15;
                        enemyModel.Link.Position.Y = 0;
                        currentState = State.Idle;
                        currentSubState = subState.Recovering;
                        AX = 0;
                        AY = 0;
                        check = false;
                    }
                    //************************************************************************************************************************************
                    #endregion
                    break;
            }
        }
コード例 #10
0
ファイル: Hedgehog.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            if (bouncecount > 2)
                Health = 0;

            if (PlayerCollide &&
                currentState != State.KnockBack)
            {
                if (currentSubState == subState.ThrownByQueen)
                    mAvatar.Peek.HitPlayer(enemyPosition.X, 2);
                else
                    mAvatar.Peek.HitPlayer(enemyPosition.X, 0);
            }

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.Moving2Target:
                            #region Moving2Target
                            if (Vector3.Distance(targetPosition, enemyPosition) <= 1.0)
                            {
                                enemyPosition = targetPosition;
                                currentState = State.Idle;
                            }
                            if (targetPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            #endregion
                            break;
                        case subState.ThrownByQueen:
                            #region ThrownbyQueen

                            enemyPosition += enemyVector;
                            SetNewPosition(enemyPosition);

                            if (Vector3.Distance(enemyPosition, playerPosition) >= 300)
                            {
                                Health = 0;
                            }
                            for (int i = 0; i < obstacles.Length; i++)
                            {
                                int collide = mPhysics.Peek.BoxCollision(enemyModel, obstacles[i]);

                                switch (collide)
                                {
                                    case 1:
                                        enemyVector.Y *= -1;
                                        bouncecount++;
                                        break;
                                    case 2:
                                        enemyVector.Y *= -1;
                                        bouncecount++;
                                        break;
                                    case 3:
                                        enemyVector.X *= -1;
                                        bouncecount++;
                                        break;
                                    case 4:
                                        enemyVector.Z *= -1;
                                        bouncecount++;
                                        break;
                                    case 5:
                                        enemyVector.X *= -1;
                                        bouncecount++;
                                        break;
                                    case 6:
                                        enemyVector.Z *= -1;
                                        bouncecount++;
                                        break;
                                }
                            }
                            #endregion
                            break;
                    }
                    #endregion
                    break;
                case State.KnockBack:
                    #region KnockBack
                    //Mathew Kane***************************************************************************************************************************
                    if (!check)
                    {
                        Distance = mAvatar.Peek.PlayerModel.Link.Position.X - enemyModel.Link.Position.X;//Get the distance between the character and enemy
                        if (Distance > 0)//Finds what side the enemy is to the player
                        {
                            Neg = false;
                        }
                        else
                        {
                            Neg = true;
                            Distance *= -1;// makes sure the distance is postive
                        }

                        Distance /= 2;//cut it to reduse how far the enemy gose when hit
                        while (AY >= 0)//finds X when Y is 0
                        {
                            AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math will be replaced with something better don't worry
                            AX--;
                        }
                        AY = 0;//reset Y
                        AX += 2;//Set the x two steps back
                        X = -1 * AX;// Used for distance
                        check = true;//makes sure this if statement is only looked at once till everything is done
                    }
                    else
                    {
                        DelayTime += mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (DelayTime > 30)
                        {
                            Delay = true;
                            DelayTime = 0;
                        }
                        else
                        {
                            Delay = false;
                        }
                    }
                    if (Delay)
                    {
                        AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math
                        if (Neg)//Finds what direction should the enemy go when hit
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X += AX + X;
                        }
                        else
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X -= AX + X;
                        }
                        AX++;
                    }
                    if (enemyModel.Link.Position.Y < 0.0f)//Once the enemy hits the ground (y=0 for now ), resets everything
                    {
                        Health = 0;
                        enemyModel.Link.Position.Y = 0;
                        currentState = State.Moving;
                        currentSubState = subState.Moving2Target;
                        AX = 0;
                        AY = 0;
                        check = false;
                    }
                    //************************************************************************************************************************************
                    #endregion
                    break;
            }
        }
コード例 #11
0
ファイル: AliceBookworm.cs プロジェクト: apolaskey/Inkwell
        public override void Update()
        {
            base.Update();

            #region Determine currentState
            if (Hit && currentState != State.KnockBack)
            {
                currentState = State.Moving;
                currentSubState = subState.Switch2Flee;
            }
            else if (currentState != State.Idle &&
                     currentState != State.KnockBack &&
                     currentSubState != subState.Switch2Flee &&
                     currentSubState != subState.Fleeing &&
                     currentSubState != subState.Back2Chase)
            {
                if (PlayerCollide)
                    currentState = State.Attacking;
                else
                {
                    currentState = State.Moving;
                    currentSubState = subState.Chasing;
                }
            }
            #endregion

            switch (currentState)
            {
                case State.Idle:
                    #region Idle
                    if (DistanceFromPlayer <= PerceptionDistance)
                    {
                        if (enemyPosition.Y < 0)
                        {
                            currentState = State.Moving;
                            currentSubState = subState.Back2Chase;
                        }
                        else
                        {
                            currentState = State.Moving;
                            currentSubState = subState.Chasing;
                        }
                    }
                    #endregion
                    break;
                case State.Moving:
                    #region Moving
                    switch (currentSubState)
                    {
                        case subState.Chasing:
                            #region Chasing
                            mAudio.Peek.PlaySound(mAudio.SoundName.WormChase, enemyPosition);
                            if (playerPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (playerPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            #endregion
                            break;
                        case subState.Switch2Flee:
                            #region Switch2Flee
                            if (enemyPosition.Y > -20)
                            {
                                enemyPosition.Y -= 0.6f;
                                SetNewPosition(enemyPosition);
                            }
                            if (enemyPosition.Y < -20)
                            {
                                enemyPosition.Y = -20;
                                SetNewPosition(enemyPosition);
                            }
                            if (enemyPosition.Y == -20)
                            {
                                currentSubState = subState.Fleeing;
                            }
                            #endregion
                            break;
                        case subState.Fleeing:
                            #region Fleeing
                            if (mAvatar.Peek.FacingRight)
                            {
                                targetPosition = Engine.TempVector3(playerPosition.X - 40, -10, playerPosition.Z);
                            }
                            else
                            {
                                targetPosition = Engine.TempVector3(playerPosition.X + 40, -10, playerPosition.Z);
                            }
                            if (enemyPosition.X < targetPosition.X + 0.5 &&
                                enemyPosition.X > targetPosition.X - 0.5)
                            {
                                currentSubState = subState.Back2Chase;
                            }
                            if (targetPosition.X < enemyPosition.X)
                            {
                                FacingRight = false;
                                enemyPosition.X -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.X > enemyPosition.X)
                            {
                                FacingRight = true;
                                enemyPosition.X += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z < enemyPosition.Z)
                            {
                                enemyPosition.Z -= Speed;
                                SetNewPosition(enemyPosition);
                            }
                            if (targetPosition.Z > enemyPosition.Z)
                            {
                                enemyPosition.Z += Speed;
                                SetNewPosition(enemyPosition);
                            }
                            #endregion
                            break;
                        case subState.Back2Chase:
                            #region Back2Chase
                            if (playerPosition.X < enemyPosition.X)
                                FacingRight = false;
                            if (playerPosition.X > enemyPosition.X)
                                FacingRight = true;

                            if (enemyPosition.Y < 0)
                            {
                                enemyPosition.Y += 0.6f;
                                SetNewPosition(enemyPosition);
                            }
                            if (enemyPosition.Y > 0)
                            {
                                enemyPosition.Y = 0;
                                SetNewPosition(enemyPosition);
                            }
                            if (enemyPosition.Y == 0)
                            {
                                currentSubState = subState.Chasing;
                            }
                            #endregion
                            break;
                    }
                    #endregion
                    break;
                case State.Attacking:
                    #region Attacking
                    mAvatar.Peek.HitPlayer(enemyPosition.X, AttackDamage);
                    //mAudio.Peek.PlaySound("PlayerHit");
                    #endregion
                    break;
                case State.KnockBack:
                    #region KnockBack
                    //Mathew Kane***************************************************************************************************************************
                    if (!check)
                    {
                        Distance = mAvatar.Peek.PlayerModel.Link.Position.X - enemyModel.Link.Position.X;//Get the distance between the character and enemy
                        if (Distance > 0)//Finds what side the enemy is to the player
                        {
                            Neg = false;
                        }
                        else
                        {
                            Neg = true;
                            Distance *= -1;// makes sure the distance is postive
                        }

                        Distance /= 2;//cut it to reduse how far the enemy gose when hit
                        while (AY >= 0)//finds X when Y is 0
                        {
                            AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math will be replaced with something better don't worry
                            AX--;
                        }
                        AY = 0;//reset Y
                        AX += 2;//Set the x two steps back
                        X = -1 * AX;// Used for distance
                        check = true;//makes sure this if statement is only looked at once till everything is done
                    }
                    else
                    {
                        DelayTime += mTimer.Peek.ElapsedGameTime.Milliseconds;
                        if (DelayTime > 30)
                        {
                            Delay = true;
                            DelayTime = 0;
                        }
                        else
                        {
                            Delay = false;
                        }
                    }
                    if (Delay)
                    {
                        AY = -10 * ((float)Math.Pow((AX / Distance), 2)) + (13 - Distance);//The math
                        if (Neg)//Finds what direction should the enemy go when hit
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X += AX + X;
                        }
                        else
                        {
                            enemyModel.Link.Position.Y += AY;
                            enemyModel.Link.Position.X -= AX + X;
                        }
                        AX++;
                    }
                    if (enemyModel.Link.Position.Y < 0.0f)//Once the enemy hits the ground (y=0 for now ), resets everything
                    {
                        Health -= 15;
                        enemyModel.Link.Position.Y = 0;
                        currentState = State.Moving;
                        currentSubState = subState.Chasing;
                        AX = 0;
                        AY = 0;
                        check = false;
                    }
                    //************************************************************************************************************************************
                    #endregion
                    break;
            }
        }