MOD: Zweite variante an Gegnern
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
public abstract class CEBaseState
|
||||
{
|
||||
|
||||
public abstract void EnterState(CEStateManager CornerEnemy);
|
||||
|
||||
public abstract void UpdateState(CEStateManager CornerEnemy);
|
||||
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 91d97a9871ad39e4fba6de98d983afd1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,58 @@
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
|
||||
public class CEMoveState : CEBaseState
|
||||
{
|
||||
CEVariables cEVariables;
|
||||
public Vector2 targetPosition;
|
||||
public Vector2 currentTargetVector;
|
||||
public int randomNumber;
|
||||
public Vector2 currentVelocity;
|
||||
public float timeUntilSwitch;
|
||||
|
||||
public override void EnterState(CEStateManager CornerEnemy) //passiert nur das erste mal wo er aufgerufen wird
|
||||
{
|
||||
cEVariables = CornerEnemy.GetComponent<CEVariables>();
|
||||
currentTargetVector = new Vector2(Random.Range(0,2)*2-1, Random.Range(0,2)*2-1);
|
||||
RandomNeighborVector();
|
||||
timeUntilSwitch = cEVariables.moveDuration;
|
||||
}
|
||||
|
||||
public override void UpdateState(CEStateManager CornerEnemy) //passiert jeden frame
|
||||
{
|
||||
CalculateTargetPosition();
|
||||
timeUntilSwitch -= Time.smoothDeltaTime;
|
||||
if(timeUntilSwitch >= 0)
|
||||
{
|
||||
MoveToPosition(CornerEnemy);
|
||||
}
|
||||
else
|
||||
{
|
||||
CornerEnemy.SwitchState(CornerEnemy.ShootState);
|
||||
Debug.Log("switch to shoot");
|
||||
}
|
||||
}
|
||||
|
||||
void CalculateTargetPosition()
|
||||
{
|
||||
targetPosition = cEVariables.playerData.playerPosition + currentTargetVector * cEVariables.moveDistance;
|
||||
}
|
||||
|
||||
void RandomNeighborVector()
|
||||
{
|
||||
if(Random.Range(0,2) == 0)
|
||||
{
|
||||
currentTargetVector.x = currentTargetVector.x - (currentTargetVector.x * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentTargetVector.y = currentTargetVector.y - (currentTargetVector.y * 2);
|
||||
}
|
||||
}
|
||||
|
||||
void MoveToPosition(CEStateManager CornerEnemy)
|
||||
{
|
||||
CornerEnemy.transform.position = Vector2.SmoothDamp(CornerEnemy.transform.position, targetPosition, ref currentVelocity, cEVariables.moveSpeed * Time.deltaTime);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1c6a537fb83a4324aad655724f2f358d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class CEPatrolState : CEBaseState
|
||||
{
|
||||
CEVariables cEVariables;
|
||||
|
||||
public override void EnterState(CEStateManager CornerEnemy)
|
||||
{
|
||||
cEVariables = CornerEnemy.GetComponent<CEVariables>();
|
||||
}
|
||||
|
||||
public override void UpdateState(CEStateManager CornerEnemy)
|
||||
{
|
||||
|
||||
CornerEnemy.SwitchState(CornerEnemy.MoveState);
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 15346aeec83ab4a419994afa358cef2e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,41 @@
|
||||
using Unity.Properties;
|
||||
using UnityEditor.U2D.Aseprite;
|
||||
using UnityEngine;
|
||||
using UnityEngine.U2D;
|
||||
|
||||
public class CEShootState : CEBaseState
|
||||
{
|
||||
CEVariables cEVariables;
|
||||
public float timer;
|
||||
public float timesShoot;
|
||||
|
||||
public override void EnterState(CEStateManager CornerEnemy)
|
||||
{
|
||||
cEVariables = CornerEnemy.GetComponent<CEVariables>();
|
||||
timer = 0;
|
||||
timesShoot = 0;
|
||||
}
|
||||
|
||||
public override void UpdateState(CEStateManager CornerEnemy)
|
||||
{
|
||||
timer += Time.deltaTime;
|
||||
if(timer > cEVariables.timeBetweenShots)
|
||||
{
|
||||
timer = 0;
|
||||
Shoot();
|
||||
timesShoot++;
|
||||
}
|
||||
|
||||
if(timesShoot > cEVariables.shootAmount)
|
||||
{
|
||||
CornerEnemy.SwitchState(CornerEnemy.MoveState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Shoot()
|
||||
{
|
||||
cEVariables.CreateBullet();
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 197736bf882dc2d42a124a72702b66f9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@@ -0,0 +1,30 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class CEStateManager : MonoBehaviour
|
||||
{
|
||||
CEBaseState currentState;
|
||||
public CEPatrolState PatrolState = new CEPatrolState();
|
||||
public CEMoveState MoveState = new CEMoveState();
|
||||
public CEShootState ShootState = new CEShootState();
|
||||
|
||||
void Start()
|
||||
{
|
||||
currentState = PatrolState;
|
||||
|
||||
currentState.EnterState(this);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
currentState.UpdateState(this);
|
||||
}
|
||||
|
||||
public void SwitchState(CEBaseState state)
|
||||
{
|
||||
currentState = state;
|
||||
state.EnterState(this);
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 29f4f9763f9d32b42a66f763a69e97d8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user