//Constructor public Slime(Rectangle p, bool a, int t) { this.position = p; this.timesHit = t; this.active = a; LeftBound = new Rectangle(800, 100, 10, 10); RightBound = new Rectangle(1200, 100, 10, 10); startPositionX = p.X; startPositionY = p.Y; currentSlimeState = SlimeState.MoveRight; flip = SpriteEffects.FlipHorizontally; previousSlimeState = currentSlimeState; //Setting hitbox hitbox = new Rectangle(position.X, position.Y, 108, 108); //At the end of the hurt animation, it will revert to the previous Slime State it was in (Moving left or right) hurtTimer = new Timer(); hurtTimer.Interval = 2000; hurtTimer.Elapsed += HurtTimerState; //Animation Initializers frameSize.X = 108; frameSize.Y = 108; currentFrame.X = 0; currentFrame.Y = 0; numFrames = 4; frameRate = 200; }
protected override void Start() { time = 0.0f; slimeState = SlimeState.STOP; base.Start(); }
private void ExecuteAction(SlimeState state) { if (!canAct_) { slimeActor_.move(0f, 0f); return; } Vector2 distToPlayer; switch (state) { case SlimeState.ATTACK: if (!cooldown_) { StartCoroutine(Attack()); } slimeActor_.move(0f, 0f); break; case SlimeState.MOVE_TO_PLAYER: distToPlayer = player_.position - transform.position; slimeActor_.move(distToPlayer.y, distToPlayer.x); break; case SlimeState.FLEE: distToPlayer = -(player_.position - transform.position); slimeActor_.move(distToPlayer.y, distToPlayer.x); break; default: slimeActor_.move(0f, 0f); break; } }
void Update() { RecalculateScores(); state_ = stateScore_.FirstOrDefault(x => x.Value == stateScore_.Values.Max()).Key; foreach (SlimeState state in Enum.GetValues(typeof(SlimeState))) { stateScore_[state] = 0; } ExecuteAction(state_); }
//Basic AI Code that makes it go left and right //Move* public void MoveRight(Rectangle RightBound) { if (position.X < RightBound.X) { position.X += 2; } else if (position.X >= RightBound.X) { currentSlimeState = SlimeState.MoveLeft; } }
public void MoveLeft(Rectangle LeftBound) { if (position.X > LeftBound.X) { position.X -= 2; } else if (position.X <= LeftBound.X) { currentSlimeState = SlimeState.MoveRight; } }
public void SetState(SlimeState newState) { if (_isinit) { _states[_currentState].enabled = false; _states[_currentState].EndState(); } _currentState = newState; _states[_currentState].BeginState(); _states[_currentState].enabled = true; _anim.SetInteger("CurrentState", (int)_currentState); }
public void SetState(SlimeState newState) { foreach (SlimeFSMState fsm in states.Values) { fsm.enabled = false; //Debug.Log(fsm); } states[newState].enabled = true; states[newState].beginState(); currentState = newState; anim.SetInteger("CurrentState", (int)currentState); }
void flying() { flyingTimer += Time.deltaTime; flyingVel = flyingVel.normalized + Vector3.up * flyingForce; if (flyingTimer < timeFlying) { cc.Move(flyingVel); } else { flyingTimer = 0; currentSlimeState = SlimeState.still; } }
public void SetState(SlimeState newState) { if (currentState == SlimeState.DEAD) { return; } foreach (SlimeFSMState fsm in states.Values) { fsm.enabled = false; } states[newState].enabled = true; states[newState].BeginState(); currentState = newState; slani.SetInteger("CurrentState", (int)currentState); }
//Collision* public void Hurt(Glitch glitch) { if (this.Position.Intersects(glitch.Position) == true) { if (timesHit < 2) { timesHit++; //set a timer that makes the slime hurt for 1-2 seconds currentSlimeState = SlimeState.Hurt; } else { Dead(); } } }
void Start() { updatePlayerPos = true; flyingTimer = 0; currentSlimeState = SlimeState.moving; //finding the ridgedbody cc = gameObject.GetComponent <CharacterController>(); speed = Random.Range(speed - speedRandomRange, speed + speedRandomRange); //define it if (parent != null) { player = GameObject.FindGameObjectWithTag(parent); } slimes = player.GetComponent <PlayerController>().slimes; randomCircleRadius = player.GetComponent <PlayerController>().slimeRandomDistanceToPlayer; newPos = FindnewPosition(); playersController = player.GetComponent <CharacterController>(); transform.position = new Vector3(transform.position.x, beginYPos, transform.position.z); }
void DeadState() { currentSlimeState = SlimeState.Dead; }
void ChasingState() { currentSlimeState = SlimeState.Chasing; }
void IdleState() { currentSlimeState = SlimeState.Idle; }
private void SlimeMove() { time += Time.deltaTime; switch (slimeState) { case SlimeState.MOVE_RIGHT: case SlimeState.MOVE_UP: case SlimeState.MOVE_LEFT: case SlimeState.MOVE_DOWN: if (moveTime <= time) { slimeState = SlimeState.STOP; time = Random.Range(0.0f, 0.5f); } break; case SlimeState.STOP: default: if (moveDistance <= time) { switch (Random.Range(0, 6)) { case 0: slimeState = SlimeState.MOVE_RIGHT; break; case 1: slimeState = SlimeState.MOVE_UP; break; case 2: slimeState = SlimeState.MOVE_LEFT; break; case 3: slimeState = SlimeState.MOVE_DOWN; break; default: slimeState = SlimeState.STOP; break; } time = 0.0f; } break; } float tempX = 0f; float tempY = 0f; switch (slimeState) { case SlimeState.MOVE_RIGHT: tempY = 1; break; case SlimeState.MOVE_UP: tempX = -1; break; case SlimeState.MOVE_LEFT: tempY = -1; break; case SlimeState.MOVE_DOWN: tempX = 1; break; default: break; } if (!(tempX == 0 && tempY == 0)) { var radian = Mathf.Atan2(tempY, tempX); speed.x += accsele * Mathf.Cos(radian); speed.y += accsele * Mathf.Sin(radian); } }
//Timer Function //TimerEnd* private void HurtTimerState(Object source, System.Timers.ElapsedEventArgs e) { currentSlimeState = previousSlimeState; }
//Monogame Methods public void Initialize() { currentSlimeState = SlimeState.MoveRight; }
// Update is called once per frame void Update() { switch (slimeState) { case SlimeState.Moving: if (!hasInitialisedState) { slimeMover.enabled = true; hasInitialisedState = true; } if (slimeMover.IsInRange()) { slimeState = SlimeState.Attacking; slimeMover.enabled = false; hasInitialisedState = false; } break; case SlimeState.Attacking: if (!hasInitialisedState) { hasInitialisedState = true; } switch (slimeType) { case SlimeType.Wind: if (GetComponent <WindSlimeBehaviour>().WindAttackBehaviour()) { slimeState = SlimeState.Moving; hasInitialisedState = false; } break; case SlimeType.Ice: GetComponent <IceSlimeBehaviour>().IceAttackBehaviour(); if (!slimeMover.IsInRange()) { GetComponent <IceSlimeBehaviour>().StopIceBehaviour(); slimeState = SlimeState.Moving; hasInitialisedState = false; } break; case SlimeType.Earth: if (GetComponent <EarthSlimeBehaviour>().EarthAttackBehaviour()) { slimeState = SlimeState.Moving; hasInitialisedState = false; } break; case SlimeType.Fire: if (slimeMover.IsInRange()) { GetComponent <FireSlimeBehaviour>().FireAttackBehaviour(); } else { slimeState = SlimeState.Moving; hasInitialisedState = false; } break; } break; } }