亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p_ceilng.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
字號:
// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// $Log:$
//
// DESCRIPTION:  Ceiling aninmation (lowering, crushing, raising)
//
//-----------------------------------------------------------------------------

static const char
rcsid[] = "$Id: p_ceilng.c,v 1.4 1997/02/03 16:47:53 b1 Exp $";


#include "z_zone.h"
#include "doomdef.h"
#include "p_local.h"

#include "s_sound.h"

// State.
#include "doomstat.h"
#include "r_state.h"

// Data.
#include "sounds.h"

//
// CEILINGS
//


ceiling_t*	activeceilings[MAXCEILINGS];


//
// T_MoveCeiling
//

void T_MoveCeiling (ceiling_t* ceiling)
{
    result_e	res;
	
    switch(ceiling->direction)
    {
      case 0:
	// IN STASIS
	break;
      case 1:
	// UP
	res = T_MovePlane(ceiling->sector,
			  ceiling->speed,
			  ceiling->topheight,
			  false,1,ceiling->direction);
	
	if (!(leveltime&7))
	{
	    switch(ceiling->type)
	    {
	      case silentCrushAndRaise:
		break;
	      default:
		S_StartSound((mobj_t *)&ceiling->sector->soundorg,
			     sfx_stnmov);
		// ?
		break;
	    }
	}
	
	if (res == pastdest)
	{
	    switch(ceiling->type)
	    {
	      case raiseToHighest:
		P_RemoveActiveCeiling(ceiling);
		break;
		
	      case silentCrushAndRaise:
		S_StartSound((mobj_t *)&ceiling->sector->soundorg,
			     sfx_pstop);
	      case fastCrushAndRaise:
	      case crushAndRaise:
		ceiling->direction = -1;
		break;
		
	      default:
		break;
	    }
	    
	}
	break;
	
      case -1:
	// DOWN
	res = T_MovePlane(ceiling->sector,
			  ceiling->speed,
			  ceiling->bottomheight,
			  ceiling->crush,1,ceiling->direction);
	
	if (!(leveltime&7))
	{
	    switch(ceiling->type)
	    {
	      case silentCrushAndRaise: break;
	      default:
		S_StartSound((mobj_t *)&ceiling->sector->soundorg,
			     sfx_stnmov);
	    }
	}
	
	if (res == pastdest)
	{
	    switch(ceiling->type)
	    {
	      case silentCrushAndRaise:
		S_StartSound((mobj_t *)&ceiling->sector->soundorg,
			     sfx_pstop);
	      case crushAndRaise:
		ceiling->speed = CEILSPEED;
	      case fastCrushAndRaise:
		ceiling->direction = 1;
		break;

	      case lowerAndCrush:
	      case lowerToFloor:
		P_RemoveActiveCeiling(ceiling);
		break;

	      default:
		break;
	    }
	}
	else // ( res != pastdest )
	{
	    if (res == crushed)
	    {
		switch(ceiling->type)
		{
		  case silentCrushAndRaise:
		  case crushAndRaise:
		  case lowerAndCrush:
		    ceiling->speed = CEILSPEED / 8;
		    break;

		  default:
		    break;
		}
	    }
	}
	break;
    }
}


//
// EV_DoCeiling
// Move a ceiling up/down and all around!
//
int
EV_DoCeiling
( line_t*	line,
  ceiling_e	type )
{
    int		secnum;
    int		rtn;
    sector_t*	sec;
    ceiling_t*	ceiling;
	
    secnum = -1;
    rtn = 0;
    
    //	Reactivate in-stasis ceilings...for certain types.
    switch(type)
    {
      case fastCrushAndRaise:
      case silentCrushAndRaise:
      case crushAndRaise:
	P_ActivateInStasisCeiling(line);
      default:
	break;
    }
	
    while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
    {
	sec = &sectors[secnum];
	if (sec->specialdata)
	    continue;
	
	// new door thinker
	rtn = 1;
	ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVSPEC, 0);
	P_AddThinker (&ceiling->thinker);
	sec->specialdata = ceiling;
	ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling;
	ceiling->sector = sec;
	ceiling->crush = false;
	
	switch(type)
	{
	  case fastCrushAndRaise:
	    ceiling->crush = true;
	    ceiling->topheight = sec->ceilingheight;
	    ceiling->bottomheight = sec->floorheight + (8*FRACUNIT);
	    ceiling->direction = -1;
	    ceiling->speed = CEILSPEED * 2;
	    break;

	  case silentCrushAndRaise:
	  case crushAndRaise:
	    ceiling->crush = true;
	    ceiling->topheight = sec->ceilingheight;
	  case lowerAndCrush:
	  case lowerToFloor:
	    ceiling->bottomheight = sec->floorheight;
	    if (type != lowerToFloor)
		ceiling->bottomheight += 8*FRACUNIT;
	    ceiling->direction = -1;
	    ceiling->speed = CEILSPEED;
	    break;

	  case raiseToHighest:
	    ceiling->topheight = P_FindHighestCeilingSurrounding(sec);
	    ceiling->direction = 1;
	    ceiling->speed = CEILSPEED;
	    break;
	}
		
	ceiling->tag = sec->tag;
	ceiling->type = type;
	P_AddActiveCeiling(ceiling);
    }
    return rtn;
}


//
// Add an active ceiling
//
void P_AddActiveCeiling(ceiling_t* c)
{
    int		i;
    
    for (i = 0; i < MAXCEILINGS;i++)
    {
	if (activeceilings[i] == NULL)
	{
	    activeceilings[i] = c;
	    return;
	}
    }
}



//
// Remove a ceiling's thinker
//
void P_RemoveActiveCeiling(ceiling_t* c)
{
    int		i;
	
    for (i = 0;i < MAXCEILINGS;i++)
    {
	if (activeceilings[i] == c)
	{
	    activeceilings[i]->sector->specialdata = NULL;
	    P_RemoveThinker (&activeceilings[i]->thinker);
	    activeceilings[i] = NULL;
	    break;
	}
    }
}



//
// Restart a ceiling that's in-stasis
//
void P_ActivateInStasisCeiling(line_t* line)
{
    int		i;
	
    for (i = 0;i < MAXCEILINGS;i++)
    {
	if (activeceilings[i]
	    && (activeceilings[i]->tag == line->tag)
	    && (activeceilings[i]->direction == 0))
	{
	    activeceilings[i]->direction = activeceilings[i]->olddirection;
	    activeceilings[i]->thinker.function.acp1
	      = (actionf_p1)T_MoveCeiling;
	}
    }
}



//
// EV_CeilingCrushStop
// Stop a ceiling from crushing!
//
int	EV_CeilingCrushStop(line_t	*line)
{
    int		i;
    int		rtn;
	
    rtn = 0;
    for (i = 0;i < MAXCEILINGS;i++)
    {
	if (activeceilings[i]
	    && (activeceilings[i]->tag == line->tag)
	    && (activeceilings[i]->direction != 0))
	{
	    activeceilings[i]->olddirection = activeceilings[i]->direction;
	    activeceilings[i]->thinker.function.acv = (actionf_v)NULL;
	    activeceilings[i]->direction = 0;		// in-stasis
	    rtn = 1;
	}
    }
    

    return rtn;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re8在线精品视频免费播放| 欧美精品色一区二区三区| 色综合网色综合| 日韩欧美高清在线| 悠悠色在线精品| 国产另类ts人妖一区二区| 色综合久久久久网| 国产亚洲成av人在线观看导航| 亚洲综合在线观看视频| 国产99久久久久久免费看农村| 3d动漫精品啪啪一区二区竹菊 | 国产精品二三区| 日韩av电影天堂| 在线免费亚洲电影| 国产校园另类小说区| 麻豆精品蜜桃视频网站| 欧美优质美女网站| 亚洲素人一区二区| 成人免费观看av| 久久影院电视剧免费观看| 日韩电影一区二区三区| 在线观看不卡视频| 夜夜精品视频一区二区| 久久人人超碰精品| 蜜臀国产一区二区三区在线播放| 欧美优质美女网站| 亚洲一区二区三区四区在线观看 | 国产一区不卡在线| 日韩欧美高清一区| 久久国产尿小便嘘嘘| 在线综合视频播放| 日本亚洲最大的色成网站www| 欧美专区在线观看一区| 亚洲精品国产视频| 色婷婷综合久久久久中文一区二区| 欧美激情综合五月色丁香小说| 国内精品写真在线观看| 精品少妇一区二区三区视频免付费 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 在线观看视频一区二区欧美日韩| 国产精品免费av| 菠萝蜜视频在线观看一区| 国产亚洲va综合人人澡精品 | 视频一区在线播放| 欧美一区二区在线播放| 麻豆国产一区二区| 国产日韩欧美电影| 91性感美女视频| 亚洲福利视频三区| 日韩一级片在线播放| 国产一区二区三区四区在线观看| 久久久久久久免费视频了| 丁香婷婷综合色啪| 亚洲一区在线观看视频| 日韩欧美亚洲国产另类| 国产91精品露脸国语对白| 亚洲色图都市小说| 欧美一区二区视频在线观看2020 | 欧美一区二区精美| 国产精品一区二区三区四区| 中文字幕一区二区三区在线不卡| 欧美日韩你懂的| 国产一区二区精品久久99| 日韩美女视频一区二区| 538prom精品视频线放| 国产999精品久久久久久绿帽| 亚洲嫩草精品久久| 日韩欧美一区二区视频| 99热99精品| 久久精品国产精品亚洲精品| 欧美韩国日本不卡| 91麻豆精品国产91久久久资源速度 | 久久国产精品99久久人人澡| 中文字幕不卡在线| 欧美色图12p| 成人妖精视频yjsp地址| 午夜精品福利久久久| 久久久久国产精品麻豆ai换脸| 91精品办公室少妇高潮对白| 久久99国产精品麻豆| 亚洲一区免费观看| 中文字幕不卡在线播放| 欧美丰满嫩嫩电影| 99re8在线精品视频免费播放| 日本视频中文字幕一区二区三区 | 日韩三区在线观看| 91在线观看高清| 国产精品综合二区| 男男成人高潮片免费网站| 亚洲毛片av在线| 久久久国产精品不卡| 51精品久久久久久久蜜臀| 色呦呦网站一区| 成人av动漫网站| 国产精品中文有码| 日本一区中文字幕| 丝袜美腿亚洲色图| 亚洲一区二区五区| 亚洲欧美电影一区二区| 久久日一线二线三线suv| 91精品国产91综合久久蜜臀| 在线视频观看一区| 91啪在线观看| 99免费精品视频| 99这里只有久久精品视频| 国产福利91精品一区| 国内成+人亚洲+欧美+综合在线| 日日夜夜精品视频天天综合网| 亚洲欧美激情一区二区| 中文字幕亚洲一区二区av在线| 久久久国产精华| 日本一区二区动态图| 精品对白一区国产伦| 欧美精品丝袜中出| 欧美一区二区在线免费播放| 91精品欧美一区二区三区综合在| 欧美日本视频在线| 日韩情涩欧美日韩视频| 日韩一区二区视频| 精品久久久久久久久久久久久久久久久 | 国产午夜精品久久久久久久 | 国产不卡在线视频| 成人黄色国产精品网站大全在线免费观看 | 免费成人av在线播放| 日本大胆欧美人术艺术动态| 手机精品视频在线观看| 热久久免费视频| 九九视频精品免费| 国产电影一区在线| 成人激情免费网站| 色成年激情久久综合| 在线观看日韩高清av| 欧美日韩国产综合视频在线观看| 欧美色视频一区| 日韩一区二区电影在线| 欧美国产日产图区| 亚洲综合色成人| 久久精品免费观看| 国产.欧美.日韩| 欧洲国内综合视频| 精品乱人伦小说| 国产精品私人自拍| 亚洲国产日韩综合久久精品| 免费高清在线一区| 成人av资源在线| 精品污污网站免费看| 日韩一区二区三区视频| 亚洲国产高清aⅴ视频| 亚洲欧美日韩久久| 九九在线精品视频| 91国产视频在线观看| 日韩一区二区三区电影| 国产精品久线观看视频| 午夜精品福利一区二区三区蜜桃| 久久99精品国产| 欧美亚洲丝袜传媒另类| 精品国产伦一区二区三区观看体验| 中文在线免费一区三区高中清不卡| 亚洲一区免费视频| 国产成a人无v码亚洲福利| 欧美日韩高清在线| 国产精品久久国产精麻豆99网站| 午夜欧美视频在线观看| 成人激情动漫在线观看| 欧美一区二区三区公司| 亚洲日本青草视频在线怡红院| 日本成人在线电影网| av午夜一区麻豆| 久久一二三国产| 亚洲电影中文字幕在线观看| 丰满少妇在线播放bd日韩电影| 欧美一区欧美二区| 亚洲网友自拍偷拍| 91麻豆国产福利在线观看| 精品国产露脸精彩对白| 午夜精品久久久久久久久| 一道本成人在线| 亚洲欧洲色图综合| 高清在线成人网| 精品国产欧美一区二区| 欧美大片在线观看| 88在线观看91蜜桃国自产| 久久综合999| 日韩国产欧美在线视频| 色妞www精品视频| 国产精品色婷婷久久58| 久久99精品网久久| 日韩美一区二区三区| 亚洲777理论| 欧美在线免费观看视频| 亚洲美女区一区| 色婷婷av久久久久久久| 国产精品福利电影一区二区三区四区| 国产自产2019最新不卡| 欧美大度的电影原声| 人妖欧美一区二区| 日韩一区二区三区观看| 日韩av中文字幕一区二区| 欧美巨大另类极品videosbest | 久久精品一区八戒影视|