示例#1
0
        public override void BuildCommand(int id, DVector3 position)
        {
            if (buildInProgress)
            {
                return;
            }

            if (buildables[id] == null)
            {
                return;
            }

            position = new DVector3(position.x,
                                    World.current.map.Height(position),
                                    position.z);

            currentMode = World.current.entityPrototypes[buildables[id]].BuildMode();
            if (currentMode == BuildMode.BUILD_IN_PLACE || currentMode == BuildMode.BUILD_IMMEDIATE)
            {
                if (!CheckBuildPlacement(id, position))
                {
                    return;
                }
            }
            // TODO: Check placement for BUILD_foo here.
            if (!HaveEnoughResources(id))
            {
                return;
            }

            ConsumeResources(id, false);
            buildInProgress  = true;
            totalTime        = DReal.Parse(World.current.entityPrototypes[buildables[id]].data["buildTime"]);
            remainingTime    = totalTime;
            buildingWhat     = id;
            buildingPosition = position;
            switch (currentMode)
            {
            case BuildMode.SPAWN:
                break;

            case BuildMode.SPAWN_IMMEDIATE:
                World.current.Instantiate(buildables[buildingWhat],
                                          entity.team,
                                          entity.RandomSpawnPosition(spawnMin, spawnMax));
                World.current.eventListener.Animate(entity, "Spawn");
                break;

            case BuildMode.BUILD_THEN_PLACE:
                break;

            case BuildMode.BUILD_IN_PLACE:
                var proto = World.current.entityPrototypes[buildables[id]];
                var ent   = new Entity(entity.team, position, proto);
                // Only instantiate the collider and the health component, if any.
                foreach (var cproto in proto.components)
                {
                    if (cproto.kind == "Collider")
                    {
                        ent.AddComponent(new Collider(ent, cproto));
                    }
                    else if (cproto.kind == "Health")
                    {
                        ent.AddComponent(new Health(ent, cproto));
                    }
                }
                inPlaceConstruction = new PartialBuilding(ent);
                ent.AddComponent(inPlaceConstruction);
                break;

            case BuildMode.BUILD_IMMEDIATE:
                World.current.Instantiate(buildables[buildingWhat],
                                          entity.team,
                                          buildingPosition);
                break;
            }
        }
示例#2
0
文件: World.cs 项目: rbarraud/blarg4
        public Entity Instantiate(string prototypeName, int team, DVector3 position)
        {
            var proto = entityPrototypes[prototypeName];
            var ent   = new Entity(team, position, proto);

            foreach (var cproto in proto.components)
            {
                Component comp = null;
                if (cproto.kind == "Wizard")
                {
                    comp = new Wizard(ent, cproto);
                }
                else if (cproto.kind == "WizardTower")
                {
                    comp = new WizardTower(ent, cproto);
                }
                else if (cproto.kind == "BasicUnit")
                {
                    comp = new BasicUnit(ent, cproto);
                }
                else if (cproto.kind == "GroundMotor")
                {
                    comp = new GroundMotor(ent, cproto);
                }
                else if (cproto.kind == "AirMotor")
                {
                    comp = new AirMotor(ent, cproto);
                }
                else if (cproto.kind == "ResourceCollectionPoint")
                {
                    comp = new ResourceCollectionPoint(ent, cproto);
                }
                else if (cproto.kind == "ResourceHarvester")
                {
                    comp = new ResourceHarvester(ent, cproto);
                }
                else if (cproto.kind == "Truck")
                {
                    comp = new Truck(ent, cproto);
                }
                else if (cproto.kind == "MineTruck")
                {
                    comp = new MineTruck(ent, cproto);
                }
                else if (cproto.kind == "Mine")
                {
                    comp = new Mine(ent, cproto);
                }
                else if (cproto.kind == "Factory")
                {
                    comp = new Factory(ent, cproto);
                }
                else if (cproto.kind == "ResourceSource")
                {
                    comp = new ResourceSource(ent, cproto);
                }
                else if (cproto.kind == "ProjectileWeapon")
                {
                    comp = new ProjectileWeapon(ent, cproto);
                }
                else if (cproto.kind == "Projectile")
                {
                    comp = new Projectile(ent, cproto);
                }
                else if (cproto.kind == "Collider")
                {
                    comp = new Collider(ent, cproto);
                }
                else if (cproto.kind == "HitscanWeapon")
                {
                    comp = new HitscanWeapon(ent, cproto);
                }
                else if (cproto.kind == "Health")
                {
                    comp = new Health(ent, cproto);
                }
                else if (cproto.kind == "BuildRadius")
                {
                    comp = new BuildRadius(ent, cproto);
                }
                else if (cproto.kind == "Team")
                {
                    comp = new Team(ent, cproto);
                }
                else if (cproto.kind == "ResourcePool")
                {
                    comp = new ResourcePool(ent, cproto);
                }
                else
                {
                    Logger.Log("Unknown component type {0}", cproto.kind);
                }
                ent.AddComponent(comp);
            }
            return(ent);
        }