Esempio n. 1
0
        public C_FlyWithEagleAI(float speed)
            : base(speed, Vector2.Zero)
        {
            startSpeed = speed;

            overseeCircleRadius = 100;
            overseeOffset       = Vector2.One * 200;
            moveTimer           = new Timer(rand.Next(3) + 2);
            moveTimer.Dt        = new Timer.timerDelegate(TurnRound);

            moveAngle  = 0;
            moveRadius = 0;
            toBig      = true;
            creatment  = true;


            overseeEntity = Entity.CreateEntity("OverseeCircle", "OverseeCircle", new Transform2D());


            //drawOverseeArea = new C_DrawSpriteAutoSize("CollisionArea", Vector2.Zero, 300);
            //drawOverseeArea.SetColor(Color.Red);
            //overseeEntity.RegisterComponent(drawOverseeArea);

            overseeCollider = new C_Collider_Circle("OverseeCircle", Vector2.Zero, overseeCircleRadius, eCollitionType.Through, false);
            overseeEntity.RegisterComponent(overseeCollider);
        }
Esempio n. 2
0
        private void CreatRoute()
        {
            if (createRouteArea.ThroughEnd("PlayerSkill"))
            {
                C_SeasonState season = (C_SeasonState)createRouteArea.GetOtherEntity("PlayerSkill").GetUpdateComponent("C_SeasonState");
                if (season.GetNowSeason() != eSeason.Winter)
                {
                    return;
                }
                C_Collider_Circle playerSkillCollider = (C_Collider_Circle)createRouteArea.GetOtherCollider("PlayerSkill");
                Vector2           colliderCentre      = playerSkillCollider.centerPosition;
                float             radius = playerSkillCollider.radius;

                Vector2 lt        = createRouteArea.points[0];
                Vector2 rb        = createRouteArea.points[1];
                Vector2 rayNormal = Vector2.Normalize(rb - lt);

                Vector2 crossPoint1 = lt;
                Vector2 crossPoint2 = lt;

                Method.Circle_Ray(ref colliderCentre, lt, rayNormal, radius, ref crossPoint1, ref crossPoint2);

                crossPoint1 = crossPoint1.X > rb.X ? rb : crossPoint1;
                crossPoint2 = crossPoint2.X > rb.X ? rb : crossPoint2;

                //射線あたり判定からルート生成の始点と終点をゲット
                if (crossPoint1 == crossPoint2)
                {
                    return;
                }
                CreatRoute(crossPoint1, crossPoint2);
            }
        }
Esempio n. 3
0
 public void SetHidden(bool isHidden)
 {
     IsHidden = isHidden;
     if (isHidden)
     {
         entity.GetColliderComponent("Player").DeActive();
         ColliderComponent playerHiddenCollider = new C_Collider_Circle("PlayerHidden", new Vector2(0, -120), 100);
         entity.RegisterComponent(playerHiddenCollider);
     }
     else
     {
         entity.GetColliderComponent("PlayerHidden").DeActive();
         ColliderComponent playerCollider = new C_Collider_Circle("Player", new Vector2(0, -120), 80, eCollitionType.Jostle);
         entity.RegisterComponent(playerCollider);
     }
 }
Esempio n. 4
0
        public static bool CircleSquare(C_Collider_Square square, C_Collider_Circle circle)
        {
            bool isCollide = false;

            for (int i = 0; i < square.points.Count; i++)
            {
                Vector2 centre = circle.centerPosition;
                float   radius = circle.radius;

                int     nextIndex = (int)Method.Warp(0, square.points.Count, i + 1);
                Vector2 thisPoint = square.points[i];
                Vector2 nextPoint = square.points[nextIndex];
                Vector2 normal    = Vector2.Zero;

                isCollide = Method.CircleSegment(ref centre, radius, thisPoint, nextPoint, ref normal);
                if (isCollide)
                {
                    return(isCollide);
                }
            }
            return(isCollide);
        }
Esempio n. 5
0
        protected override eStateTrans UpdateAction(Entity entity, ref IState <Entity> nextState)
        {
            //下ジャンプに遷移
            if (JumpDownCheck(entity))
            {
                routeEffect.Sleep();
                float nowSpeed = moveComp.speed;
                entity.RemoveComponent(moveComp);
                nextState = new JumpState_Com_Player(gameDevice, eJumpType.Down, nowSpeed);
                return(eStateTrans.ToNext);
            }

            //落下に遷移
            if (state.IsJump)
            {
                routeEffect.Sleep();
                float nowSpeed = moveComp.speed;
                entity.RemoveComponent(moveComp);
                nextState = new JumpState_Com_Player(gameDevice, eJumpType.Fall, nowSpeed);
                return(eStateTrans.ToNext);
            }

            //Jumpに遷移
            if (inputState.WasDown(Keys.Space, Buttons.A))
            {
                //子生物誘導ヒントを作る
                C_Collider_PointInHintArea hint = new C_Collider_PointInHintArea("ChildJump", entity.transform.Position, Vector2.One * 40);
                hint.Active();
                hint.Destroy(2);
                TaskManager.AddTask(hint);

                routeEffect.Sleep();
                float nowSpeed = moveComp.speed;
                entity.RemoveComponent(moveComp);
                nextState = new JumpState_Com_Player(gameDevice, eJumpType.Up, nowSpeed);
                return(eStateTrans.ToNext);
            }


            //攻撃
            if (inputState.IsDown(Keys.F, Buttons.B))
            {
                routeEffect.Sleep();
                entity.RemoveComponent(moveComp);
                nextState = new AttackState_Com_Player(gameDevice);
                return(eStateTrans.ToNext);
            }

            //Skill選択に遷移
            if (inputState.WasDown(Keys.Z, Buttons.LeftShoulder))
            {
                routeEffect.Sleep();
                entity.RemoveComponent(moveComp);
                nextState = new SkillSelect_Com(gameDevice);
                return(eStateTrans.ToNext);
            }

            //Damage判定
            if (CollitionCheck(entity))
            {
                entity.RemoveComponent(moveComp);
                collider.DeActive();
                nextState = new DeathState_Com("Bom", gameDevice);
                return(eStateTrans.ToNext);
            }

            //Skill発動
            if (seasonState.IsCanSkill() && inputState.WasDown(Keys.X, Buttons.RightShoulder))
            {
                DrawComponent drawSkill = new C_DrawSkillCircle(true, 100);
                entity.RegisterComponent(drawSkill);

                ColliderComponent skillCollider = new C_Collider_Circle("PlayerSkill", new Vector2(0, -120), 400);
                entity.RegisterComponent(skillCollider);
                skillCollider.Destroy(3);

                seasonState.CoolingSkill();
            }

            nextState = this;
            return(eStateTrans.ToThis);
        }