public GameObject Build(IDescriptorWithID desc)
    {
        var go = _builders[desc.GetTag()].Build(desc);

        if (go != null)
        {
            _forDiassemble.Add(go.GetHashCode(), go);
        }
        return(go);
    }
    public GameObject Build(IDescriptorWithID desc)
    {
        if (!(desc is MeteorDescriptor))
        {
            throw new ArgumentException();
        }
        var d = (MeteorDescriptor)desc;

        CreateAndFire(d.To, d.Time);
        return(null);
    }
示例#3
0
    private void Construct(IDescriptorWithID desc)
    {
        GameObject go;

        go = _buildCtrl.Build(desc);

        if (go == null)
        {
            return;
        }
        _stuff.Add(desc.GetID(), go);

        if (go.CompareTag("Car"))
        {
            _idOfLast = desc.GetID();
        }
    }
示例#4
0
    public GameObject Build(IDescriptorWithID desc)
    {
        if (!(desc is WallDescriptor))
        {
            throw new ArgumentException();
        }
        var wall = _wallPool.Pop();

        _style.StylizeWall(wall);
        var d = (WallDescriptor)desc;

        wall.transform.position = d.Position.MyVec2ToVec3();
        var scale = wall.transform.localScale;

        scale.z = d.Length;
        wall.transform.localScale = scale;
        return(wall);
    }
示例#5
0
    public GameObject Build(IDescriptorWithID desc)
    {
        GameObject puddle = null;

        if (!(desc is OilPuddleDescriptor || desc is OilEndDescriptor))
        {
            throw new ArgumentException();
        }
        if (desc is OilPuddleDescriptor)
        {
            var d = (OilPuddleDescriptor)desc;
            switch (d.State)
            {
            case OilPuddleDescriptor.PosState.First:
                puddle = _firstPool.Pop();
                _style.StylizeFirstPuddle(puddle);
                break;

            case OilPuddleDescriptor.PosState.Last:
                puddle = _transitPool.Pop();
                _style.StylizeLastPuddle(puddle);
                break;

            case OilPuddleDescriptor.PosState.Transitional:
                puddle = _transitPool.Pop();
                _style.StylizeTransitPuddle(puddle);
                break;

            default: throw new ArgumentOutOfRangeException();
            }
            puddle.transform.position = d.Position.MyVec2ToVec3(DefaultPosY);
            var scale = new Vector3(d.Width, d.Length, 1);
            puddle.transform.localScale = scale;
        }
        else
        {
            var end = _endPool.Pop();
            end.transform.position = ((OilEndDescriptor)desc).Position.MyVec2ToVec3(_endPosY);
            ForDisassemble.Add(end.GetHashCode(), end);
        }

        return(puddle);
    }
示例#6
0
 public GameObject Build(IDescriptorWithID desc)
 {
     if (!(desc is CopterDescriptor || desc is CopterRecallDescriptor))
     {
         throw new ArgumentException();
     }
     if (desc is CopterRecallDescriptor)
     {
         _copterQueue.Dequeue().GetComponent <Copter>().Recall(this);
     }
     else
     {
         var go = _copterPool.Pop();
         _style.StylizeCopter(go);
         var copter = go.GetComponent <Copter>();
         var d      = (CopterDescriptor)desc;
         copter.Init(d.ReloadTime, d.MissileVelocity,
                     d.MissileRotationVelocity, d.MissileLimit, d.MiddlePosX);
         copter.TakePosition();
         _copterQueue.Enqueue(go);
         return(go);
     }
     return(null);
 }
示例#7
0
    public GameObject Build(IDescriptorWithID desc)
    {
        if (!(desc is VehicleDescriptor))
        {
            throw new ArgumentException();
        }

        GameObject go = null;

        Vehicle.VehicleBehaviour behaviour = null;
        Vehicle vehicle;
        var     bt   = Vehicle.BlockType.S1;
        var     size = 0;

        if (desc is MilitaryDescriptor)
        {
            go = _mPool.Pop();
            _style.StylizeMilitary(go);
            behaviour = new Vehicle.MilitaryCar((MilitaryDescriptor)desc);
        }
        else if (desc is PoliceDescriptor)
        {
            go = _pPool.Pop();
            _style.StylizePolice(go);
            behaviour = new Vehicle.PoliceCar((PoliceDescriptor)desc);
        }
        else if (desc is CarDescriptor)
        {
            switch (((CarDescriptor)desc).Size)
            {
            case 1:
                go = _s1Pool.Pop();
                _style.StylizeCar1(go);
                break;

            case 2:
                go = _s2Pool.Pop();
                _style.StylizeCar2(go);
                bt   = Vehicle.BlockType.S2;
                size = 2;
                break;

            case 3:
                go = _s3Pool.Pop();
                _style.StylizeCar3(go);
                bt   = Vehicle.BlockType.S3;
                size = 3;
                break;
            }

            if (desc is WobblingCarDescriptor)
            {
                behaviour = new Vehicle.WobblingCar((WobblingCarDescriptor)desc);
            }
            else if (desc is SlidingCarDescriptor)
            {
                behaviour = new Vehicle.SlidingCar((SlidingCarDescriptor)desc);
            }
            else if (desc is AutoMeteorCarDescriptor)
            {
                behaviour = new Vehicle.AutoMeteorCar((AutoMeteorCarDescriptor)desc);
            }
            else
            {
                behaviour = new Vehicle.SimpleCar((CarDescriptor)desc);
            }
        }
        else if (desc is TrailerDescriptor)
        {
            go = _tPool.Pop();
            _style.StylizeTrailer(go);
            behaviour = new Vehicle.Trailer((TrailerDescriptor)desc);
        }

        go.transform.position = ((VehicleDescriptor)desc).Position.MyVec2ToVec3();
        go.transform.rotation = Quaternion.identity;
        vehicle = go.GetComponent <Vehicle>();
        vehicle.Rezet();
        if (size == 0)
        {
            vehicle.InitSize();
        }
        else
        {
            vehicle.InitSize(bt, size);
        }
        vehicle.InitBehaviour(behaviour);

        return(go);
    }