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); }
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); } }
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); } }
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); }
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); }