Beispiel #1
0
 public void TryAttack(Actor target)
 {
     GetMovablePosition(AttackRadius, true);
     if (playerMove.SingleOrDefault(x => x.Item1 == target.Position) != null)
     {
         target.Health -= Attack;
         ActorAnim.FaceAttackTarget(target.Position);
         Main.main.waiting = null;
         State             = TurnState.INACTIVE;
     }
     else
     {
         Debug.Log("Client Error Attack");
     }
 }
Beispiel #2
0
    public static int constructor(IntPtr l)
    {
        int result;

        try
        {
            ActorAnim o = new ActorAnim();
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, o);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
Beispiel #3
0
    //Animation

    public void playAnim(string name)
    {
        List <ActorAnim> newAnim = new List <ActorAnim>();

        foreach (ActorAnim aa in animations)
        {
            if (aa.name.ToLower().Trim() == name.ToLower().Trim())
            {
                newAnim.Add(aa);
            }
        }

        ActorAnim pickedAnim = null;

        if (newAnim.Count == 1)
        {
            Debug.Log("Only one animation found to use!");
            pickedAnim = newAnim[0];
        }
        else
        {
            pickedAnim = newAnim[Mathf.FloorToInt(Random.Range(0, newAnim.Count - 1))];
            Debug.Log("Chose to use animation: " + pickedAnim.myClip.name);
        }
        if (newAnim != null)
        {
            myAnim.Play(pickedAnim.myClip.name, AnimationPlayMode.Stop);
            if (pickedAnim.soundClip != null)
            {
                _gm._GUI.playSoundFX(pickedAnim.soundClip);
            }
        }
        else
        {
            Debug.Log("Actor does not have animation called " + name + "!");
        }
    }
Beispiel #4
0
    public override void Update()
    {
        if (!thinking)
        {
            if (State == TurnState.MOVE)
            {
                ResetMovablePosition();
                Vector3Int nearest = Utility.NearestEnemy(Position, Main.main.tiles, MoveRadius, TeamID);
                if (Position == nearest)
                {
                    nearest = Utility.NearestEnemy(Position, Main.main.tiles, MoveRadius, TeamID, true);
                }

                ActorMoveList = playerMove.SingleOrDefault(x => x.Item1 == nearest).Item2;
                if (ActorMoveList == null)
                {
                    ActorMoveList = new List <Utility.Direction>();
                }
                Debug.Log(ActorMoveList.Count);

                Position = nearest;
                State    = TurnState.WAIT;
            }
            else if (State == TurnState.WAIT)
            {
                GetMovablePosition(AttackRadius, true);
                if (playerMove == null || playerMove.Count == 0)
                {
                    EndTurn();
                }
                else
                {
                    State    = TurnState.ATK;
                    thinking = true;
                }
            }
            else if (State == TurnState.ATK)
            {
                ResetMovablePosition();
                Vector3Int targetPos = playerMove[0].Item1;
                Actor      target    = Main.main.actors.FirstOrDefault(x => x.Position == targetPos && x.Health > 0);
                ActorAnim.FaceAttackTarget(targetPos);
                target.Health -= Attack;
                EndTurn();
            }
        }
        else
        {
            thinkTime -= Time.deltaTime;
            if (thinkTime <= 0f)
            {
                thinking  = false;
                thinkTime = thinkMaxTime;
            }
        }
        if (!movableShowed && !inAnimation)
        {
            if (State == TurnState.ATK)
            {
                ShowMovablePosition(true);
                movableShowed = true;
            }
            else if (State == TurnState.MOVE)
            {
                ShowMovablePosition();
                movableShowed = true;
            }
        }
    }
Beispiel #5
0
    public override void Update()
    {
        if (Input.GetMouseButtonDown(0) && !Main.main.menuFocus)
        {
            Vector3    worldpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3Int cellpos  = Main.main.grid.WorldToCell(worldpos);

            if (State == TurnState.MOVE)
            {
                if (Main.main.ground.GetColor(cellpos) == Main.main.moveColor)
                {
                    ResetMovablePosition();
                    string mData = "CSM|";
                    mData += Idx + "|";
                    mData += cellpos.x + "#" + cellpos.y;
                    if (Main.main.isMulti)
                    {
                        Client.Instance.Send(mData);
                    }

                    ActorMoveList = playerMove.SingleOrDefault(x => x.Item1 == cellpos).Item2;
                    if (ActorMoveList == null)
                    {
                        ActorMoveList = new List <Utility.Direction>();
                    }
                    Debug.Log(ActorMoveList.Count);

                    Position = cellpos;
                    State    = TurnState.WAIT;
                }
                else if (Main.main.ground.GetColor(cellpos) == Main.main.activeColor)
                {
                    ResetMovablePosition();
                    string mData = "CSM|-1";
                    if (Main.main.isMulti)
                    {
                        Client.Instance.Send(mData);
                    }
                    State = TurnState.WAIT;
                }
            }
            else if (State == TurnState.ATK)
            {
                if (Main.main.ground.GetColor(cellpos) == Main.main.attackColor)
                {
                    Actor target = Main.main.actors.FirstOrDefault(x => x.Position == cellpos && x.Health > 0);
                    target.Health -= Attack;
                    ActorAnim.FaceAttackTarget(cellpos);
                    ResetMovablePosition();
                    string mData = "CSA|";
                    mData += Idx + "|";
                    mData += target.Idx;
                    if (Main.main.isMulti)
                    {
                        Client.Instance.Send(mData);
                    }
                    EndTurn();
                }
                else if (Main.main.ground.GetColor(cellpos) == Main.main.activeColor)
                {
                    ResetMovablePosition();
                    string mData = "CSA|-1";
                    if (Main.main.isMulti)
                    {
                        Client.Instance.Send(mData);
                    }
                    EndTurn();
                }
            }
        }
        else if (State == TurnState.WAIT)
        {
            GetMovablePosition(AttackRadius, true);
            if (playerMove == null || playerMove.Count == 0)
            {
                string mData = "CSA|-1";
                if (Main.main.isMulti)
                {
                    Client.Instance.Send(mData);
                }
                EndTurn();
            }
            else
            {
                State = TurnState.ATK;
            }
        }
        if (!movableShowed && !inAnimation)
        {
            if (State == TurnState.ATK)
            {
                ShowMovablePosition(true);
                movableShowed = true;
            }
            else if (State == TurnState.MOVE)
            {
                ShowMovablePosition();
                movableShowed = true;
            }
        }
    }