public override void Initialize(GameScreen parentScreen) { base.Initialize(parentScreen); AimTexture = new Texture2D(ParentScreen.ParentGame.GraphicsDevice, 1, 1); AimTexture.SetData <Color>(new Color[] { Color.White }); // find fire durations ClipInstance.Play(BOMB_FIRE_CLIP_NAME); bombReloadTime = ClipInstance.CurrentAnim.DurationInSeconds; ClipInstance.Play(BOW_FIRE_CLIP_NAME); bowReloadTime = ClipInstance.CurrentAnim.DurationInSeconds; // set state and current clip state = PrincessState.IdleBow; ClipInstance.Play(BOW_IDLE_CLIP_NAME); }
IEnumerator CheckPrincessState() { while (!isDie) { yield return(new WaitForSeconds(0.2f)); float dist = Vector3.Distance(PrinceTr.position, PrincessTr.position); if (dist <= jumpDist) { princessState = PrincessState.jump; Debug.Log("왕자를 만났어"); GameOver(); } else if (dist <= traceDist) { princessState = PrincessState.run; } else { princessState = PrincessState.idle; } } }
private void Fire() { dragVector = dragStart - dragEnd; if (dragVector.Length() > 250f) { dragVector.Normalize(); dragVector *= 250f; } dragVector *= POWER; this.LevelScreen.FireProjectile(this.Position + fireOffset, dragVector, 0, currentProjectileType); timeSinceLastFired = 0; if (currentProjectileType == ProjectileType.Arrow) { state = PrincessState.FiringBow; ClipInstance.Play(BOW_FIRE_CLIP_NAME); } else { state = PrincessState.ThrowingBomb; ClipInstance.Play(BOMB_FIRE_CLIP_NAME); } }
public override void Update(float dt) { timeSinceLastFired += dt; if (Input.MouseDown(MouseButton.Left)) { if (!isDragging && timeSinceLastFired > (currentProjectileType == ProjectileType.Arrow ? bowReloadTime : bombReloadTime)) { if (Vector2.Distance(this.Position - LevelScreen.Camera2D.Position, new Vector2(Input.MouseX, Input.MouseY)) < DRAG_RADIUS) { isDragging = true; dragStart = new Vector2(Input.MouseX, Input.MouseY); } } dragEnd = new Vector2(Input.MouseX, Input.MouseY); dragDistance = MathHelper.Clamp(Vector2.Distance(dragStart, dragEnd), 0, MAX_DRAG_DISTANCE); // TODO update drag distance sound // TODO update drag distance animation angle = (float)Math.Atan2(dragStart.Y - dragEnd.Y, dragStart.X - dragEnd.X); } else if (Input.MouseJustUp(MouseButton.Left) && isDragging) { isDragging = false; if (dragDistance < MIN_DRAG_DISTANCE) { // do nothing... } else { Fire(); } } float fear = 0.0f; foreach (Unit u in LevelScreen.Units.ActiveUnits) { if (u.UnitType != UnitType.Knight && u.Health > 0.0f) { float distToPrincess = Math.Abs(u.Physics.Bodies[0].Position.X - Physics.Bodies[0].Position.X); fear += FEAR_STRENGTH / (distToPrincess * distToPrincess); } } fearFactorTarget = fear; FearFactor += (fearFactorTarget - FearFactor) * dt * FEAR_RATE_OF_CHANGE; FearFactor = Math.Min(1.0f, FearFactor); if (Input.MouseDW != lastScrollPos && updatesSinceWeaponChange > 30) { // change current project type, state and clip if (currentProjectileType == ProjectileType.Bomb) { currentProjectileType = ProjectileType.Arrow; state = PrincessState.IdleBow; ClipInstance.Play(BOW_IDLE_CLIP_NAME); } else { currentProjectileType = ProjectileType.Bomb; state = PrincessState.IdleBomb; ClipInstance.Play(BOMB_IDLE_CLIP_NAME); } lastScrollPos = Input.MouseDW; updatesSinceWeaponChange = 0; } else { updatesSinceWeaponChange++; lastScrollPos = Input.MouseDW; } // Update state and the current clip, if need be. NOTE: The only other state/clip transitions are when changing gun and in Fire(). switch (state) { case PrincessState.IdleBomb: { if (isDragging) { state = PrincessState.AimingBomb; ClipInstance.Play(BOMB_AIM_CLIP_NAME); } } break; case PrincessState.IdleBow: { if (isDragging) { state = PrincessState.PullingBackBow; ClipInstance.Play(BOW_AIM_CLIP_NAME); } } break; case PrincessState.AimingBomb: { if (!isDragging) { state = PrincessState.IdleBomb; ClipInstance.Play(BOMB_IDLE_CLIP_NAME); } } break; case PrincessState.PullingBackBow: { if (!isDragging) { state = PrincessState.IdleBow; ClipInstance.Play(BOW_IDLE_CLIP_NAME); } } break; case PrincessState.ThrowingBomb: { if (timeSinceLastFired > bombReloadTime) { state = PrincessState.IdleBomb; ClipInstance.Play(BOMB_IDLE_CLIP_NAME); } } break; case PrincessState.FiringBow: { if (timeSinceLastFired > bowReloadTime) { state = PrincessState.IdleBow; ClipInstance.Play(BOW_IDLE_CLIP_NAME); } } break; } base.Update(dt); }
public override void Initialize(GameScreen parentScreen) { base.Initialize(parentScreen); AimTexture = new Texture2D(ParentScreen.ParentGame.GraphicsDevice, 1, 1); AimTexture.SetData<Color>(new Color[] { Color.White }); // find fire durations ClipInstance.Play(BOMB_FIRE_CLIP_NAME); bombReloadTime = ClipInstance.CurrentAnim.DurationInSeconds; ClipInstance.Play(BOW_FIRE_CLIP_NAME); bowReloadTime = ClipInstance.CurrentAnim.DurationInSeconds; // set state and current clip state = PrincessState.IdleBow; ClipInstance.Play(BOW_IDLE_CLIP_NAME); }