コード例 #1
0
        public override ImmutableGameState CloneDerived()
        {
            ImmutableGameState clone = base.CloneDerived();

            clone.TankStates   = (TankState[])TankStates.Clone();
            clone.BulletStates = (BulletState[])BulletStates.Clone();
            return(clone);
        }
コード例 #2
0
    /// <summary>
    /// Updates the <see cref="state"/> Only modifies the state variable if the
    /// player has died or respawned since last Update.
    /// </summary>
    public void UpdateState()
    {
        if (wasNotDead != hb.isNotDead() && hb.isNotDead())
        {
            state = TankStates.Alive;
        }
        else if (wasNotDead != hb.isNotDead() && !hb.isNotDead())
        {
            state = TankStates.Dead;
        }

        wasNotDead = hb.isNotDead();
    }
コード例 #3
0
    //To be used later maybe when we need to declare other global variables
    // that don't belong in above categories
    #endregion
    // Start is called before the first frame update
    void Start()
    {
        // Determine which OS the game is being run on, and set controller
        // mappings accordingly.
        switch (Application.platform)
        {
        case RuntimePlatform.OSXEditor:
        case RuntimePlatform.OSXPlayer:

            forwardDrive      = (tag == "Player1_obj" ? "forward-drive-1-mac" : "forward-drive-2-mac");
            backwardDrive     = (tag == "Player1_obj" ? "backward-drive-1-mac" : "backward-drive-2-mac");
            reverse           = (tag == "Player1_obj" ? "reverse-1-mac" : "reverse-2-mac");
            buildButton       = (tag == "Player1_obj" ? "build-1-mac" : "build-2-mac");
            selectBuildButton = (tag == "Player1_obj" ? "select-1-mac" : "select-2-mac");
            submitButton      = (tag == "Player1_obj" ? "submit-1-mac" : "submit-2-mac");
            break;

        case RuntimePlatform.WindowsEditor:
        case RuntimePlatform.WindowsPlayer:
            forwardDrive      = (tag == "Player1_obj" ? "forward-drive-1-win" : "forward-drive-2-win");
            backwardDrive     = (tag == "Player1_obj" ? "backward-drive-1-win" : "backward-drive-2-win");
            reverse           = (tag == "Player1_obj" ? "reverse-1-win" : "reverse-2-win");
            buildButton       = (tag == "Player1_obj" ? "build-1-win" : "build-2-win");
            selectBuildButton = (tag == "Player1_obj" ? "select-1-win" : "select-2-win");
            submitButton      = (tag == "Player1_obj" ? "submit-1-win" : "submit-2-win");
            break;

        default:
            Debug.LogError("Mappings not setup for operating systems other than Windows or Mac OS");
            break;
        }
        // Left analog stick is the same mapping on Mac OS and Windows
        xDrive = (tag == "Player1_obj" ? "x-drive-1" : "x-drive-2");
        zDrive = (tag == "Player1_obj" ? "z-drive-1" : "z-drive-2");

        // Define movement starting values
        stickInput = new Vector3();
        rb         = transform.GetComponent <Rigidbody>();
        dir        = 1;

        // Define resource starting values
        Fluff   = 0;
        Plastic = 0;

        // Get the reference to the HealthBehavior script
        hb         = GetComponent <HealthBehavior>();
        state      = TankStates.Alive;
        wasNotDead = hb.isNotDead();
        GetComponent <Rigidbody>().maxAngularVelocity = turnSpeed;
    }
コード例 #4
0
ファイル: Tank.cs プロジェクト: QuinnPainter/Choplifter
 public void Destroy()
 {
     if (state != TankStates.Dead)
     {
         (Scene as PlayScene).Score += 50;
     }
     state = TankStates.Dead;
     Explosion explosion = Scene.AddSprite<Explosion>();
     explosion.Scale = 3;
     explosion.BackgroundLayer = BackgroundLayer;
     explosion.StartExploding(Position, 1, false);
     Scene.Remove(this);
     Scene.Remove(gun);
 }
コード例 #5
0
    private void SendStates(bool initial)
    {
        var type       = initial ? MessageType.InitialTankStates : MessageType.TankStates;
        var tankStates = new TankStates
        {
            Type   = type,
            States = new TankStates.TankState[_tanks.Count]
        };

        var i = 0;

        foreach (var tank in _tanksList)
        {
            var position     = tank.transform.position;
            var firePosition = tank.GetDesiredFirePosition();
            var fire         = tank.GetFireIsHeld();
            var state        = new TankStates.TankState
            {
                moveX     = position.x,
                moveY     = position.z,
                fire      = fire,
                fireX     = firePosition.x,
                fireY     = firePosition.z,
                respawned = initial || tank.Respawned
            };
            if (state.respawned)
            {
                state.rotation = tank.GetRotation();
            }

            tank.Respawned = false;
            if (initial)
            {
                state.publicKey = _publicKeys[i];
            }
            tankStates.States[i] = state;
            i++;
        }

        var sendTo = _publicKeys.Where(p => !p.Equals(_publicKey)).ToList();

        sendTo.ForEach(a => Send(a, tankStates));
    }
コード例 #6
0
 private void SetState()
 {
     if (_movementInputValue > 0f)
     {
         State = TankStates.Moving;
     }
     else
     {
         State = TankStates.Idle;
     }
 }
コード例 #7
0
 private void Awake()
 {
     _rigidbody = GetComponent<Rigidbody>();
     State = TankStates.Idle;
 }
コード例 #8
0
ファイル: Tank.cs プロジェクト: QuinnPainter/Choplifter
 void Aim()
 {
     gun.Aim();
     state = TankStates.Aiming;
     Speed = 0;
     Wait(1, Think);
 }
コード例 #9
0
    private void StartClient()
    {
        TankInputModule.Instance.Init(state => Send(Env.ServerName, state));

        for (var i = 0; i < 15; i++)
        {
            Send(i + "." + Env.ServerName, new JoinEvent());
        }

        _client.OnMessage += (src, data) => UnityMainThreadDispatcher.Instance().Enqueue(() =>
        {
            Env.ServerName = src;
            switch (GetMessageType(data))
            {
            case MessageType.InitialTankStates:
                Debug.Log(src);
                Debug.Log(_tanks);
                goto case MessageType.TankStates;

            case MessageType.TankStates:
                var tanks = TankStates.FromByteArray(data);
                for (var i = 0; i < tanks.States.Length; i++)
                {
                    var state = tanks.States[i];
                    TankManager tank;
                    if (tanks.Type == MessageType.InitialTankStates)
                    {
                        tank = AddTank(state.publicKey);
                        if (state.publicKey.Equals(_publicKey))
                        {
                            HUDController.Instance.InitHudPlayer(tank.Health);
                            tank.Follow();
                        }
                    }
                    else
                    {
                        tank = _tanksList[i];
                    }

                    if (state.respawned)
                    {
                        tank.Respawn(
                            new Vector3(state.moveX, 0, state.moveY),
                            new Vector3(0, state.rotation.Value, 0)
                            );
                    }
                    else
                    {
                        tank.SetDesiredMovementPosition(new Vector2(state.moveX, state.moveY));
                    }
                    tank.SetDesiredFirePosition(new Vector3(state.fireX, 0, state.fireY));
                    tank.SetFireIsHeld(state.fire);
                }

                break;

            case MessageType.ChatMessage:
                var message = ChatMessage.FromByteArray(data);
                UIChat.ShowMessage(message.Message);
                break;

            case MessageType.JoinEvent:
                throw new ArgumentOutOfRangeException();

            case MessageType.MovementState:
                throw new ArgumentOutOfRangeException();

            default:
                throw new ArgumentOutOfRangeException();
            }
        });
    }